FLINK流计算拓扑任务代码分析<一>
public class WikipediaAnalysis { public static void main(String[] args) throws Exception { //首先,构建一个StreamExecutionEnvironment
//用来设置运行参数
//当从外部系统读取数据的时候,也被用来创建源(sources)
StreamExecutionEnvironment see = StreamExecutionEnvironment.getExecutionEnvironment(); //读取 Wikipedia IRC 日志的源(sources)
DataStream<WikipediaEditEvent> edits = see.addSource(new WikipediaEditsSource()); //在本案例中,我们关心的是每个用户在一个特定时间窗口内(比如说5秒钟)增加或者删除内容的字节数。
//为了实现这个目标,我们需要指定用户名作为数据流的 key 字段,也就是说在这个数据流上的操作应该考虑到用户名。
//在我们的案例中需要对时间窗口中每个唯一用户的编辑字节数求和。为了使数据流包含 key,我们需要提供一个KeySelector.ng KeyedStream<WikipediaEditEvent,String> keyedEdits = edits.keyBy(new KeySelector<WikipediaEditEvent, String>() {
@Override
public String getKey(WikipediaEditEvent event) {
return event.getUser();
}
}); //它创建了一个WikipediaEditEvent流,以用户名作为String类型的 key。
//现在我们可以在这个流上指定窗口并且基于这些窗口内的数据计算出结果。
//一个窗口指定了要执行计算的数据流的一个分片。当需要在一个无边界的数据流上执行聚合计算时,窗口是必不可少的。
//在我们的案例中,我们想要做的就是每5秒钟一个窗口对编辑字节数做聚合计算
DataStream<Tuple2<String, Long>> result = keyedEdits
//指定了我们需要一个大小为5秒钟的滚动窗口(非重叠窗口)
.timeWindow(Time.seconds(5))
//调用的第二个方法指定了对每个窗口分片中每个唯一的key做 Fold transformation 转换。
.fold(
new Tuple2<>("", 0L), //初始值
new FoldFunction<WikipediaEditEvent, Tuple2<String, Long>>() {
@Override
public Tuple2<String, Long> fold(Tuple2<String, Long> acc, WikipediaEditEvent event) {
acc.f0 = event.getUser();
acc.f1 += event.getByteDiff();
return acc;
}
}); //将结果流在终端输出
result.print(); //将结果输出到Kafka
//result.addSink(new FlinkKafkaProducer010<>("localhost:9092", "wiki-result", new SimpleStringSchema())); //开始执行计算
//像前面的创建数据源,转换和 Sinks 操作仅仅是构建了一个内部操作图。
//只有当execute()被调用的时候,这个操作图才会被扔在集群或者在你的本地机器运行。
see.execute();
}
}
FLINK流计算拓扑任务代码分析<一>的更多相关文章
- FLINK流计算拓扑任务代码分析<二>
首先 是 StreamExecutionEnvironment see = StreamExecutionEnvironment.getExecutionEnvironment(); 我们在编写 fl ...
- Linux内核启动代码分析二之开发板相关驱动程序加载分析
Linux内核启动代码分析二之开发板相关驱动程序加载分析 1 从linux开始启动的函数start_kernel开始分析,该函数位于linux-2.6.22/init/main.c start_ke ...
- Android4.0图库Gallery2代码分析(二) 数据管理和数据加载
Android4.0图库Gallery2代码分析(二) 数据管理和数据加载 2012-09-07 11:19 8152人阅读 评论(12) 收藏 举报 代码分析android相册优化工作 Androi ...
- SQL注入原理及代码分析(二)
前言 上一篇文章中,对union注入.报错注入.布尔盲注等进行了分析,接下来这篇文章,会对堆叠注入.宽字节注入.cookie注入等进行分析.第一篇文章地址:SQL注入原理及代码分析(一) 如果想要了解 ...
- android4.0 的图库Gallery2代码分析(二)
最近迫于生存压力,不得不给人兼职打工.故在博文中加了个求点击的链接.麻烦有时间的博友们帮我点击一下.没时间的不用勉强啊.不过请放心,我是做技术的,肯定链接没病毒,就是我打工的淘宝店铺.嘻嘻.http: ...
- 信息管理代码分析<二>读取二进制文件数据
first和end做为全局变量,分别指向链表的头和尾.建立链表的方式也比较简易,从二进制文件数据块中,依次从头到尾读取,每读取一个就建立一个结点. /*基本模型*/ EMP *emp1; while( ...
- XSS原理及代码分析
前言 XSS又叫跨站脚本攻击,是一种对网站应用程序的安全漏洞攻击技术.它允许恶意用户将代码注入网页,其他用户在浏览网页时就会受到影响.XSS分为三种:反射型,存储型,和DOM型.下面我会构造有缺陷的代 ...
- 指标统计:基于流计算 Oceanus(Flink) 实现实时 UVPV 统计
作者:吴云涛,腾讯 CSIG 高级工程师导语 | 最近梳理了一下如何用 Flink 来实现实时的 UV.PV 指标的统计,并和公司内微视部门的同事交流.然后针对该场景做了简化,并发现使用 Flink ...
- Flink与其他流处理方式的对比分析
一.Flink与其他流处理方式的对比分析 ·1.Flink特点: Apache Flink 是一个开源的分布式,高性能,高可用,准确的流处理框架. 主要由 Java 代码实现. 支持实时流(strea ...
随机推荐
- IDEA创建maven项目时,maven太慢-archetypeCatalog=internal
创建项目时候加上archetypeCatalog=internal 参数, archetypeCatalog表示插件使用的archetype元数 据,不加这个参数时默认为remote,local,即中 ...
- 关于Unity3d的Quaternion.LookRotation的学习
首先,创建两个cube GameObject物件.Origin作为原点参考.Player是我们要实验的物件.如下图所示: 创建一个脚本Quat.cs,赋给Palyer cube.脚本如下: publi ...
- 深入浅出SharePoint2010——请假系统实战
一.需求分析文档 二.请假系统无代码解决方案 2.1 数据框架设计 2.2 权限设计 2.3 表单设计 2.4 工作流设计 2.5 门户主页设计 三.请假系统第三方解决方案(Nintex) 四.请假系 ...
- [EffectiveC++]item41:了解隐式接口和编译期多态
- IOS 登录信息类(使用单例)
WCUserInfo.h #import <Foundation/Foundation.h> #import "Singleton.h" @interface WCUs ...
- 安装Jdk,tomcat【转载】
一.下载安装对应的jdk,并配置Java环境. 官网下载地址: http://www.oracle.com/technetwork/java/javase/downloads/jdk-6u26-dow ...
- 【2】【MOOC】Python游戏开发入门-北京理工大学【第三部分-游戏开发之机制(屏幕绘制机制)】
学习地址链接:http://www.icourse163.org/course/0809BIT021E-1001873001?utm_campaign=share&utm_medium=and ...
- linux mint sublime3的c编译环境配置
通过Tools>>Build System>>New Build System弹出新建文件来设置,也可以replace覆盖以前的 一种方式,konsole可以通过sudo ap ...
- x-frame-options、iframe与iframe的一些操作
iframe的子操作父窗口,父操作子窗口: test.php: <!DOCTYPE html> <html> <head> <title>test< ...
- forward_list详解
forward_list在头文件<forward_list>中,与list类似,区别就是list时双链表,forward_list是单链表,forward_list只支持前向迭代.在访问第 ...