flink学习(一)——介绍

其他

  1. flink分为流式和批式,流式因为是来一个数据处理一个,所以会保存之前处理的中间结果。但是有可能我并不需要这些结果。所以我完全可以用批式来处理海量数据嘛

POJO

学习链接

条件

  1. class必须是独立的(不能是内部类),public的
  2. 必须要有无参数的构造方法。可以再重载一个带参数的构造方法
  3. 里面必须要有字段,可以是private,但是必须要有public的getter和setter方法

WordCount——流式

package flink;

import org.apache.flink.api.common.functions.FlatMapFunction;
import org.apache.flink.api.java.tuple.Tuple2;
import org.apache.flink.streaming.api.datastream.DataStream;
import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment;
import org.apache.flink.util.Collector;

public class WordCount {
    public static void main(String[] args) throws Exception {
        StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();

        String filePath = "/home/10313588@zte.intra/Desktop/pycharmProject/Drain/logflash/base/rawdata/vnpm_0702/1120/cf-vnpm.log.2";
        DataStream<String> inputStream = env.readTextFile(filePath);

        // 对数据及进行处理,按空格分词展开,转换成(word,1)的二元组Tuple2 进行词频统计
        DataStream<Tuple2<String, Integer>> resultStream = inputStream.flatMap(new MyFlatMapper())
                .keyBy(0) // keyBy转换,按key重分区
                .sum(1);//(在当前分区内)按照第二个位置来进行加和

        resultStream.print();// 如果只是在这里就执行的话是没有结果的。在流式架构中,是先把任务定义好,然后去等数据,来一个处理一个所以这里也只是定义了任务print,但是还没有执行

        //这里才是执行任务,启动任务。来一个数据处理一次
        env.execute();
    }

    public static class MyFlatMapper implements FlatMapFunction<String, Tuple2<String,Integer>>{

        @Override
        public void flatMap(String value, Collector<Tuple2<String, Integer>> out) throws Exception {
            //分词
            String[] words = value.split("\\s+");
            // 遍历数组,包装成tuple2
            for(String word:words){
                out.collect(new Tuple2<>(word,1));
            }
        }
    }
}

输出结果:

。。。
4> (rc-sts-dep-in-stp-sta-up-roll-suc-ms-rc-1-zws49,2)
4> ([114],9219)
4> (cluster(22.20.0.20:2601),10800)
4> (pod,12360)
4> ([114],9220)
4> (cluster(22.20.0.20:2601),10801)
4> (pod,12361)
4> (rc-sts-dep-in-stp-sta-up-roll-suc-ms-rc-1-zws49,3)
4> ([114],9221)
4> (cluster(22.20.0.20:2601),10802)
4> (pod,12362)
4> ([114],9222)
4> (rc-sts-dep-in-stp-sta-up-roll-suc-ms-rc-1-zws49,4)
4> (01:44:32.908,1)
4> (pod,12363)
4> (pod.,2638)
4> (db_pod:,1059)
4> (‘db_pod_network’:,1059)
4> (‘if_reg’:,1059)
4> (running):,1059)
4> (None,1738)
4> ([625],1059)
。。。

4> 代表的是并行子任务分区号、进程号(并行的进程号)

课程还讲了一个流式数据源测试,即真正的流式肯定不是从文件(有界数据)读的,而是源源不断的那种,所以大数据组件中,能实现这样的情况就是kafka消息传输队列。课程中演示的是用linux的nc来实现的流式。【后续可以学一下kafka】

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值