首先需要说明的是这里的Recovery和Flink的 Job Recovery不是一个概念,这里的Recovery 是指当Zeppelin Server进程挂掉之后重新起来的时候能够再连接到原来还在跑的Flink Interpreter 进程。这样的话你还能继续控制你的 Flink Job,比如Cancel Job,如果是 Streaming 的 Select 语句,你还能看到动态的流式数据的可视化。

配置

启动recovery非常简单,用户需要在 zeppelin-site.xml 中配置以下两个property

  1. <property>
  2. <name>zeppelin.recovery.storage.class</name>
  3. <value>org.apache.zeppelin.interpreter.recovery.LocalRecoveryStorage</value>
  4. <description>ReoveryStorage implementation</description>
  5. </property>
  6. <property>
  7. <name>zeppelin.recovery.dir</name>
  8. <value>recovery</value>
  9. <description>Location where recovery metadata is stored</description>
  10. </property>

zeppelin.recovery.storage.class 是用来存储interpreter的进程信息,包括机器名和端口。如果你没有配置,那么默认值是 org.apache.zeppelin.interpreter.recovery.NullRecoveryStorage, 不存放任何进程信息(也就是不能recovery)。我们需要设置成 org.apache.zeppelin.interpreter.recovery.LocalRecoveryStorage,LocalRecoveryStorage 是把 interpreter 的进程信息存放在本地文件系统。zeppelin.recovery.dir 是存放进程元数据的路径。除了 LocalRecoveryStorage,你还可以用
org.apache.zeppelin.interpreter.recovery.FileSystemRecoveryStorage,FileSystemRecoveryStorage是基于Hadoop hdfs实现的,也就是说把进程元数据存放在 hdfs 上。

验证Recovery

下面我们通过一个简单的例子要验证recovery是否成功运行。在这个例子中,我首先会跑一个Flink SQL的Job,然后将结果显示在Zeppelin页面,然后我会杀掉Zeppelin,那么前端自然就看不到结果了,然后重启Zeppelin,Zeppelin会自动连接到之前在跑的Flink Job,然后前端会继续更新数据,具体可以看下面这个视频。 Flink on Zeppelin 22. Recovery running paragraph.mp4 (35.66MB)

钉钉群+公众号

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