Flink 是什么
官网:[Apache Flink: 数据流上的有状态计算](Apache Flink: 数据流上的有状态计算
![eb1d12c6ca6549f5325aae29af03ead4.png](https://i-blog.csdnimg.cn/blog_migrate/aee5d8b1b9f467390605803a3da700e6.jpeg)
本地搭建
我们先本地搭建一个 Flink 环境,跑一下代码。<br /><br /><br />Flink 可以运行在 Linux,Mac OS X 和Windows 系统上面。很简单,只需要你的系统上安装了 JDK 1.8 即可。
搭建步骤如下
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](Homebrew) 来直接安装。在 terminal 输入
$ brew install apache-flink
安装完毕之后!
![45aa6d6edea7015f53254c6aa8360820.png](https://i-blog.csdnimg.cn/blog_migrate/5ef29ba5ee48ae677d139019a4d9735c.jpeg)
验证一下:
$ flink --version
Version: 1.7.1, Commit ID: 89eafb4
启动 Flink,在 Mac 下安装之后的路径(默认)为 /usr/local/Cellar/apache-flink/1.7.1
cd 进如该目录之后,执行
./libexec/bin/start-cluster.sh
然后打开浏览器,输入 localhost:8081 查看。我们可以看到下图中有一个 Task Manager 实例。
![d71c994a716f7a7fb479ca2fb83a656c.png](https://i-blog.csdnimg.cn/blog_migrate/7049f2342d71e8959c580b7627619afc.jpeg)
看来这个本地单机版 Flink 已经跑起来了。
Linux
我们去官方的下载页面:[下载页面](Apache Flink: Downloads)
![b7016309e06b0cee36497848b5bb3e1b.png](https://i-blog.csdnimg.cn/blog_migrate/ada0ca13e53ce58110f63d77dba9f861.jpeg)
运行一个例子
接下来我们可以试着跑一个例子,这个代码我们先不用管是如何写出来的。在安装路径下面有一个目录:/usr/local/Cellar/apache-flink/1.7.1/libexec/examples 下面包含一些官方打包好的代码。我们进入 Streaming 目录下面会的发现几个 jar 包。我们接下里运行一个单词统计的例子。
第一步:我们重新打开一个 terminal,执行 `nc -l 9000` ,启动一个监听端口,用于模拟我们的数据流入口。<br />第二步:cd /usr/local/Cellar/apache-flink/1.7.1/bin 之后,执行如下命令:
flink run ../libexec/examples/streaming/SocketWindowWordCount.jar --port 900
如果出现如下错误,很大概率是第一步和第二步的顺序颠倒了,先要保证 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 端口在等待输入。后边是我们模拟数据流的输入。
![49efa7a5beb6533f699942dff47f62f3.png](https://i-blog.csdnimg.cn/blog_migrate/029c9cc0b938860c241c8517ccfe1e1e.jpeg)
我们也可以在 web 界面上查看这个 Job 的信息,访问 localhost:8081。
![79caeed35b692ba2031fd9929511270f.png](https://i-blog.csdnimg.cn/blog_migrate/be0e2a1b8747f4d3375a51a0a8bd729a.jpeg)
我们在右边那个窗口输入一些单词。比如这样:
![089489f90912c207a9222a68e97e59fb.png](https://i-blog.csdnimg.cn/blog_migrate/35ce46ecd2445211fdbebb2b790a61e2.jpeg)
这个 flink 任务一直在运行,我们在哪里可以看到输出结果呢?进入这个目录下 /usr/local/Cellar/apache-flink/1.7.1/libexec/log 你找到 .out 结尾的文件。然后执行如下命令,实时监测该文件:
tail -f log/flink-*-taskexecutor-*.out
你会看到下面的输出:
![bcc50693a49d1d42dd5e45395c733118.png](https://i-blog.csdnimg.cn/blog_migrate/5f2475ac91952847998c49ddb7813769.jpeg)
最后关闭集群。
./bin/stop-cluster.sh
更多大数据技术,欢迎关注「大数据进击之路」。