用flink来进行词频统计

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项目 打包

image.png

上传到 flink集群进行测试

  • 开启HA 模式flink集群
    image.png

用用可视化界面操作

上传jar包上去

image.png

进行简单的配置

image.png

用于是用nc端口监控模拟流数据所有就没有必要设置并行度了

开启job!

image.png

去虚拟机发几条数据看看

image.png

看看job的运行情况

image.png

七条数据已经全部接受

查看统计结果

去哪个地方看呢
TaskManger or JobManger
如果把这个任务比做出工地施工
那么JobManger就是负责设计图纸和调动各个部门
TaskManger就是现场实操了
image.png
结果就这三个TaskManger其中之一

查看结果

image.png

不错,拿下!


批处理词频统计就不做展示了(处理流式数据才是王道)

用命令行进行操作

一个大神级的程序员应该是对着一片白或一片黑的屏幕啪啪啪在这敲来敲去
而不是对着可视化界面点点点。。。

  • 开启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的个人博客

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值