flink学习(scala版)--第二章:Flink快速上手
创始人
2025-05-31 21:43:15
0

1.1  环境准备

        1.系统环境为Windows10。

        2.需提前安装Java 8和Scala2.12。

        3.集成开发环境(IDE)使用IntelliJ IDEA,具体的安装流程参见IntelliJ官网。

        4.安装IntelliJIDEA之后,还需要安装一些插件—Maven、Scala。Maven用来管理项目依赖;

1.2 创建项目

        1. 创建工程(1)打开IntelliJIDEA,file->New->Project 创建一个Maven工程,如图2-1所示。

  idea版本不同界面会有些许差异      

         2. 添加项目依赖在项目的pom文件中,增加标签设置属性,然后增加标签引入需要的依赖。我们需要添加的依赖最重要的就是Flink的相关组件,包括flink-scala、flink-streaming-scala,以及flink-clients。

    88UTF-81.13.01.82.12org.apache.flinkflink-scala_${scala.binary.version}${flink.version}org.apache.flinkflink-streaming-scala_${scala.binary.version}${flink.version}org.apache.flinkflink-clients_2.12${flink.version}

3 编写代码搭好项目框架,接下来就是我们的核心工作——往里面填充代码。我们会用一个最简单的示例来说明Flink代码怎样编写:统计一段文字中,每个单词出现的频次。我们首先在src/main路径下新建一个源码目录scala,本书源码将位于src/main/scala目录下。在这个目录下新建一个包,命名为com.atguigu.chapter02,在这个包下我们将编写Flink入门的WordCount程序。

这里要将scala目录设置为根目录

 3.1 批处理

        对于批处理而言,输入的应该是收集好的数据集。这里我们可以将要统计的文字,写入一个文本文档,然后读取这个文件处理数据就可以了。

        (1)在工程根目录下新建一个input文件夹,并在下面创建文本文件words.txt

        (2)在words.txt中输入一些文字,

        例如:

hello world
hello flink
hello java
hello scala

        (3)在com.atguigu.chapter02包下新建Scala的单例对象(object)BatchWordCount,在静态main方法中编写测试代码。我们进行单词频次统计的基本思路是:先逐行读入文件数据,然后将每一行文字拆分成单词;接着按照单词分组,统计每组数据的个数,就是对应单词的频次。具体

代码实现如下:

import org.apache.flink.api.scala._object Test01 {def main(args: Array[String]): Unit = {// 创建执行环境配置并行度val environment: ExecutionEnvironment = ExecutionEnvironment.getExecutionEnvironment// 读取文本文件val words: DataSet[String] = environment.readTextFile("input/word.txt")// 对数据进行格式转换val wordTuple: DataSet[(String, Int)] = words.flatMap(_.split(" ")).map(word => (word, 1))// 对数据进行分组聚合val value: AggregateDataSet[(String, Int)] = wordTuple.groupBy(0).sum(1)value.print()}}

输出结果:

(java,1)
(flink,1)
(world,1)
(scala,1)
(hello,4)


可以看到,我们将文档中的所有单词的频次,全部统计出来,以二元组的形式在控制台打印输出了。

        需要注意的是,这种代码的实现方式,是基于DataSet API的,也就是我们对数据的处理转换,是看作数据集来进行操作的。事实上Flink本身是流批统一的处理架构,批量的数据集本质上也是流,没有必要用两套不同的API来实现。所以从Flink 1.12开始,官方推荐的做法是直接使用DataStream API,在提交任务时通过将执行模式设为BATCH来进行批处理:

$ bin/flink run -Dexecution.runtime-mode=BATCH BatchWordCount.jar

        这样,DataSet API就已经处于“软弃用”(soft deprecated)的状态,在实际应用中我们只要维护一套DataStream API就可以了。这里只是为了方便大家理解,我们依然用DataSet API做了批处理的实现。

3.2 流处理

        对于Flink而言,流才是整个处理逻辑的底层核心,所以流批统一之后的DataStream API更加强大,可以直接处理批处理和流处理的所有场景。

        1. 读取文件

        具体实现代码如下:

        

import org.apache.flink.streaming.api.scala._
object StreamWordCount {def main(args: Array[String]): Unit = {val env: StreamExecutionEnvironment = StreamExecutionEnvironment.getExecutionEnvironmentval lineData: DataStream[String] = env.readTextFile("input/word.txt")//val lineData: DataStream[String] = env.socketTextStream("localhost", 9999)val oneWord: DataStream[(String, Int)] = lineData.flatMap(_.split(" ")).map(word => (word, 1))val data: DataStream[(String, Int)] = oneWord.keyBy(_._1).sum(1)data.print()env.execute()}}

输出结果如下:

1> (scala,1)
10> (flink,1)
4> (hello,1)
2> (java,1)
7> (world,1)
4> (hello,2)
4> (hello,3)
4> (hello,4)

        这与批处理的结果是完全不同的。批处理针对每个单词,只会输出一个最终的统计个数;而在流处理的打印结果中,“hello”这个单词每出现一次,都会有一个频次统计数据输出。这就是流处理的特点,数据逐个处理,每来一条数据就会处理输出一次。我们通过打印结果,可以清晰地看到单词“hello”数量增长的过程。

以上就是flink的快速上手案例,分别介绍了批处理过程和流处理过程,欢迎留言讨论

走过路过,点个赞。。。

相关内容

热门资讯

家庭游去潮汕旅游5天4晚花多少... 五一假期即将来临,我和朋友们决定前往潮汕地区,开启一场五天的美食与文化之旅。潮汕地区以其独特的潮汕文...
原创 瓦... 宝子们,我跟你们说啊,我前段时间去了印度的瓦拉纳西,正好赶上了他们那儿超有名的洒红节!那场面,简直太...
【邯消提示】露营野炊烟火气,消... 说走就走,即刻启程 野营计划要防火 阳光正好,微风不燥 正是出游踏青露营的好时节 各位小伙伴 ...
爱者疯狂、厌者退散,杂碎美食如... 在美食的广袤天地里,有一类食材宛如神秘的侠客,自带争议却又魅力非凡,它就是杂碎。这个被爱者奉为至珍,...
原创 自... 标题:自制炸牛奶,外酥里嫩,老人小孩抢着吃,10分钟学会零失败 在这个快节奏的时代,我们总是在寻找...
原创 朋... 标题:朋友来做客,老婆就做了一道菜,我骂她小气!打开锅盖后我傻了眼。 在美食的世界里,每一道佳肴背...
原创 3... 什么是适合夏天常吃的汤菜?首先不要口味太重了,油腻爆辣少吃些。其次汤一定也要能喝,毕竟汤汁多才下饭。...
原创 腊... 标题:腊肉这样蒸着吃最解馋,香而不腻,每次做上一大盘,全部吃光光! 在寒冷的冬日里,一道热气腾腾、...
原创 童... 标题:童年常吃的三款“零食”,图一生病是才能吃,图三已经绝版了。 在那个没有智能手机和网络的年代,...
原创 能... 在快节奏的现代生活中,我们往往忽略了饮食养生的重要性。然而,一碗精心熬制的养生粥,不仅能够滋养身体,...
原创 菠... 标题:菠萝这样吃真过瘾,酸甜可口,夹带着肉香,我们全家都爱吃! 在这个季节里,当阳光明媚,微风不燥...
原创 炒... 标题:炒土豆丝大家都会做,为什么酒店做的好吃呢?窍门都在这儿了! 在美食的世界里,土豆丝作为一道家...
原创 老... 标题:老妈做的肘子又香又软,瘦肉吃起来还不塞牙!赶快来学学! 在这个快节奏的时代,我们总是在寻找那...
首个上美影IP主题亲子乐园正式... 爬上滑梯,在《大闹天宫》里的蟠桃盛宴间嬉戏;穿着泳衣,大胆探索《哪吒闹海》中的龙宫奇景……国内首个以...
首个上美影IP主题亲子乐园正式... 爬上滑梯,在《大闹天宫》里的蟠桃盛宴间嬉戏;穿着泳衣,大胆探索《哪吒闹海》中的龙宫奇景……国内首个以...
原创 和... 抵达南昌的瞬间,那扑面而来的烟火气仿佛将我们紧紧包围。街头巷尾,叫卖声此起彼伏,小吃摊琳琅满目,令人...
潮汕参团两日游人均费用多少,去... 前段时间,我一直心心念念着去潮汕旅游,那片充满历史韵味与美食诱惑的土地,像磁石一般吸引着我。终于,在...
档期已排满:单日收入3000,... 综合自微博@央视新闻、@央视网、@央视财经、@中新视频、@新周刊等 中国入境游市场自2023年疫情政...
端午假期“余额”不足,返程攻略... 您的端午假期“余额”不足 且无法“充值”...... 假期的时光总是这么短暂 不知不觉中 端午假期...