本文是学习Apache Flink的开始,记录了Flink Local模式的部署,并运行了Word Count例子。
1.下载和部署。
Flink可以运行在Linux、MacOS和Windows系统上,需要JDK1.7+的支持。本文记录了在linux(CentOS 6.7)上部署过程,默认已经安装了JDK1.8。
1.1 下载
从下面的链接中下载二进制的Flink,根据你喜欢的Hadoop/Scala版本选择对应的Flink版本。
http://flink.apache.org/downloads.html
1.2 部署
我们选择的版本是flink-1.1.2-bin-hadoop26-scala_2.11.tgz,放置在/opt目录下。
# 去下载目录
cd /opt
# 解压下载的压缩包
tar zxvf flink-1.1.2-bin-hadoop26-scala_2.11.tgz
cd flink-1.1.2
# 启动Flink
bin/start-local.sh
如要停止Flink,请使用命令:bin/stop-local.sh
。
如果Flink采用local模式部署,则JobManager和TaskManager在同一个进程内,可以通过jps
或者 ps -ef|grep flink
来查看进程,只有一个名为JobManager的进程。这一点,在start-local.sh脚本里也可以发现,脚本内容如下。
STREAMING_MODE=$1
bin=`dirname "$0"`
bin=`cd "$bin"; pwd`
. "$bin"/config.sh
# local mode, only bring up job manager.
# The job manager will start an internal task manager
"$FLINK_BIN_DIR"/jobmanager.sh start local
1.3 访问Flink监控界面
访问Flink前端界面,确认系统启动,地址:http://localhost:8081。
2. 运行WordCount
在数据处理领域,WordCount就是HelloWorld。Flink自带WordCount例子,它通过socket读取text数据,并且统计每个单词出现的次数。如果你想查阅例子源码,请点击链接:SocketWindowWordCount源码。
2.1 启动本地监听
首先,使用nc命令启动一个本地监听,命令是:
nc -l 9000
如果报错:-bash: command not found,请先安装nc,在线安装命令:yum -y install nc
。
新开一个shell窗口,通过netstat命令观察9000端口。
netstat -anlp | grep 9000
观察结果如下
#协议 收 发 内部地址 外部地址 状态 进程
tcp 0 0 0.0.0.0:9000 0.0.0.0:* LISTEN 19514/nc
2.2 提交WordCount程序
提交WordCount程序的命令:
cd /opt/flink-1.1.2
bin/flink run examples/streaming/SocketWindowWordCount.jar --port 9000
日志信息如下:
09/23/2016 12:33:49 Job execution switched to status RUNNING.
09/23/2016 12:33:49 Source: Socket Stream -> Flat Map(1/1) switched to SCHEDULED
09/23/2016 12:33:49 Source: Socket Stream -> Flat Map(1/1) switched to DEPLOYING
09/23/2016 12:33:49 Fast SlidingProcessingTimeWindows(5000, 1000) of WindowedStream.main(SocketWindowWordCount.java:79) -> Sink: Unnamed(1/1) switched to SCHEDULED
09/23/2016 12:33:49 Fast SlidingProcessingTimeWindows(5000, 1000) of WindowedStream.main(SocketWindowWordCount.java:79) -> Sink: Unnamed(1/1) switched to DEPLOYING
09/23/2016 12:33:49 Fast SlidingProcessingTimeWindows(5000, 1000) of WindowedStream.main(SocketWindowWordCount.java:79) -> Sink: Unnamed(1/1) switched to RUNNING
09/23/2016 12:33:49 Source: Socket Stream -> Flat Map(1/1) switched to RUNNING
新开一个shell窗口,通过netstat命令观察9000端口。
netstat -anlp | grep 9000
观察结果如下,18569是Flink的进程号,19857是nc进程号,两者之间建立了一条连接。
#协议 收 发 内部地址 外部地址 状态 进程
tcp 0 0 0.0.0.0:9000 0.0.0.0:* LISTEN 19857/nc
tcp 0 0 127.0.0.1:9000 127.0.0.1:57454 ESTABLISHED 19857/nc
tcp 0 0 ::ffff:127.0.0.1:57454 ::ffff:127.0.0.1:9000 ESTABLISHED 18569/java
Flink前端界面可以观察到有一个Running Job。
2.3 发送数据
在启动nc的shell窗口,输入
cup cup cup water water
新开一个shell窗口,去/opt/flink-1.1.2/log目录下,执行tail -f flink*.out
,可以查看到word count的结果。
cup : 3
water : 2
如要停止Flink,请使用命令:bin/stop-local.sh
https://ci.apache.org/projects/flink/flink-docs-release-1.1/quickstart/setup_quickstart.html
(完)