- 深入理解Flink:实时大数据处理实践
- 余海峰
- 934字
- 2020-08-28 00:04:22
2.2 让轮子转起来
2.2.1 本书约定
(1)本书中的例子以Scala语言的编程进行讲解,Flink的API也只讲述Scala语言形式。本书中的例子不会过多地运用 Scala 编程技巧,因此读者只需要具备基本的Scala语言知识即可。
(2)例子的开发环境为Java 8(1.8.0_73)、Maven(3.0.4)、SBT(1.2.6)和Scala(IDEA Scala plugin 2.11.12)。
(3)IDE选用IntelliJ IDEA,使用社区版(Community Edition 2018.2.6 x64)。由于存在版本兼容性问题,作者不推荐使用Eclipse。
(4)开发环境为Windows 7,Flink部署环境为Linux(CentOS)。
(5)Flink的版本为1.6.1。
2.2.2 搭建单机版环境
1.搭建一个单机版的运行环境
(1)下载不带Hadoop组件的Flink程序包:flink-1.6.1-bin-scala_2.11.tgz。
(2)部署在Linux服务器上,然后启动单机版Flink:
为了访问方便,设置开发环境机器hosts文件,以以下域名映射Linux服务器IP地址:
(3)启动成功后,在浏览器地址栏中输入以下地址,访问 Flink 的 Web Dashboard:
Web Dashboard展示当前Job Manager和Task Manager的状态,如图2-1所示。
图2-1 Flink的Web Dashboard
2.运行SocketWindowWordCount程序
(1)启动一个端口号为9000的Socket server:
(2)运行SocketWindowWordCount应用程序:
(3)在Socket server端手动输入单词,如果一行有多个单词,就在两个单词之间输入空格。输入及对应的聚合结果如图2-2所示。
图2-2 输入及对应的聚合结果
图2-2中同一种颜色的输入和输出是对应的,其中“:1”是Socket server端换行的聚合结果。
SocketWindowWordCount 应用程序根据处理时间开滚动窗口,每秒计算一次窗口接收单词的次数,代码如下:
以上代码从socket(9000端口)按行读入字符,切割成单词(w=> w.split ("\\s"))后转换成 case 对象(WordWithCount),该对象有两个属性,其中 String类型属性代表单词本身;Long类型属性代表单词出现的次数。
其中 timeWindow 为开窗机制,如果应用程序的时间特征为事件时间,则开长度为5秒的事件时间窗口,否则开长度为1秒的处理时间窗口。Flink流处理环境(StreamExecutionEnvironment)默认的时间特征为处理时间,因此本例中的开窗机制为长度为1秒的处理时间窗口。
2.2.3 配置IDEA
使用 Maven从 Flink官网下载应用程序工程模板。为了避免输入错误,我们设置 Maven为 Batch模式,在命令行中设定 groupId、artifactId和 version,需要注意版本号的值用双引号包裹起来,代码如下:
应用程序模板Maven的构建过程,如图2-3所示。
图2-3 应用程序模板Maven的构建过程
然后,将下载的应用程序工程导入 IDEA。该工程有两个样例程序,分别为批处理应用程序(BatchJob)和流处理应用程序(StreamingJob)。该工程的pom.xml文件的主要内容如下:
Flink应用程序模板如图2-4所示。
图2-4 Flink应用程序模板
此外,为了让开发工具自动检查代码规范,IDEA 开启了 Scala 语言对应的Checkstyle功能。