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:\Flink\flink-1.8.1-bin-scala_2.11\flink-1.8.1\bin\start-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));
                }
            }
        }
    }
}

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

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

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值