本文将带领大家一起体验一下 Flink 的计算引擎,不需要写代码。没有代码基础有没有关系,只需要按部就班跟着文档的步骤走就可以了。如果还有我没有讲清楚的地方,欢迎留言交流~

本地搭建

先在本地搭建一个 Flink 环境,官方上给了三个平台的教程,对于大部分人来说,装一个单机版就可以了。不需要在本地搞集群,浪费资源,也没有必要啊。Flink 可以运行在 LinuxMac OS X Windows 系统上面。它的依赖很简单,只需要我们系统上安装了 JDK 1.8 即可。

首先演示在 Mac 上如何让快速搭建 Flink 环境。

Mac

1.首先检查 JDK 版本,打开 terminal 输入 java --vetrsion ,输出如下信息则确认环境是 JDK 1.8 的。

  1. java version "1.8.0_111"
  2. Java(TM) SE Runtime Environment (build 1.8.0_111-b14)
  3. Java HotSpot(TM) 64-Bit Server VM (build 25.111-b14, mixed mode)

2.对于 Mac 用户,可以使用 homebrew 来直接安装。在 terminal 输入:

  1. $ brew install apache-flink
  2. ...

等待一会,安装完毕之后,就输出下面的信息了。如图 1-1

image.png
图 1-1

我们可以使用下面的命令验证一下安装是否成功。输入类似下面的信息就成功啦

  1. $ flink --version
  2. Version: 1.7.1, Commit ID: 89eafb4

接着,我们可以找到 Flink,并且启动它。

在 Mac 下安装之后的路径(默认)为 /usr/local/Cellar/apache-flink/**1.7.1**

这里需要注意的是,要把红色字换成你对应的版本号。
**

  1. cd /usr/local/Cellar/apache-flink/1.7.1

cd 进如该目录之后,执行下面的命令:

  1. ./libexec/bin/start-cluster.sh

然后跑到浏览器,输入 localhost:8081 查看 web 界面。

图 1-2,这个界面还是比较简单直观的,很明显可以看到下图中有一个 Task Manager 实例。

image.png
图 1-2

是不是很简单啊?到这里 Mac 机器上就有 Flink 的环境了,并且启动成功。

下面演示如何在 Linux 系统上搞一个单机的 Flink 节点。

Linux

首先我们先点进去,官方的下载页面:下载页面

如图 1-3,官方建议我们选择版本的时候,注意按需下载,需不需要与 hadoop 结合使用。Flink 官方都有对应的版本.
image.png

图 1-3

我之前有一个 Hadoop 2.6.5版本的集群环境了,所以这里选择 ApacheFlink 1.7.2 with Hadoop@2.6 ,学习的时候不必纠结到底选什么版本。

在 Linux 机器上,下载 tar 包,解压。类似地,执行这个命令就可以了。

运行一个例子

接下来我们可以试着跑一个例子,这个代码我们先不用管是如何写出来的。在安装路径下面有一个目录:/usr/local/Cellar/apache-flink/1.7.1/libexec/examples 下面包含一些官方打包好的代码。我们进入 Streaming 目录下面会的发现几个 jar 包。我们接下里运行一个单词统计的例子。

第一步:我们重新打开一个 terminal,执行 nc -l 9000 ,启动一个监听端口,用于模拟我们的数据流入口。
第二步:cd /usr/local/Cellar/apache-flink/1.7.1/bin 之后,执行如下命令:

  1. flink run ../libexec/examples/streaming/SocketWindowWordCount.jar --port 9000

如果出现如下错误,很大概率是第一步和第二步的顺序颠倒了,先要保证 9000 端口已经被监听了。

  1. Caused by: java.net.ConnectException: Connection refused (Connection refused)
  2. at java.net.PlainSocketImpl.socketConnect(Native Method)
  3. at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350)
  4. at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)
  5. at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188)
  6. at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
  7. at java.net.Socket.connect(Socket.java:589)
  8. at org.apache.flink.streaming.api.functions.source.SocketTextStreamFunction.run(SocketTextStreamFunction.java:96)
  9. at org.apache.flink.streaming.api.operators.StreamSource.run(StreamSource.java:94)
  10. at org.apache.flink.streaming.api.operators.StreamSource.run(StreamSource.java:58)
  11. at org.apache.flink.streaming.runtime.tasks.SourceStreamTask.run(SourceStreamTask.java:99)
  12. at org.apache.flink.streaming.runtime.tasks.StreamTask.invoke(StreamTask.java:300)
  13. at org.apache.flink.runtime.taskmanager.Task.run(Task.java:704)
  14. at java.lang.Thread.run(Thread.java:748)

下图是正常的情况,左边是 flink 连接了 9000 端口在等待输入。后边是我们模拟数据流的输入。

image.png

我们也可以在 web 界面上查看这个 Job 的信息,访问 localhost:8081。

image.png

我们在右边那个窗口输入一些单词。比如这样:

image.png

这个 flink 任务一直在运行,我们在哪里可以看到输出结果呢?进入这个目录下 /usr/local/Cellar/apache-flink/1.7.1/libexec/log 你找到 .out 结尾的文件。然后执行如下命令,实时监测该文件:

  1. tail -f log/flink-*-taskexecutor-*.out

你会看到下面的输出:

image.png

QQ20190227-184825-HD.mp4 (6.55MB) 最后关闭集群。

  1. ./bin/stop-cluster.sh