Flink零基础学习(一)理解和搭建demo - Go语言中文社区

Flink零基础学习(一)理解和搭建demo


网上关于Flink介绍的文章很多,可以自行百度,向来喜欢研究技术解决实际问题,主要谈我是怎么入坑的

学java出身没怎么接触大数据,也分不清楚Hadoop和Spark的业务场景好坏之分,只是在工作中遇到GPS异常数据处理时,项目中时时会出现一些单靠现有的知识解决不了的问题,想着有没有更好的架构或者java相关的处理办法呢,而恰好Flink是基于java代码设计的,于是开始了

简单的介绍还是要的

一 应用场景

大量数据不断产生:金融交易数据,互联网订单数,GPS定位数据,传感器信号,移动终端数据,以及网络流量监控,服务器产生的日志;这些数据共同点都是实时从不同数据源产生,然后再传输到下游。日常的智能推荐,复杂事件处理,实时欺诈检测,流数据分析,及时报表。

二.优势特点:

1高吞吐,低延迟,高性能

2支持事时间概念,支持有状态计算(将计算的结果放在内存或者文件中,等下一个事件获取中间结果,有效降低了资源消耗)

3有很好的容错机制,基于分布式的快照CheckPoints,Save points恢复到原来的计算状态

4基于JVM实现的独立内存管理,将所有数据对象转成二进制在内存中,降低内存空间和GC带来的问题

来实现我们的第一个Flink项目

三.安装Flink

官网下载https://flink.apache.org/downloads.html#apache-flink-181

下载后,直接去E:Flinkflink-1.8.1-bin-scala_2.11flink-1.8.1binstart-cluster.bat(安装目录的bat文件),然后查看本地8081

当然,这些是为后面做铺垫,还是回归到我们demo上来

四.创建maven项目

当然第一次需要将flink所需的jar按add进来,仓库jar包地址如下

 

构建完成结构如下(多出2个默认批处理和流处理的java文件)

五创建流处理的main方法

我这里的demo是对文件的单词进行统计次数小功能,将他打印到控制台和指定文件内

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;

/**
 * 利用读取文件
 * @author zhouxl 
 */
public class ReadFile {

    public static void main(String[] args) throws Exception {
        //第一步设定环境
        final StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
        //第二步;指定数据源,读取文件
        DataStreamSource<String> stream =env.readTextFile("本地文件地址,可相对和绝对路径");
        //第三步:计数
        SingleOutputStreamOperator<Tuple2<String, Integer>> sum =  stream.flatMap(new Tokenizer())
                .keyBy(0)
                .sum(1);
         //将统计数据打印控制台
        sum.print();
        //将统计数据打印到本地文件
        sum.writeAsText("自定义本地文件路径");

        env.execute("单词统计数据");

    }

    public static final class Tokenizer implements FlatMapFunction<String, Tuple2<String, Integer>> {
        @Override
        //s是行数据,将每行数据进行切割
        public void flatMap(String s, Collector<Tuple2<String, Integer>> collector) {
            String[] tokens = s.toLowerCase().split("\W+");
            //token是切出来的单词
            for (String token: tokens) {
                if (token.length() > 0) {
                    //写入集合统计
                    collector.collect(new Tuple2<String, Integer>(token, 1));
                }
            }
        }
    }
}

直接运行,会生成本地文件夹打开如下:

前面是分出的单词数,后面的统计个数,至于控制台日志内容以及分析,接着会在下一次讲到!

版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/qq_40650378/article/details/97644402
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。
  • 发表于 2020-03-06 23:18:21
  • 阅读 ( 1762 )
  • 分类:

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢