PyFlink 开发情况利器:Zeppelin Notebook

也许你早就听说过 Zeppelin,但是之前的文章都偏重讲述如何在 Zeppelin 里开发 Flink SQL,今天则来介绍下如何在 Zeppelin 里高效的开发 PyFlink Job,特别是解决 PyFlink 的情况问题。一句来总结这篇文章的主题,就是在 Zeppelin notebook 里利用 Conda 来创造 Python env 自动部署到 Yarn 集群中,你无需手动在集群上去安装任何 PyFlink 的包,并且你可以在一个 Yarn 集群里同时运用互相隔离的多个版本的 PyFlink。最后你

也许你早就听说过 Zeppelin,但是之前的文章都偏重讲述如何在 Zeppelin 里开发 Flink SQL,今天则来介绍下如何在 Zeppelin 里高效的开发 PyFlink Job,特别是解决 PyFlink 的情况问题。

一句来总结这篇文章的主题,就是在 Zeppelin notebook 里利用 Conda 来创造 Python env 自动部署到 Yarn 集群中,你无需手动在集群上去安装任何 PyFlink 的包,并且你可以在一个 Yarn 集群里同时运用互相隔离的多个版本的 PyFlink。最后你能看到的效果就是这样:

1. 能够在 PyFlink 客户端运用第三方 Python 库,比如 matplotlib:

img

2. 可以在 PyFlink UDF 里运用第三方 Python 库,如:

img

接下来看看如何来实现。

一、准备工作

Step 1.

准备好最新版本的 Zeppelin 的搭建,这个就不在这边展开了,如果有问题可以加入 Flink on Zeppelin 钉钉群 (34517043) 咨询。另外需要注意的是,Zeppelin 部署集群需要是 Linux,如果是 Mac 的话,会导致在 Mac 机器上打的 Conda 情况无法在 Yarn 集群里运用 (因为 Conda 包在不同系统间是不兼容的)。

Step 2.

下载 Flink 1.13, 需要注意的是,本文的功能只能用在 Flink 1.13 以上版本,然后:

把 flink-Python-*.jar 这个 jar 包 copy 到 Flink 的 lib 文件夹下;把 opt/Python 这个文件夹 copy 到 Flink 的 lib 文件夹下。

Step 3.

安装以下软件 (这些软件是用于创造 Conda env 的):

miniconda:https://docs.conda.io/en/latest/miniconda.htmlconda pack:https://conda.github.io/conda-pack/mamba:https://github.com/mamba-org/mamba

二、搭建 PyFlink 情况

接下来就可以在 Zeppelin 里搭建并且运用 PyFlink 了。

Step 1. 制作 JobManager 上的 PyFlink Conda 情况

因为 Zeppelin 天生支持 Shell,所以可以在 Zeppelin 里用 Shell 来制作 PyFlink 情况。注意这里的 Python 第三方包是在 PyFlink 客户端 (JobManager) 需要的包,比如 Matplotlib 这些,并且确保至少安装了下边这些包:

某个版本的 Python (这里用的是 3.7)apache-flink (这里用的是 1.13.1)jupyter,grpcio,protobuf (这三个包是 Zeppelin 需要的)

剩下的包可以根据需要来指定:

%sh

# make sure you have conda and momba installed.
# install miniconda: https://docs.conda.io/en/latest/miniconda.html
# install mamba: https://github.com/mamba-org/mamba

echo “name: pyflink_env
channels:
– conda-forge
– defaults
dependencies:
– Python=3.7
– pip
– pip:
– apache-flink==1.13.1
– jupyter
– grpcio
– protobuf
– matplotlib
– pandasql
– pandas
– scipy
– seaborn
– plotnine
” > pyflink_env.yml

mamba env remove -n pyflink_env
mamba env create -f pyflink_env.yml

运行下边的代码打包 PyFlink 的 Conda 情况并且上传到 HDFS (注意这里打包出来的文件格式是 tar.gz):

%sh

rm -rf pyflink_env.tar.gz
conda pack –ignore-missing-files -n pyflink_env -o pyflink_env.tar.gz

hadoop fs -rmr /tmp/pyflink_env.tar.gz
hadoop fs -put pyflink_env.tar.gz /tmp
# The Python conda tar should be public accessible, so need to change permission here.
hadoop fs -chmod 644 /tmp/pyflink_env.tar.gz

Step 2. 制作 TaskManager 上的 PyFlink Conda 情况

运行下边的代码来创造 TaskManager 上的 PyFlink Conda 情况,TaskManager 上的 PyFlink 情况至少包含以下 2 个包:

某个版本的 Python (这里用的是 3.7)apache-flink (这里用的是 1.13.1)

剩下的包是 Python UDF 需要依赖的包,比如这里指定了 pandas:

echo “name: pyflink_tm_env
channels:
– conda-forge
– defaults
dependencies:
– Python=3.7
– pip
– pip:
– apache-flink==1.13.1
– pandas
” > pyflink_tm_env.yml

mamba env remove -n pyflink_tm_env
mamba env create -f pyflink_tm_env.yml

运行下边的代码打包 PyFlink 的 conda 情况并且上传到 HDFS (注意这里运用的是 zip 格式)

%sh

rm -rf pyflink_tm_env.zip
conda pack –ignore-missing-files –zip-symlinks -n pyflink_tm_env -o pyflink_tm_env.zip

hadoop fs -rmr /tmp/pyflink_tm_env.zip
hadoop fs -put pyflink_tm_env.zip /tmp
# The Python conda tar should be public accessible, so need to change permission here.
hadoop fs -chmod 644 /tmp/pyflink_tm_env.zip

Step 3. 在 PyFlink 中运用 Conda 情况

接下来就可以在 Zeppelin 中运用上面创造的 Conda 情况了,首先需要在 Zeppelin 里配置 Flink,主要配置的选项有:

flink.execution.mode 为 yarn-application, 本文所讲的方法只适用于 yarn-application 模式;指定 yarn.ship-archives,zeppelin.pyflink.Python 以及 zeppelin.interpreter.conda.env.name 来配置 JobManager 侧的 PyFlink Conda 情况;指定 Python.archives 以及 Python.executable 来指定 TaskManager 侧的 PyFlink Conda 情况;指定其他可选的 Flink 配置,比如这里的 flink.jm.memory 和 flink.tm.memory。%flink.conf

flink.execution.mode yarn-application

yarn.ship-archives /mnt/disk1/jzhang/zeppelin/pyflink_env.tar.gz
zeppelin.pyflink.Python pyflink_env.tar.gz/bin/Python
zeppelin.interpreter.conda.env.name pyflink_env.tar.gz

Python.archives hdfs:///tmp/pyflink_tm_env.zip
Python.executable pyflink_tm_env.zip/bin/Python3.7

flink.jm.memory 2048
flink.tm.memory 2048

接下来就可以如一开始所说的那样在 Zeppelin 里运用 PyFlink 以及指定的 Conda 情况了。有 2 种场景:

下边的例子里,可以在 PyFlink 客户端 (JobManager 侧) 运用上面创造的 JobManager 侧的 Conda 情况,比如下边运用了 Matplotlib。

img

下边的例子是在 PyFlink UDF 里运用上面创造的 TaskManager 侧 Conda 情况里的库,比如下边在 UDF 里运用 Pandas。

img

三、总结与未来

本文内容就是在 Zeppelin notebook 里利用 Conda 来创造 Python env 自动部署到 Yarn 集群中,无需手动在集群上去安装任何 Pyflink 的包,并且可以在一个 Yarn 集群里同时运用多个版本的 PyFlink。

每个 PyFlink 的情况都是隔离的,而且可以随时定制更改 Conda 情况。可以下载下边这个 note 并导入到 Zeppelin,就可以复现今天讲的内容:http://23.254.161.240/#/notebook/2G8N1WTTS

此外还有很多可以改进的地方:

目前我们需要创造 2 个 conda env ,原因是 Zeppelin 支持 tar.gz 格式,而 Flink 只支持 zip 格式。等后期两边统一之后,只要创造一个 conda env 就可以;apache-flink 现在包含了 Flink 的 jar 包,这就导致打出来的 conda env 特别大,yarn container 在初始化的时候耗时会比较长,这个需要 Flink 社区提供一个轻量级的 Python 包 (不包含 Flink jar 包),就可以大大减小 conda env 的大小。

原创文章,作者:阿里云大数据AI技术,如若转载,请注明出处:https://www.iaiol.com/news/pyflink-kai-fa-qing-kuang-li-qi-zeppelinnotebook/

(0)
上一篇 2021年 9月 29日 下午2:14
下一篇 2021年 9月 29日 下午2:18

相关推荐

  • 免费、开源的PyTorch IDE来了!跨三大操作系统,还带视频教程

    经过数月的封闭测试后,TorchStudio 现在终于来了。

    2022年 3月 1日
  • “中原氢城”濮阳与优必选科技达成策略竞争,发布全世界首款氢能源人形机器人

    2022年9月28日,氢生活、AI未来——全世界首款氢能源人形机器人发布暨濮阳“两能”交融策略签约仪式在“中原氢城”濮阳举行。在全世界首款氢能源人形机器人“一行”发布的同时,濮阳与优必选科技就人工智能与氢能“两能”交融达成策略竞争,积极探索和实施以人工智能驱动新能源生长策略,助力实行我国“碳达峰、碳中和”的目标,推动经济绿色高质量生长。领导和高朋与全世界首款氢能源人形机器人&ld

    2022年 9月 28日
  • 马斯克脑机接口公司Neuralink高层动荡:联合创始人兼总裁离任,曾想建侏罗纪公园

    马克斯 · 霍达克的离任会对 Neuralink 的未来发展造成什么影响呢?埃隆 · 马斯克又会选择谁来接任总裁一职呢?这些我们都拭目以待吧!

    2021年 5月 3日
  • 295页博士论文探索加强进修形象表面,获AAAI/ACM SIGAI博士论文奖提名

    除了论文本身超有技术含量之外,文中使用的图表也非常美观漂亮。

    2022年 3月 20日
  • AI芯片业的挑战亦是企业智能化转型的降本增效机会

    「机器之心2021-2022年度AI趋势大咖说」聚焦「驱动未来的AI技能」与「重塑产业的AI科技」,推出线上分享,共邀请近40位AI领域知名学者、产业专家及企业高管通过主题分享及多人圆桌等形式,与行业精英、读者、观众共同回顾 2021年中的重要技能和学术热点,盘点AI产业的年度研究方向以及重大科技突破,展望2022年度AI技能发展方向、AI技能与产业科技融合趋势。

    2022年 7月 26日
  • JUST技术:提升基于GPS轨迹的路网断定精确度

    路网数据对于城市中的很多应用,比如车载导航和线路优化等,都非常重要。传统的路途数据采集方式依赖于采集车,消耗大量的人力物力。随着GPS设备的普及,海量轨迹数据在城市里产生,使我们能够用轨迹数据去天生路网。这个问题在近十年中已经有了广泛的研究,但是其中很多方式的精确度(precision)并不高,特别是上下路途,平行路途等地方。由于轨迹数据在城市内并不是均匀分散的,对于那些车辆频繁通行的地方,我们有没有办法进一步提高这些区域路网断定的精确度呢?

    2021年 4月 7日
  • 刷题太遭罪怎么办?这个算法基地专为小白量身打造,还带动画

    如何有效地刷算法题?刷题小白最新打卡地。算法很重要,但算法也是学起来最难,最令人生畏的。算法千千万,不知该如何下手?经常看到有人抱怨:刚开始刷题时,自己很迷茫,不知道从何刷起,也看不懂别人写的题解。思绪飞来飞去,有时候以为是这个知识点重要,但有时又认为自己走错了路,结果学了半天,越刷越乱,时间、经历都白白浪费。其实,学算法,刷题蛮干是不行的,需要遵循科学的方法。学习算法可能并不只是拼智商,可以通过后天的学习进行掌握,这就需要讲究技巧。方法找对了,可以起到事半功倍的效果。近日,在 Github 上就有人开源了一个项目

    2021年 3月 25日
  • ARM最新回应:新架构Armv9不受美国出口管理条例约束,华为可获受权

    对于Armv9架构,ARM首席执行官西蒙·塞加斯表示,「v9架构将提升宁静性和信任度,并为将来十年的计较机技巧奠定基础。」与此同时,v9架构不受美国出口管理条例约束也为华为带来了利好消息。

    2021年 3月 31日
  • 崭新x86内核架构、XeSS神经网络超采样、千亿晶体管SoC,这次英特尔诚意满满

    2021 年英特尔架构日上,英特尔发布一系列重大技术架构的改变和创新:两款崭新的 x86 内核架构(能效核与机能核)、代号为 Alder Lake 的首个机能混合架构、英特尔硬件线程调剂器、专为数据中心设计的下一代英特尔至强可扩大处理器 Sapphire Rapids 以及基础设施处理器(IPU)等内容。

    2021年 8月 20日
  • ScienceAI 2021「AI+质料」专题年度回顾

    编辑/凯霞传统的质料设想与研发,以实验和经验为主。但随着质料化学和加工变得越来越复杂,这变得越来越具有挑战性。随着人工智能(AI)的快速发展,AI 技巧已广泛使用于质料科学各领域。科学家正努力通过估计机建模和 AI 技巧,根据所需要的本能预计候选质料,从而加快新质料的研发速率和效率,降低研发成本。AI 正在减速搜索和预计质料特色。在 AI 的助力下,质料在极端、恶劣条件下的本能得到快速且准确的预计,实现了人类目前无法实现的……利用 AI 技巧来减速设想和发觉尚不存在的质料。这些先进的质料将使技巧更先进和更环

    2022年 1月 6日

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注