当前位置: 首页 > news >正文

Flink快速上手

Flink快速上手

  • 批处理
    • Maven配置pom文件
    • java编写wordcount代码
  • 有界流处理
  • 无界流处理

批处理

Maven配置pom文件

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>org.example</groupId><artifactId>com.atguigu</artifactId><version>1.0-SNAPSHOT</version><properties><flink.version>1.17.0</flink.version></properties><dependencies><dependency><groupId>org.apache.flink</groupId><artifactId>flink-streaming-java</artifactId><version>${flink.version}</version></dependency><dependency><groupId>org.apache.flink</groupId><artifactId>flink-clients</artifactId><version>${flink.version}</version></dependency></dependencies></project>

java编写wordcount代码

基于DataSet API(过时的,不推荐)
之后用 DataStream API

package com.atguigu.wc;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.operators.FlatMapOperator;
import org.apache.flink.api.java.operators.UnsortedGrouping;
import org.apache.flink.api.java.tuple.Tuple2;
import org.apache.flink.util.Collector;public class WordCountBatchDemo {public static void main(String[] args) throws Exception {//1.创建执行环境ExecutionEnvironment env = ExecutionEnvironment.getExecutionEnvironment();//2.读取数据,从文件中读取DataSource<String> lineDS = env.readTextFile("input/word.txt");//3.切分、转换(word,1)FlatMapOperator<String, Tuple2<String, Integer>> wordAndOne = lineDS.flatMap(new FlatMapFunction<String, Tuple2<String, Integer>>() {@Overridepublic void flatMap(String value, Collector<Tuple2<String, Integer>> out) throws Exception {//Todo3.1 按照空格 切分单词String[] words = value.split(" ");//Todo3.2 将单词转换为(word,1)for (String word : words) {Tuple2<String, Integer> wordTuple2 = Tuple2.of(word, 1);//Todo3.3 调用采集器collector 向下游发送数据out.collect(wordTuple2);}}});//4.按照word分组UnsortedGrouping<Tuple2<String, Integer>> wordAndOneGroupBy = wordAndOne.groupBy(0);//5.各分组内聚合AggregateOperator<Tuple2<String, Integer>> sum = wordAndOneGroupBy.sum(1);//6.输出sum.print();}
}

在这里插入图片描述

有界流处理

package com.atguigu.wc;import org.apache.flink.api.common.functions.FlatMapFunction;
import org.apache.flink.api.java.functions.KeySelector;
import org.apache.flink.api.java.tuple.Tuple2;
import org.apache.flink.streaming.api.datastream.DataStreamSource;
import org.apache.flink.streaming.api.datastream.KeyedStream;
import org.apache.flink.streaming.api.datastream.SingleOutputStreamOperator;
import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment;
import org.apache.flink.util.Collector;public class WordCountStreamDemo {public static void main(String[] args) throws Exception {//TODO 1. 创建执行环境StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();//TODO 2. 读取数据DataStreamSource<String> lineDS = env.readTextFile("input/word.txt");//TODO 3. 处理数据:切分/转换/分组/聚合//TODO 3.1 处理数据:切分/转换SingleOutputStreamOperator<Tuple2<String, Integer>> wordAndOneDS = lineDS.flatMap(new FlatMapFunction<String, Tuple2<String, Integer>>() {@Overridepublic void flatMap(String value, Collector<Tuple2<String, Integer>> out) throws Exception {//切分String[] words = value.split(" ");for (String word : words) {//转换为二元组(word,1)Tuple2<String, Integer> wordAndOne = Tuple2.of(word, 1);//通过采集器 向下游发送数据out.collect(wordAndOne);}}});//TODO 3.2 处理数据:分组KeyedStream<Tuple2<String, Integer>, String> wordAndOneKS = wordAndOneDS.keyBy(new KeySelector<Tuple2<String, Integer>, String>() {@Overridepublic String getKey(Tuple2<String, Integer> value) throws Exception {return value.f0;}});//TODO 3.3 处理数据:聚合SingleOutputStreamOperator<Tuple2<String, Integer>> sumDS = wordAndOneKS.sum(1);//TODO 4. 输出数据sumDS.print();//TODO 5. 执行:sparkstreaming 最后 ssc.start()env.execute();}
}

在这里插入图片描述

无界流处理

事件驱动

package com.atguigu.wc;import org.apache.flink.api.common.typeinfo.Types;
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 WordCountSocketStream {public static void main(String[] args) throws Exception {//TODO 1. 创建执行环境StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();DataStreamSource<String> socketDS = env.socketTextStream("hadoop102", 7777);SingleOutputStreamOperator<Tuple2<String, Integer>> sum = socketDS.flatMap((String value, Collector<Tuple2<String, Integer>> out) -> {//切分String[] words = value.split(" ");for (String word : words) {//转换为二元组(word,1)//通过采集器 向下游发送数据out.collect(Tuple2.of(word, 1));}}).returns(Types.TUPLE(Types.STRING, Types.INT)).keyBy(value -> value.f0).sum(1);sum.print();env.execute();}
}

事件触发
来一个处理一个
在这里插入图片描述

在这里插入图片描述

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • C# HttpClient 实现HTTP Client 请求
  • 零基础学习Python(八)—— time模块、request模块、数据分析和自动化办公相关模块、jieba模块、文件操作和os相关模块的简单介绍
  • 常见 HTTP 状态码详解与Nginx 文件上传大小限制
  • torchvision数据集使用
  • Java设计模式【命令模式】-行为型
  • 【chrony安装】安装chrony服务作为NTP客户端(linux版)
  • html+css+js网页设计 旅游 龙门石窟4个页面
  • 【2023年】云计算金砖牛刀小试6
  • 【机器学习】从零开始理解深度学习——揭开神经网络的神秘面纱
  • 十款闭源加密软件推荐:哪款才是最佳选择
  • Spring2-入门
  • 流片为啥那么重要?
  • SpringMVC;MVC模式;Spring环境搭建;
  • 【万象AI,安全新生】美洽献力2024国家网络安全宣传周-成都站
  • Vue3+TS项目pinia使用优化在stores目录下新建index.ts
  • (十五)java多线程之并发集合ArrayBlockingQueue
  • 《深入 React 技术栈》
  • 03Go 类型总结
  • 2019年如何成为全栈工程师?
  • Android框架之Volley
  • CentOS6 编译安装 redis-3.2.3
  • Cumulo 的 ClojureScript 模块已经成型
  • GDB 调试 Mysql 实战(三)优先队列排序算法中的行记录长度统计是怎么来的(上)...
  • java第三方包学习之lombok
  • Java教程_软件开发基础
  • js中forEach回调同异步问题
  • opencv python Meanshift 和 Camshift
  • php中curl和soap方式请求服务超时问题
  • Quartz初级教程
  • SQLServer之创建显式事务
  • Web Storage相关
  • 大数据与云计算学习:数据分析(二)
  • 浮动相关
  • 解决iview多表头动态更改列元素发生的错误
  • 老板让我十分钟上手nx-admin
  • 使用common-codec进行md5加密
  • -- 数据结构 顺序表 --Java
  • 通过几道题目学习二叉搜索树
  • 新手搭建网站的主要流程
  • 一个6年java程序员的工作感悟,写给还在迷茫的你
  • 一天一个设计模式之JS实现——适配器模式
  • 移动端唤起键盘时取消position:fixed定位
  • ​​​​​​​STM32通过SPI硬件读写W25Q64
  • ‌移动管家手机智能控制汽车系统
  • ### RabbitMQ五种工作模式:
  • #NOIP 2014# day.1 T2 联合权值
  • #考研#计算机文化知识1(局域网及网络互联)
  • #数据结构 笔记一
  • #我与Java虚拟机的故事#连载01:人在JVM,身不由己
  • (2)MFC+openGL单文档框架glFrame
  • (2)空速传感器
  • (三)c52学习之旅-点亮LED灯
  • (三十五)大数据实战——Superset可视化平台搭建
  • (一)80c52学习之旅-起始篇
  • (一)SpringBoot3---尚硅谷总结