开发者学堂课程【Apache Flink 入门到实战 - Flink 开源社区出品 :Apache Flink Python API 的现状及未来规划(一)】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/632/detail/10042
Apache Flink Python API 的现状及未来规划(一)
内容介绍
一,Apache Flink Python API 的前世今生和未来发展
二,Apacho Flink Python API 架构及开发环境塔建
三,Apeche Flink Python API 核心算子介绝及应用
一,Apache Flink Python AP 的前世今生和未来发展
1,Why Python API- 最流行的开发语言
对于 Python 来讲,可以说在世界上是非常火热,非常流行的一门语言,数据的一些统计,它是除了 Java 和 javascript 之外的,这个受欢迎度是 top3 的一个受欢迎程度。
这个数据,来源于这个一个知名的以这个研发人员为中心的行业分析公司,那么python 语言,在网上去搜索,或者是在 ppt 分享出去之后,可以下面的 link 去看一下详细的情况,python 本身非常的火热.
除了大数据之外,目前还有一个 AI 人工智能。
人工智能,虽然是一个在很久以前就已经被提出,并且是一个意志研究性的课题,但是人工智能,不得不说机器学习,机器学习其实本身作为这个人工智能的这个一个方法或者一种工具手段,其实是在我们的生活中无处不在,比如淘宝,天猫还有更多。
在2016年,两场人类的顶尖的这个人类顶尖的棋手和这个机器的对抗,阿尔法狗的对抗其实从这里面也时时刻刻在展现出一个趋势,就是 AI 和人工智能,机器学习是现在不断要研究和不断发现一个趋势。
2,Flink 又有基于流批统一的流式计算引擎又有怎样的关系
想一个问题,就是目前来讲,比较著名的或者说流行的大数据相关的开源的项目或者组件有早期的批示的分布式处理房间,还有这个流式处理框架,storm 或者最近非常火的 spark。
除了这些,这个大数据计算领域的开源组件以外。比如大量的用户在使用收藏,大量的用户在使用 have。都是非常这个对 python 语言进行了一个非常好的这么一个支持。基于这样一个原因,flink Apache 在1.9当中也投入了大量的精力去推出了一个全新的 py flink。
所以说大数据的这些著名的项目都在支持 python,python 的生态,也有很好的一个分开的支持。
3,ML 青睐的语言
除了上面的统计数据来讲,可以从 python 语言的本身去想,就是 python 本身其实是一个解释型的语言,但是非常简单,并且还有一点 python 对语法的一个设计似乎有一个哲学。就是永远都用一种方法,并且只用一种方法去解决一件事情。所以这种简单易用的特性吸引开发者,包括很多知名的开源项目。
统计数据已经说明了,从这个角度来讲,python 语言是一种需求,不管是开发者还是我们实际的粉丝用户来讲,有很大一部分人都是 python 爱好者,都是 python 的用户。
所以从这个角度来讲,flink 本身非常的注重和关注我用户,不仅仅是 Java 语言,Scala 语言。有多种入口,多种途径,让更多的用户来使用,所以在1..9里面已经支持了这个大部分常用的一些段子。比如说,Window 或者 join,但是不支持 positive 的这个 user defined function。但在1.10有些地方的 function 进行支持,并且会加入一些,数据分析类库的一些知识,把 streamapi 以及 sapi 进行支持。
二,Apacho Flink Python API 架构及开发环境塔建
1,Apacho Flink Python API 架构
1.9之前 flink 的 sight he jet stream 已经有 Python API 的支持。但是这种是基于两套不同的 API,也就是说 APP 的一套 API a stream 同样会有一个 API,样对于 flink一个流失计算以前来讲,这个统一的架构至关重要。
他们采用了其中一个这个节 python 的基础体系,基础架构。以前新的推出一种全新的技术架构来推向大家,这个提供给大家使用一个新的一套拍三级片。
tablegi 和 python API 之间是简单的。利用 python vm 和加 VM 进行通信。在 python 的 API 的书写或者吊运过程中,以某种方式来与 Java API 进行通讯。
就像操作 Java 的 table 加一这样一个新的架构当中,就能保证一点,第一个能有一些好处在里面,就是能,不创建一套新的卷子,而轻松的和 Java 的 table API 的功能保持一致。第二点,会得益于现有的这个家化教育台里面的优化模型,可以利用 Java API 的优化模型进行优化,那么 python 的 API 写出来的,也会有一个极致的性能。
在这样一种架构上面,关于新的 pythonapi 来讲,分成三个部分,第一个就是 peasanttop 的一个接口,用纯的 python 语言去开发,同时还会有一个 python 与 Java 的通讯模块。在 python 端有一个穴位去负责与极端的交互,那么会有一个with or 来接受请求。那么在这样的架构当中 OK。
在 Python Xiang Jia Wan 发出一个请求,比如需要一个对象或者需要一个 url 对象的时候,这时候在 Java 端就会创建出一个加盟的一个对象,它存在某一个容器里面。
这时候,容器再会把这个对象生成一个唯一的 ID。这个 ID再返回给 python,接下来 python 这边拿着这个 ID 就可以调用拍的照片,同样也有它对应的对象来调用其中的方法,然后把方法的参数以及对应的 ID 传到 Java 那边,Java 这边就知道。
这样基于这样的一个架构体系当中,就能拿到一个和 Java 一模一样的这种功能。
2,Apacho Flink Python API 开发环境塔建
①创建执行环境
#创建执行环境
exec_env=ExecutionEnvironment.get_execution_environment()
#创建配置对象(IdleState TTL,NULL check,timezone 等)
#创建一个 Table ENV
t_env=Batch Table Environment.create(exec_env,t_conflg)
②创建数据源
#创建数据源表t_env.connect(FileSystem(),path(source file) /
# Csv/Json/Avro
.with_ format(OldCsv()
.line_ delimiter(',')
.field('word', DataTypes.STRING()) /
#定义字段名和类型.with_ schema(Schema()
.field('word', DataTypes.STRING())) /
# 注册 Source.register_ table_ source('mySource')
③编写业务逻辑和执行
# word_countif
计算逻辑
#读取数据源t_ env.scan('mySource')/
#按 word 进行分组.group_ by('word') /
#进行 count 计数统计select('word, count(1)') /
#将计算结果插入到结果表 .insert_ into('mySink')
# 执行 Jobt_ env.execute("wordcount")
3,Python Table API- 环境搭建
①环境依赖检查
.JDK1.8+(1.8.0_211) java -version
.Maven 3x(3.2.5)mvn-version
.Scala 2.11+(2.12.0)scala-version
.Python 2.7+(2.7.16)python-V
.Git 2.20+(2.20.1)git version
.Pip 19.1+(pip 19.1.1)pip-V
那么第二步,就是要构建一个 Java 的二进制发布包,因为 python 是没有进行二进制包的 released。
如果没有的话,就需要从源代码进行构建。这个页面,就是从源代码获取主观代码,但是只是 master 不够稳定,最好是用1.9分之去做。要想利用 ApacheFlink Python API 进行业务开发,需要将 PyFlink 发布包进行安装。目前 PyFlink 并没有发布到 Python 仓库,所以需要从源码构建。
②构建 Java 二进制发布包
#下载源代码
git clone https://github.com/apache/flink.git
bbal
#拉取1.9分支
cd flink; git fetch origin release-1.9
git checkout -b release-1.9 origin/release-1.9
#构建二进制发布包
mvn clean install -DskipTests -Dfast
在构建完 Java 的 API 之后,打包一个能够识别的一个资源包,进行安装。那么在实际的使用当中,也可以按这种命令去拷贝,去在自己的环境中尝试。这个过程也不会很久,因为只是 Java 的一包囊括进来,再把自己 python py flink 本身模块的 Java 和 python 和 python 的包弄打包成一起。
③构建 python 的发布包
一般情况我们期望以 pipinstall 的方式安装 python 的类库,我们要想安装 PyFlink的类库,也需要构建可用于 pipinstall 的发布包。执行如下命令:
cd flink-python; python setup.py sdist
C
opyingpyflink/util/utils.py->apache-flink-1.9.dev0/pyflink/uti
Writing apache-flink-1.9.dev0/setup.cfg
creating dist
Creating tar archive
removing 'apache-flink-1.9.dev0' (and everything under it)
在 dist 日录的 apache-flink-1.9.dev0.targz 就是我们可以用于 pipinstall 的 PyFlink 包.
④验证 Pyflink
我们可以运行刚才开发的 word_countpv,以验证环境的正确性:https://github.com/sunjincheng121/enjoyment.code/blob/master/myPy Flink/enjoyment/word count.py
https://github.com/sunjincheng121/enjoyment.code/blob/master/myPy Flink/enjoyment/source.csv
Git clone https://github.com/sunjincheng121/enjoyment.code.git
cd enioyment.code; levthon word_count.py
⑤IDE 配置
Apache Flink 官网
https://ci.apache.org/projects/flink/flink-docs- master/flinkDev/ide setup.html#pycharm
同时我也整理到了Blog:http://1t.click/6Nf
4,Python Table API- 作业提交
①CLI 方式
2.提交已经写好的 Job 到集群运行,我们用如下命令:
./bin/flink run -py
~/training/0806/enioyment.code/myPyFlink/enjoyment/word_count_ci.py
详细命令说明请查阅 :https://ci.apache.org/projects/flink/flink-docs- master/ops/cli.html
-py 指定 python 文件
-pyn 指定 python 的 module
-pvfs 指定 python 依赖的资源文件 -j 指定依赖的 JAR 包
同样是 word count,这段文字的一些 word 的一个统计的一个结果,这样就已经这个执行完成,这是一个命令行方式去执行的,这个同时除了刚才用的这个参数,其实我们还有这个可以指定 python。
指定拍摄的 model,还可以指定一些依赖的资源文件,除了 ID 运行和这个福利转去运行的话,其实在1.9的版本,中还为大家提供一种更便利的方式就是拍摄,可以交互式的方式来拍摄影片,拿到结果。有两种方式,第一种方式 logo 和容貌其实没有特别本质的差异,我们先以 local 来看。
这样输出之后,它会出来一个 Flink python shell,同时会有一些势力的程序,就能够达到这个正确的输出和提交,既可以写流 streaming,也可以写这个白纸。
②Python-Shell—方式提交
Pythonshell 是很方便进行研究性开发的,我们可以方便的在 Python REPL 中进行开发 Flink Python Table API.
详细文档参考:https://ci.apache.org/projects/flink/flink-docs master/ops/python shell.html
接下米我们以 Local 和 Remote 两种方式,体验·下 Python-Shell。
Local
bin/pvflink-shell.sh local
(会启动一个 mini Cluster)
Remote
bin/pvflink-shell.sh remote 127.0.0.14000
(需要一个已经存在的 cluster)
结果已经打印出来,是一个统计的计算结果,到现在为止,完成了这一个1.9上的API的一个架构。