IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> 大数据(9a)Flink入门Java代码 -> 正文阅读

[大数据]大数据(9a)Flink入门Java代码

1、Flink简介

  • Apache Flink是为
    分布式、高性能、随时可用以及准确的流处理应用程序
    打造的开源流处理框架

1.1、Flink特点

1.1.1、事件驱动(event-driven)

  • 事件驱动型应用是一类具有状态的应用
    它从一个或多个事件流提取数据,并根据到来的事件触发计算、状态更新或其他外部动作

事件驱动型应用

1.1.2、无界数据流 和 有界数据流

  • 在Spark世界观中,一切皆由批次组成,离线数据是大批次,实时数据是小批次
  • 在Flink世界观中,一切皆由流组成,离线数据是有界限的流,实时数据是一个没有界限的流

1.1.3、分层API

Flink的分层API

  • 高等级API更容易使用,低等级API更灵活
  • DataStream API 较为常用

2、Windows环境上跑Flink

Flink应用程序支持批和流式处理分析

2.1、创建Maven工厂,导入依赖

<dependencies>
    <dependency>
        <groupId>org.apache.flink</groupId>
        <artifactId>flink-java</artifactId>
        <version>1.10.1</version>
    </dependency>
    <dependency>
        <groupId>org.apache.flink</groupId>
        <artifactId>flink-streaming-java_2.12</artifactId>
        <version>1.10.1</version>
    </dependency>
</dependencies>

2.2、代码示例:词频统计

2.2.1、自定义数据处理函数

import org.apache.flink.api.common.functions.FlatMapFunction;
import org.apache.flink.api.java.tuple.Tuple2;
import org.apache.flink.util.Collector;

public class MyFlatMap implements FlatMapFunction<String, Tuple2<String, Integer>> {
    public void flatMap(String value, Collector<Tuple2<String, Integer>> out) {
        String[] words = value.split(" ");
        for (String word : words) {
            out.collect(new Tuple2<>(word, 1));
        }
    }
}

2.2.2、批处理

import org.apache.flink.api.java.DataSet;
import org.apache.flink.api.java.ExecutionEnvironment;
import org.apache.flink.api.java.tuple.Tuple2;

public class WordCountBatch {
    public static void main(String[] args) throws Exception {
        // 创建执行环境
        ExecutionEnvironment env = ExecutionEnvironment.getExecutionEnvironment();
        // 从文件中读取数据
        DataSet<String> inputDataSet = env.readTextFile("src/main/resources/a.txt");
        // 分词,平化,分组,合计
        DataSet<Tuple2<String, Integer>> wordCountDataSet =
                inputDataSet.flatMap(new MyFlatMap())
                        .groupBy(0)  // 对Tuple2的0号位置进行分组
                        .sum(1);  // 对Tuple2的1号位置进行求和
        // 打印输出
        wordCountDataSet.print();
    }
}

打印结果
(dd,3)
(aa,4)
(bb,1)
(cc,2)

2.2.3、流式处理

2.2.3.1、读本地文件

import org.apache.flink.api.java.tuple.Tuple2;
import org.apache.flink.streaming.api.datastream.DataStream;
import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment;

public class WordCountStream {
    public static void main(String[] args) throws Exception {
        // 流执行环境
        StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
        // 从文件中读取数据
        DataStream<String> inputDataStream = env.readTextFile("src/main/resources/a.txt");
        // 分词,平化,分组,合计
        DataStream<Tuple2<String, Integer>> wordCountDataStream = inputDataStream
                .flatMap(new MyFlatMap())
                .keyBy(0)
                .sum(1);
        // 打印,设置并行度
        wordCountDataStream.print().setParallelism(1);
        // 执行
        env.execute();
    }
}

打印结果
(dd,1)
(cc,1)
(dd,2)
(cc,2)
(dd,3)
(aa,1)
(aa,2)
(aa,3)
(aa,4)
(bb,1)

2.2.3.2、读取网络数据

虚拟机输入命令

nc -lk 7777

运行下面Java代码(只改了第10行)

import org.apache.flink.api.java.tuple.Tuple2;
import org.apache.flink.streaming.api.datastream.DataStream;
import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment;

public class WordCountStreamSocket {
    public static void main(String[] args) throws Exception {
        // 流执行环境
        StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
        // 从网络中读取数据
        DataStream<String> inputDataStream = env.socketTextStream("hadoop100", 7777);
        // 分词,平化,分组,合计
        DataStream<Tuple2<String, Integer>> wordCountDataStream = inputDataStream
                .flatMap(new MyFlatMap())
                .keyBy(0)
                .sum(1);
        // 打印,设置并行度
        wordCountDataStream.print().setParallelism(1);
        // 执行
        env.execute();
    }
}

打印结果

3、Appendix

en🔉cn
transactiontr?n?z?k?nn. 交易;事务
event-driven??vent ?dr?vn事件驱动的
ingest?n?d?estvt. 摄取;咽下;吸收;
trigger?tr?ɡ?rn. 触发器;v. 触发
persistentp?r?s?st?nt执着的,坚持不懈的;(动植物某部位,如角、叶等)存留的
persistent storage永久存储
asynchronouse??s??kr?n?sadj. [电] 异步的;不同期的
checkpoint?t?ekp??ntn. 检查站,关卡
concisenessk?n?sa?sn?sn. 简明
expressiveness?k?spres?vn?sn. 善于表现;表情丰富
KV-Store键值对方式存储
  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2021-07-14 10:59:11  更:2021-07-14 11:00:35 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/6 5:03:34-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码