本文将带领大家一起体验一下 Flink 的计算引擎,不需要写代码。没有代码基础有没有关系,只需要按部就班跟着文档的步骤走就可以了。如果还有我没有讲清楚的地方,欢迎留言交流~
本地搭建
先在本地搭建一个 Flink 环境,官方上给了三个平台的教程,对于大部分人来说,装一个单机版就可以了。不需要在本地搞集群,浪费资源,也没有必要啊。Flink 可以运行在 Linux,Mac OS X 和 Windows 系统上面。它的依赖很简单,只需要我们系统上安装了 JDK 1.8 即可。
首先演示在 Mac 上如何让快速搭建 Flink 环境。
Mac
1.首先检查 JDK 版本,打开 terminal 输入 java --vetrsion
,输出如下信息则确认环境是 JDK 1.8 的。
java version "1.8.0_111"
Java(TM) SE Runtime Environment (build 1.8.0_111-b14)
Java HotSpot(TM) 64-Bit Server VM (build 25.111-b14, mixed mode)
2.对于 Mac 用户,可以使用 homebrew 来直接安装。在 terminal 输入:
$ brew install apache-flink
...
等待一会,安装完毕之后,就输出下面的信息了。如图 1-1
图 1-1
我们可以使用下面的命令验证一下安装是否成功。输入类似下面的信息就成功啦
$ flink --version
Version: 1.7.1, Commit ID: 89eafb4
接着,我们可以找到 Flink,并且启动它。
在 Mac 下安装之后的路径(默认)为 /usr/local/Cellar/apache-flink/**1.7.1**
这里需要注意的是,要把红色字换成你对应的版本号。
**
cd /usr/local/Cellar/apache-flink/1.7.1
cd 进如该目录之后,执行下面的命令:
./libexec/bin/start-cluster.sh
然后跑到浏览器,输入 localhost:8081 查看 web 界面。
图 1-2,这个界面还是比较简单直观的,很明显可以看到下图中有一个 Task Manager 实例。
图 1-2
是不是很简单啊?到这里 Mac 机器上就有 Flink 的环境了,并且启动成功。
下面演示如何在 Linux 系统上搞一个单机的 Flink 节点。
Linux
首先我们先点进去,官方的下载页面:下载页面
如图 1-3,官方建议我们选择版本的时候,注意按需下载,需不需要与 hadoop 结合使用。Flink 官方都有对应的版本.
图 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 之后,执行如下命令:
flink run ../libexec/examples/streaming/SocketWindowWordCount.jar --port 9000
如果出现如下错误,很大概率是第一步和第二步的顺序颠倒了,先要保证 9000 端口已经被监听了。
Caused by: java.net.ConnectException: Connection refused (Connection refused)
at java.net.PlainSocketImpl.socketConnect(Native Method)
at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350)
at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)
at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
at java.net.Socket.connect(Socket.java:589)
at org.apache.flink.streaming.api.functions.source.SocketTextStreamFunction.run(SocketTextStreamFunction.java:96)
at org.apache.flink.streaming.api.operators.StreamSource.run(StreamSource.java:94)
at org.apache.flink.streaming.api.operators.StreamSource.run(StreamSource.java:58)
at org.apache.flink.streaming.runtime.tasks.SourceStreamTask.run(SourceStreamTask.java:99)
at org.apache.flink.streaming.runtime.tasks.StreamTask.invoke(StreamTask.java:300)
at org.apache.flink.runtime.taskmanager.Task.run(Task.java:704)
at java.lang.Thread.run(Thread.java:748)
下图是正常的情况,左边是 flink 连接了 9000 端口在等待输入。后边是我们模拟数据流的输入。
我们也可以在 web 界面上查看这个 Job 的信息,访问 localhost:8081。
我们在右边那个窗口输入一些单词。比如这样:
这个 flink 任务一直在运行,我们在哪里可以看到输出结果呢?进入这个目录下 /usr/local/Cellar/apache-flink/1.7.1/libexec/log 你找到 .out 结尾的文件。然后执行如下命令,实时监测该文件:
tail -f log/flink-*-taskexecutor-*.out
你会看到下面的输出:
./bin/stop-cluster.sh