PyFlink 是 Flink on Zeppelin上Python语言的入口 , Flink Interpreter 内部会创建 Python Shell, 在这个Python Shell 里会创建 Flink的各种 Environment (包括ExecutionEnvironment,StreamExecutionEnvironment 等等)。需要注意的是PyFlink里的各种Environment变量背后对应的Java变量都是Scala Shell那边创建的。你在Zeppelin上写的Python代码就会提交到这个Python Shell里去执行。Zeppelin已经为你创建了下面7个变量 (不要自己再创建这些Environment)

  • s_env (StreamExecutionEnvironment),
  • b_env (ExecutionEnvironment)
  • st_env (StreamTableEnvironment for blink planner)
  • bt_env (BatchTableEnvironment for blink planner)
  • st_env_2 (StreamTableEnvironment for flink planner)
  • bt_env_2 (BatchTableEnvironment for flink planner)
  • z (ZeppelinContext)

配置PyFlink

使用PyFlink需要做以下3个配置

  • 安装 pyflink (pip install apache-flink==1.11.1) (版本号根据实际情况选择)。如果你需要使用PyFlink UDF,那么你需要在每台TaskManager的机器上安装pyflink,如果是Yarn模式,那么需要在Yarn集群的每台机器上都安装,因为TaskManager可能会起在任何一台机器上。
  • 将flink opt下的 flink-python-*.jar 拷贝到 flink lib下
  • 设置 zeppelin.pyflink.python 为python的可执行文件的路径(默认是用PATH里的python),因为有时候你的系统里可能安装了多个python版本,所以需要设置 zeppelin.pyflink.python 为你想用的那个版本

使用PyFlink

PyFlink 在Zeppelin中有2种使用方式

  • %flink.pyflink
  • %flink.ipyflink

%flink.pyflink 最简单,除了上面的配置不需要做其他事情,但功能也相对比较弱,没法和jupyter里的python环境相比

%flink.ipyflink

%flink.ipyflink 功能比较强,和jupyter里的python环境类似,但是需要如下额外配置。

  • 如果你没有安装anaconda,那么需要安装下面3个python库 ```
  • Jupyter pip install jupyter
  • grpcio pip install grpcio
  • protobuf pip install protobuf ```

  • 如果你已经安装了anaconda,那么只需要安装下面2个python库 ```

  • grpcio pip install grpcio
  • protobuf pip install protobuf ```

当上面的这些库安装完之后,你就可以使用 %flink.ipyflink 了,除了基本的python执行环境外,还可以享用如下一些高级feature

1. 彩色高亮输出

%flink.pyflink 输出是纯文本文字,而%flink.ipyflink 输出是彩色的,更加醒目,如下图
image.png

2. IPython Magic语法糖支持

IPython语法糖是指以%开头的特殊语法,如下图所示

  1. %flink.ipyflink
  2. #python help
  3. range?
  4. #timeit
  5. %timeit range(100)

3. Matplotlib 支持

Matplotlib的用法和在Jupyter变得一模一样,如下图
image.png

4. 更多Python可视化库的支持

除了Matplotlib之外,还能支持更多其他Python的可视化库,比如Bokeh, HvPlot, Pandas,Seaborn 等等,具体可以参考每个Python库的官方文档,在Zeppelin无需任何其他配置,按照官方用法就可以。

5. 更好的Code Completion支持

和Scala Shell的Code Completion一样,你只要按tab键就会显示当前环境下的code completion,比如
image.png

Python 段落执行顺序

同一时间只能有一个Python段落执行,Zeppelin是安装FIFO的顺序来执行Python段落。所以如果你的一个Python段落里正在跑一个Streaming作业的话,另外一个Scala段落只能等待(处于PENDING状态)。

视频教程

Flink on Zeppelin 19. PyFlink 入门.mp4 (30.87MB)

钉钉群+公众号

Flink on Zeppelin 3群钉钉.JPG image.png