前言
听说flink是非常优秀的实时计算组件,那么我们来快速了解一番。
1 下载安装
- 安装java8
下载jdk安装包,下面是安装脚本(供参考):
#!/bin/sh
install_path="/opt/"
rm -rf ${install_path}/jdk1.8.0_111
tar --no-same-permissions --no-same-owner -zxf jdk-8u111-linux-x64.tar.gz -C ${install_path}/
chmod -R 777 ${install_path}/jdk1.8.0_111
sed -i -e '$a export JAVA_HOME='${install_path}'/jdk1.8.0_111' -e '$a export PATH=$JAVA_HOME/bin:$PATH' -e '$a export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar' /etc/profile
source /etc/profile
- 下载Flink
下载地址:https://flink.apache.org/downloads.html
我选择了最新的 flink-1.11.2-bin-scala_2.12.tgz下载,上传服务器,解压。
2 启停集群及样例
- 启动
./bin/start-cluster.sh
- 执行样例WordCount
WordCount:实时计算入门经典,通过持续接收文本,实时统计文本已出现的单词数量
./bin/flink run examples/streaming/WordCount.jar
- 查看执行结果
tail log/flink-*-taskexecutor-*.out
完整过程:
- 停止
./bin/stop-cluster.sh
- 8081页面控制台
通过页面也可以执行任务提交,任务结果查看。
3 自定义WordCount
- 完整5步:设置环境-->获取数据-->处理数据-->输出结果-->提交任务
public class MyWordCount {
public static void main(String[] args) throws Exception {
//0.设置执行环境:用于定义任务的属性、创建数据源以及最终启动任务的执行。
StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
//1.将数据源转换为数据流对象
DataStream<String> text = env.fromElements(WORDS);
//2.处理数据
DataStream<Tuple2<String, Integer>> counts =
// 分离单词之后组装成键值对: (word,1)
text.flatMap(new FlatMapFunction<String, Tuple2<String, Integer>>() {
public void flatMap(String s, Collector<Tuple2<String, Integer>> collector){
// 全部小写化之后,再按[^A-Za-z0-9_]拆分出单词
String[] tokens = s.toLowerCase().split("\\W+");
// 组装成键值对传入收集器
for (String token : tokens) {
if (token.length() > 0) {
collector.collect(new Tuple2<String, Integer>(token, 1));
}
}
}
})
// 根据单词(第一列)分组,然后将数量(第二列)相加
.keyBy(0).sum(1);
//3.输出数据
counts.print();
//4.执行任务
env.execute("Streaming WordCount");
}
/**
* 自定义数据源
*/
public static final String[] WORDS = new String[]{
"hello world", "hello word", "hello flink", "flink study"
};
}
- 将打好的jar包添加到任务队列
- 提交任务
- 查看结果
- 对比输入输出
输入:
"hello world", "hello word", "hello flink", "flink study"
输出:
(hello,1)
(world,1)
(hello,2)
(word,1)
(hello,3)
(flink,1)
(flink,2)
(study,1)
爱家人,爱生活,爱设计,爱编程,拥抱精彩人生!