对于初学者来说,学习Flink可能不是一件容易的事情。看文档是一种学习,更重要的是实践起来。但是说实话对于一个初学者来说要把一个Flink SQL 跑起来还真不容易,要搭各种环境,真心累。很幸运的是,Flink生态圈里有这样一款工具可以帮助你更有效率地学习 Flink:Zeppelin。今天不会讲Flink on Zeppelin 本身的东西,今天会关注于如何用Zeppelin来学习Flink。

今天我就给大家介绍一个可能是迄今为止用户体验最好的Flink SQL 教程: Flink Sql Cookbook on Zeppelin。你无需写任何代码,只要照着这篇文章轻松几步就能跑各种类型的 Flink SQL 语句。废话不多说,我们开始吧。

这个教程其实就是 ververica 的 这个 flink-sql-cookbook (https://github.com/ververica/flink-sql-cookbook/ )的改进版。这里所有的例子你都可以在 Zeppelin 里跑起来,而且你不用写任何代码。我已经把里面的例子都移植到了 Zeppelin。下面是一个在Zeppelin里跑Flink SQL的例子
flink_sql.gif

准备环境

Step 1

  1. git clone https://github.com/zjffdu/flink-sql-cookbook-on-zeppelin.git

这个repo里是一些 zeppelin notebook,里面都是flink-sql-cookbook里的例子。

Step 2

下载 flink 1.13.1 (我没有试过其他版本的flink,有兴趣的同学可以试下),并解压。

Step 3

编译 flink faker https://github.com/knaufk/flink-faker/
把编译出来的flink-faker-0.3.0.jar 拷贝到 flink的lib目录下。这个flink faker是一个特制的table source,用来生成测试数据。我们的很多例子里都会用到这个flink faker。

Step 4

运行下面的命令启动最新版本的 Zeppelin

  1. docker run -u $(id -u) -p 8081:8081 -p 8080:8080 --rm -v $PWD/logs:/logs -v /mnt/disk1/jzhang/flink-sql-cookbook-on-zeppelin:/notebook -v /mnt/disk1/jzhang/flink-1.13.1:/opt/flink -e FLINK_HOME=/opt/flink -e ZEPPELIN_LOG_DIR='/logs' -e ZEPPELIN_NOTEBOOK_DIR='/notebook' --name zeppelin apache/zeppelin:0.10.0

需要注意的是这里的2个目录:
/mnt/disk1/jzhang/flink-sql-cookbook-on-zeppelin (这是Step 1 里clone下来的repo目录)
/mnt/disk1/jzhang/flink-1.13.1 (这是Step 2 下载下来并解压之后的flink目录)

这两个目录是我自己本地目录,请替换成你自己的目录。

体验 Flink Sql Cookbook 教程

好了,现在教程环境已经ready了,浏览器打开 http://localhost:8080 开始你的 Flink Sql 学习之旅吧。
image.png
这是 Zeppelin 的UI,里面已经有了一个文件夹 Flink Sql Cookbook,内含所有Flink Sql 教程。

例子1: Filtering Data

接下来我们就选择其中里的 Foundations/04 Filtering Data 来体验下。
image.png
这里有2个段落(Paragraph),第一个段落是创建一个server_logs表,第二个段落是用select where语句去过滤这张表里的数据,并按时间排序取最新的10条数据。下图就是执行完select语句的效果,大家可以看到里面的数据每隔3秒钟会更新下,并且status_code 的确永远都是401或者403,验证了我们的SQL逻辑。右上角还有一个 FLINK JOB 的链接,点进去之后你还能看个这个Job的详细信息。
image.png

例子2: Lateral Table Join

接下来我们来看一个 Lateral Table Join 的例子,这是Flink SQL里的其中一种Join类型。初学者看到这个名词第一感觉会有点懵逼,上网查完资料之后也是似懂非懂的感觉,如果这时候有个比较直观的例子给你,应该会对你的理解非常有帮助。这个教程里就自带了这么一个例子,打开 Joins/06 Lateral Table Join,运行之后,你就能看到如下的效果。
image.png
这里我就举这2个例子,里面还有很多很多有用的例子(如下图所示),大家可以自己去学习,可以尝试修改下SQL再运行看看结果有什么不一样。

迄今为止最好用的 Flink SQL 教程 - Flink SQL Cookbook on Zeppelin (更新版) - 图6

花了周末2天时间把这份学习资料整理出来,希望对大家学习Flink有所帮助,共同进步。不过这个教程还有改进的空间,有兴趣的同学可以一起来改进,目前还有如下3个点可以改进:

  • 每个Note里的说明文档都是英文的,可以翻译成中文,让更多人学习起来方便些。
  • 现在每个教程都是文字形式,如果有谁能为每个教程都做个小视频,配合讲解的话,我觉得效果会更好。
  • 增加更多案例教程,现在虽然内容很多,但还有空间增加更多教程。

有兴趣想为这个教程做贡献的同学请发邮件到这个地址联系我:jeffzhang.zjf@alibaba-inc.com, 对Flink on Zeppelin感兴趣的可以加入钉钉群:34517043