Apache Flink Python API 的现状及未来规划(一)| 学习笔记

本文涉及的产品
实时计算 Flink 版,5000CU*H 3个月
云原生大数据计算服务MaxCompute,500CU*H 100GB 3个月
云原生大数据计算服务 MaxCompute,5000CU*H 100GB 3个月
简介: 快速学习 Apache Flink Python API 的现状及未来规划。

开发者学堂课程【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 的一个受欢迎程度。

image.png

这个数据,来源于这个一个知名的以这个研发人员为中心的行业分析公司,那么python 语言,在网上去搜索,或者是在 ppt 分享出去之后,可以下面的 link 去看一下详细的情况,python 本身非常的火热.

 image.png

除了大数据之外,目前还有一个 AI 人工智能。

人工智能,虽然是一个在很久以前就已经被提出,并且是一个意志研究性的课题,但是人工智能,不得不说机器学习,机器学习其实本身作为这个人工智能的这个一个方法或者一种工具手段,其实是在我们的生活中无处不在,比如淘宝,天猫还有更多。

在2016年,两场人类的顶尖的这个人类顶尖的棋手和这个机器的对抗,阿尔法狗的对抗其实从这里面也时时刻刻在展现出一个趋势,就是 AI 和人工智能,机器学习是现在不断要研究和不断发现一个趋势。

2,Flink 又有基于流批统一的流式计算引擎又有怎样的关系

想一个问题,就是目前来讲,比较著名的或者说流行的大数据相关的开源的项目或者组件有早期的批示的分布式处理房间,还有这个流式处理框架,storm 或者最近非常火的 spark。

除了这些,这个大数据计算领域的开源组件以外。比如大量的用户在使用收藏,大量的用户在使用 have。都是非常这个对 python 语言进行了一个非常好的这么一个支持。基于这样一个原因,flink Apache 在1.9当中也投入了大量的精力去推出了一个全新的 py flink。

所以说大数据的这些著名的项目都在支持 python,python 的生态,也有很好的一个分开的支持。

3,ML 青睐的语言

image.png

除了上面的统计数据来讲,可以从 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 架构

image.png

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 写出来的,也会有一个极致的性能。

image.png

在这样一种架构上面关于新的 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 开发环境塔建

image.png

①创建执行环境

#创建执行环境

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')
# 执行 Job
t_ 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

Copyingpyflink/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.pyhttps://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的一个架构。

相关实践学习
基于Hologres轻松玩转一站式实时仓库
本场景介绍如何利用阿里云MaxCompute、实时计算Flink和交互式分析服务Hologres开发离线、实时数据融合分析的数据大屏应用。
Linux入门到精通
本套课程是从入门开始的Linux学习课程,适合初学者阅读。由浅入深案例丰富,通俗易懂。主要涉及基础的系统操作以及工作中常用的各种服务软件的应用、部署和优化。即使是零基础的学员,只要能够坚持把所有章节都学完,也一定会受益匪浅。
相关文章
|
6月前
|
Java 流计算
【极数系列】Flink搭建入门项目Demo & 秒懂Flink开发运行原理(05)
【极数系列】Flink搭建入门项目Demo & 秒懂Flink开发运行原理(05)
225 3
|
4月前
|
SQL 分布式计算 大数据
MaxCompute产品使用合集之PyODPS Python类的开发如何用MC的资源
MaxCompute作为一款全面的大数据处理平台,广泛应用于各类大数据分析、数据挖掘、BI及机器学习场景。掌握其核心功能、熟练操作流程、遵循最佳实践,可以帮助用户高效、安全地管理和利用海量数据。以下是一个关于MaxCompute产品使用的合集,涵盖了其核心功能、应用场景、操作流程以及最佳实践等内容。
|
5月前
|
机器学习/深度学习 人工智能 Apache
人工智能平台PAI操作报错合集之alink任务可以在本地运行,上传到flink web运行就报错,如何解决
阿里云人工智能平台PAI (Platform for Artificial Intelligence) 是阿里云推出的一套全面、易用的机器学习和深度学习平台,旨在帮助企业、开发者和数据科学家快速构建、训练、部署和管理人工智能模型。在使用阿里云人工智能平台PAI进行操作时,可能会遇到各种类型的错误。以下列举了一些常见的报错情况及其可能的原因和解决方法。
|
6月前
|
SQL Java 数据处理
实时计算 Flink版产品使用合集之怎么热加载Java和Python的UDF
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
6月前
|
SQL Java 数据处理
实时计算 Flink版产品使用合集之在生产运行方式中是嵌入java代码还是在客户端
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStreamAPI、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
6月前
|
消息中间件 Oracle 关系型数据库
实时计算 Flink版产品使用合集之如果想自定义connector和pipeline要如何入手
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStreamAPI、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
6月前
|
消息中间件 SQL Kafka
如何高效接入 Flink: Connecter / Catalog API 核心设计与社区进展
本文整理自阿里云实时计算团队 Apache Flink Committer 和 PMC Member 任庆盛在 FFA 2023 核心技术专场(二)中的分享。
458 1
如何高效接入 Flink: Connecter / Catalog API 核心设计与社区进展
|
6月前
|
Java 大数据 API
[AIGC] Flink入门教程:理解DataStream API(Java版)
[AIGC] Flink入门教程:理解DataStream API(Java版)
106 0
|
6月前
|
存储 SQL Apache
Apache Hudi 1.x 版本重磅功能展望与讨论
Apache Hudi 1.x 版本重磅功能展望与讨论
114 4
|
12月前
|
消息中间件 关系型数据库 MySQL
Flink教程(06)- Flink批流一体API(Source示例)
Flink教程(06)- Flink批流一体API(Source示例)
107 0

推荐镜像

更多
下一篇
无影云桌面