flink 作为第三代大数据计算框架可以实现数据的流处理和批处理
目前是阿里的开源项目
来看看怎么通过flink进行最简单的词频统计吧
编写词频统计Java代码
- 批处理词频统计代码
package com.chengyuyang.wordcount;
import org.apache.flink.api.common.functions.FlatMapFunction;
import org.apache.flink.api.java.ExecutionEnvironment;
import org.apache.flink.api.java.operators.AggregateOperator;
import org.apache.flink.api.java.operators.DataSource;
import org.apache.flink.api.java.tuple.Tuple2;
import org.apache.flink.util.Collector;
public class BatchWordCount {
public static void main(String[] args)
{ // 创建flink 执行环境
ExecutionEnvironment executionEnvironment = ExecutionEnvironment.getExecutionEnvironment();
// 文件路径
String inputFile = "C:\\Users\\15318\\Desktop\\Flink\\flink理论学习\\src\\main\\resources\\123.txt";
// 读取到执行环境内
DataSource<String> inputDataSource = executionEnvironment.readTextFile(inputFile);
// 词频统计: 先分次 再分组 再聚合
AggregateOperator<Tuple2<String, Integer>> sum = inputDataSource.flatMap(new FlatMapFunction<String, Tuple2<String, Integer>>() {
@Override
public void flatMap(String value, Collector<Tuple2<String, Integer>> collector) throws Exception {
String[] tokens = value.toLowerCase().split(" ");
for (String token : tokens) {
if (token.length() > 0)
collector.collect(new Tuple2<>(token, 1));
}
}
}).groupBy(0).sum(1);
try {
sum.print();
} catch (Exception e) {
e.printStackTrace();
}
}
}
- 流处理词频统计代码
package com.chengyuyang.wordcount;
import org.apache.flink.api.common.functions.FlatMapFunction;
import org.apache.flink.api.java.tuple.Tuple2;
import org.apache.flink.streaming.api.datastream.DataStreamSource;
import org.apache.flink.streaming.api.datastream.SingleOutputStreamOperator;
import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment;
import org.apache.flink.util.Collector;
public class StreamWordCount {
public static void main(String[] args) throws Exception {
StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
DataStreamSource<String> text = env.socketTextStream("192.168.216.111", 9999);
SingleOutputStreamOperator<Tuple2<String, Integer>> sum = text.flatMap(new FlatMapFunction<String, Tuple2<String, Integer>>() {
@Override
public void flatMap(String value, Collector<Tuple2<String, Integer>> collector) throws Exception {
for (String token : value.split(" ")) {
collector.collect(new Tuple2<String, Integer>(token, 1));
}
}
}).keyBy(0).sum(1);
sum.print().setParallelism(1); //并行度为1 (1个线程)
env.execute("Window WordCount");
}
}
创建maven项目 打包
上传到 flink集群进行测试
- 开启HA 模式flink集群
用用可视化界面操作
上传jar包上去
进行简单的配置
用于是用nc端口监控模拟流数据所有就没有必要设置并行度了
开启job!
去虚拟机发几条数据看看
看看job的运行情况
七条数据已经全部接受
查看统计结果
去哪个地方看呢
TaskManger or JobManger
如果把这个任务比做出工地施工
那么JobManger就是负责设计图纸和调动各个部门
TaskManger就是现场实操了
结果就这三个TaskManger其中之一
查看结果
不错,拿下!
批处理词频统计就不做展示了(处理流式数据才是王道)
用命令行进行操作
一个大神级的程序员应该是对着一片白或一片黑的屏幕啪啪啪在这敲来敲去
而不是对着可视化界面点点点。。。
- 开启job
./bin/flink run jars/streaming/FlinkTutorial-1.0-SNAPSHOT.jar --port 9999
- 提交批job作业(到/home/out/fl00)
flink run /usr/local/flink-1.10.1/jars/batch/FlinkTutorial-1.0-SNAPSHOT.jar --input /home/words --output /home/out/fl00
本文转载于我的个人博客用flink来进行词频统计
遵循 CC 4.0 BY-SA 版权协议
欢迎关注我的个人博客:Sakura的个人博客