当前位置: 首页 > news >正文

大数据Flink(一百一十三):Flink Python写DataStreamAPI作业快速入门

文章目录

Flink Python写DataStreamAPI作业快速入门

一、Flink数据流

二、Flink分层API

三、​​​​​​​​​​​​​​Flink流处理程序的一般流程

四、 ​​​​​​​​​​​​​​创建PyFlink项目


Flink Python写DataStreamAPI作业快速入门

一、Flink数据流

在 Flink 中,应用程序由数据流组成,这些数据流可以由用户定义的运算符(注:有时我们称这些运算符为“算子”)进行转换。这些数据流形成有向图,从一个或多个源开始,以一个或多个输出结束。

Flink支持流处理和批处理,它是一个分布式的流批结合的大数据处理引擎。在 Flink 中,认为所有的数据本质上都是随时间产生的流数据,把批数据看作是流数据的特例,只不过流数据是一个无界的数据流,而批数据是一个有界的数据流(例如固定大小的数据集)。如下图所示:

因此,Flink 是一个用于在无界和有界数据流上进行有状态计算的通用的处理框架,它既具有处理无界流的复杂功能,也具有专门的运算符来高效地处理有界流。通常我们称无界数据为实时数据,来自消息队列或分布式日志等流源(如 Apache Kafka 或 Kinesis)。而有界数据,通常指的是历史数据,来自各种数据源(如文件、关系型数据库等)。由 Flink 应用程序产生的结果流可以发送到各种各样的系统,并且可以通过 REST API 访问 Flink 中包含的状态。 

当 Flink 处理一个有界的数据流时,就是采用的批处理工作模式。在这种操作模式中,我们可以选择先读取整个数据集,然后对数据进行排序、计算全局统计数据或生成总结所有输入的最终报告。当 Flink 处理一个无界的数据流时,就是采用的流处理工作模式。对于流数据处理,输入可能永远不会结束,因此我们必须在数据到达时持续不断地对这些数据进行处理。 

二、​​​​​​​Flink分层API

Flink 提供了开发流/批处理应用程序的API供开发者使用,越往上抽象程度越高,使用起来越方便;越往下越底层,使用起来难度越大,如下图所示:

Flink 提供了三个分层的 API。每个 API 在简洁性和表达性之间提供了不同的权衡,并针对不同的应用场景。 

 

注意:在Flink1.12时支持流批一体,DataSetAPI已经不推荐使用了,所以课程中除了个别案例使用DataSet外,后续其他案例都会优先使用DataStream流式API,既支持无界数据处理/流处理,也支持有界数据处理/批处理!当然Table&SQL-API会单独学习。

三、​​​​​​​​​​​​​​Flink流处理程序的一般流程

  1. 获取Flink流处理执行环境
  2. 构建source
  3. 数据处理
  4. 构建sink

四、 ​​​​​​​​​​​​​​创建PyFlink项目

先利用PyCharm创建项目,名为pyflink_study, 并为项目选择创建新的虚拟环境,基础解释器选择Python3.7版本(阿里云Flink全托管空间预装的是Python3.7版本,因此需要我们在Python3.7版本开发代码),如下:(需要提前安装python3.7,资料中有安装包)

创建之后,我们会看到External Libraries 里面使用了Python3.7, 但是初始化并没有PyFlink,所以我们需要进行显示的安装,如下: 

我们可以手动安装PyFlink,直接在PyCharm的Terminal下进行安装,在安装的过程中可以看到site-packages内容会不断增加。 

python -m pip install apache-flink==1.15.4

最终完成之后可以在site-packages下面找到pyflink目录,如下:

有了这些信息就可以进行PyFlink的作业开发了。

PyFlink的作业开发代码将会在下一篇详细介绍。


  • 📢博客主页:https://lansonli.blog.csdn.net
  • 📢欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正!
  • 📢本文由 Lansonli 原创,首发于 CSDN博客🙉
  • 📢停下休息的时候不要忘了别人还在奔跑,希望大家抓紧时间学习,全力奔赴更美好的生活✨

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • PySpark
  • 面向Data+AI时代的数据湖创新与优化(附Iceberg案例)
  • 电脑错误mfc140.dll丢失怎么办?mfc140.dll丢失如何修复?
  • MySQL数据库安装(详细)—>Mariadb的安装(day21)
  • 印度再现超级大片,豪华阵容加顶级特效
  • 【GC】垃圾回收原理分析
  • 股票锁仓是唯一的盈利方法吗,不如试试程序交易做T
  • MySQL Workbench 的入门指南
  • 彻底解决 node/npm, Electron下载失败相关问题, 从底层源码详解node electron 加速配置
  • 【计算机组成原理】计算机系统层次结构
  • 代码随想录训练营day51|图论part2
  • 【React+Ts+Vite+AntDesign】从0到1基础项目搭建(动态路由)
  • 性能测试经典案例解析——远程培训系统
  • 傅里叶变换家族
  • Oracle Enterprise Manager:Oracle数据库管理的高效工具
  • 【159天】尚学堂高琪Java300集视频精华笔记(128)
  • ES6核心特性
  • GDB 调试 Mysql 实战(三)优先队列排序算法中的行记录长度统计是怎么来的(上)...
  • happypack两次报错的问题
  • Linux快速复制或删除大量小文件
  • SOFAMosn配置模型
  • Swift 中的尾递归和蹦床
  • 力扣(LeetCode)357
  • 思否第一天
  • 网络应用优化——时延与带宽
  • 原生JS动态加载JS、CSS文件及代码脚本
  • Nginx实现动静分离
  • 浅谈sql中的in与not in,exists与not exists的区别
  • ​如何使用QGIS制作三维建筑
  • ​一文看懂数据清洗:缺失值、异常值和重复值的处理
  • !!java web学习笔记(一到五)
  • ## 临床数据 两两比较 加显著性boxplot加显著性
  • #APPINVENTOR学习记录
  • (20)目标检测算法之YOLOv5计算预选框、详解anchor计算
  • (51单片机)第五章-A/D和D/A工作原理-A/D
  • (55)MOS管专题--->(10)MOS管的封装
  • (cljs/run-at (JSVM. :browser) 搭建刚好可用的开发环境!)
  • (C语言)球球大作战
  • (Matalb分类预测)GA-BP遗传算法优化BP神经网络的多维分类预测
  • (备份) esp32 GPIO
  • (二)Eureka服务搭建,服务注册,服务发现
  • (附源码)springboot青少年公共卫生教育平台 毕业设计 643214
  • (附源码)ssm基于微信小程序的疫苗管理系统 毕业设计 092354
  • (六)DockerCompose安装与配置
  • (十三)Java springcloud B2B2C o2o多用户商城 springcloud架构 - SSO单点登录之OAuth2.0 根据token获取用户信息(4)...
  • *算法训练(leetcode)第四十七天 | 并查集理论基础、107. 寻找存在的路径
  • .net CHARTING图表控件下载地址
  • .NET Core WebAPI中使用swagger版本控制,添加注释
  • .net core 依赖注入的基本用发
  • .NET 线程 Thread 进程 Process、线程池 pool、Invoke、begininvoke、异步回调
  • .NET/C# 避免调试器不小心提前计算本应延迟计算的值
  • .NET6 开发一个检查某些状态持续多长时间的类
  • .NET6实现破解Modbus poll点表配置文件
  • .net通过类组装数据转换为json并且传递给对方接口
  • .Net语言中的StringBuilder:入门到精通