flink入门程序(一)
温馨提示:这篇文章已超过373天没有更新,请注意相关的内容是否还可用!
Flink中提供了3个组件,包括DataSource、Transformation和DataSink。
(图片来源网络,侵删)
DataSource:表示数据源组件,主要用来接收数据,目前官网提
供了readTextFile、socketTextStream、fromCollection以及一些第三方的Source。
Transformation:表示算子,主要用来对数据进行处理,比如Map、FlatMap、Filter、Reduce、Aggregation等。
DataSink:表示输出组件,主要用来把计算的结果输出到其他存
储介质中,比如writeAsText以及Kafka、Redis、Elasticsearch
等第三方Sink组件。
因此,想要组装一个Flink Job,至少需要这3个组件。
以下来看一个flink的入门程序
首先项目里面引入依赖
org.apache.flink
flink-java
1.13.1
org.apache.flink
flink-streaming-java_2.11
1.13.1
org.apache.flink
flink-clients_2.11
1.13.1
在这里我使用的是1.13.1版本
开发 Flink 程序有固定的流程
(1)获得 一个执行环境
(2)加载/创建初始化数据
(3)指定操作数据的 Transaction算子
(4)指定计算好的数据的存放位置
(5)调用 execute()触发执行程序
入门案例:flink从文件中读取数据,并统计word的个数,具体代码如下
public static void main(String[] args) throws Exception{
//获得执行环境
StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
//加载或创建具体数据源
DataStream dataStream =
env.readTextFile("C:\\d_disk\\zq_project\\interesting\\src\\main\\resources\\22.txt")
.flatMap(new Splitter())
.keyBy(value -> value.f0) //按照元组里面的第一个元素分组
//.window(TumblingProcessingTimeWindows.of(Time.seconds(5))) //时间窗口
.sum(1);//按照元组里面的第二个元素求和
dataStream.print();
env.execute("wordCount");
}
public static class Splitter implements FlatMapFunction {
@Override
public void flatMap(String sentence, Collector out) throws Exception {
//根据空格切割行文本
for (String word: sentence.split(" ")) {
//把每个切割后的word放到一个二维元组里面,并计数为1
out.collect(new Tuple2(word, 1));
}
}
}
txt文本内容如下
apple iphone orange text apple orange dog dog cat pig
控制台打印效果如下
1> (cat,1) 5> (orange,1) 7> (apple,1) 2> (text,1) 3> (dog,1) 3> (dog,2) 3> (pig,1) 5> (orange,2) 6> (iphone,1) 7> (apple,2)
免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们,邮箱:ciyunidc@ciyunshuju.com。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!
