大规模数据处理实战
蔡元楠
Google Brain资深工程师
立即订阅
8403 人已学习
课程目录
已完结 46 讲
0/4登录后,你可以任选4讲全文学习。
开篇词 (1讲)
开篇词 | 从这里开始,带你走上硅谷一线系统架构师之路
免费
模块一 | 直通硅谷大规模数据处理技术 (3讲)
01 | 为什么MapReduce会被硅谷一线公司淘汰?
02 | MapReduce后谁主沉浮:怎样设计下一代数据处理技术?
03 | 大规模数据处理初体验:怎样实现大型电商热销榜?
模块二 | 实战学习大规模数据处理基本功 (8讲)
04 | 分布式系统(上):学会用服务等级协议SLA来评估你的系统
05 | 分布式系统(下):架构师不得不知的三大指标
06 | 如何区分批处理还是流处理?
07 | Workflow设计模式:让你在大规模数据世界中君临天下
08 | 发布/订阅模式:流处理架构中的瑞士军刀
09 | CAP定理:三选二,架构师必须学会的取舍
10 | Lambda架构:Twitter亿级实时数据分析架构背后的倚天剑
11 | Kappa架构:利用Kafka锻造的屠龙刀
模块三 | 抽丝剥茧剖析Apache Spark设计精髓 (10讲)
12 | 我们为什么需要Spark?
13 | 弹性分布式数据集:Spark大厦的地基(上)
14 | 弹性分布式数据集:Spark大厦的地基(下)
15 | Spark SQL:Spark数据查询的利器
16 | Spark Streaming:Spark的实时流计算API
17 | Structured Streaming:如何用DataFrame API进行实时数据分析?
18 | Word Count:从零开始运行你的第一个Spark应用
19 | 综合案例实战:处理加州房屋信息,构建线性回归模型
20 | 流处理案例实战:分析纽约市出租车载客信息
21 | 深入对比Spark与Flink:帮你系统设计两开花
模块四 | Apache Beam为何能一统江湖 (8讲)
22 | Apache Beam的前世今生
23 | 站在Google的肩膀上学习Beam编程模型
24 | PCollection:为什么Beam要如此抽象封装数据?
25 | Transform:Beam数据转换操作的抽象方法
26 | Pipeline:Beam如何抽象多步骤的数据流水线?
27 | Pipeline I/O: Beam数据中转的设计模式
28 | 如何设计创建好一个Beam Pipeline?
29 | 如何测试Beam Pipeline?
模块五 | 决战 Apache Beam 真实硅谷案例 (7讲)
30 | Apache Beam实战冲刺:Beam如何run everywhere?
31 | WordCount Beam Pipeline实战
32 | Beam Window:打通流处理的任督二脉
33 | 横看成岭侧成峰:再战Streaming WordCount
34 | Amazon热销榜Beam Pipeline实战
35 | Facebook游戏实时流处理Beam Pipeline实战(上)
36 | Facebook游戏实时流处理Beam Pipeline实战(下)
模块六 | 大规模数据处理的挑战与未来 (4讲)
37 | 5G时代,如何处理超大规模物联网数据
38 | 大规模数据处理在深度学习中如何应用?
39 | 从SQL到Streaming SQL:突破静态数据查询的次元
40 | 大规模数据处理未来之路
专栏加餐 | 特别福利 (4讲)
FAQ第一期 | 学习大规模数据处理需要什么基础?
加油站 | Practice makes perfect!
FAQ第二期 | Spark案例实战答疑
FAQ第三期 | Apache Beam基础答疑
结束语 (1讲)
结束语 | 世间所有的相遇,都是久别重逢
大规模数据处理实战
登录|注册

32 | Beam Window:打通流处理的任督二脉

蔡元楠 2019-07-08
你好,我是蔡元楠。
今天我要与你分享的主题是“Beam Window:打通流处理的任督二脉”。
在上一讲中,我们一起用 Beam 编写了第一个完整的 WordCount 项目,我们所用的例子是统计莎士比亚的文集中最常使用到的一些单词。
这里我们所用到的“莎士比亚文集”这种类型的数据集是一个静态的数据集。也就是说,我们在生成输入数据集的时候,就已经知道了这个数据集是完整的,并不需要再等待新的数据进来。
根据前面的内容,我们可以把这种数据集归类为有界数据集(Bounded Dataset)。这里我们的数据流水线就是一个批处理的数据流水线。
这个时候你可能会有一个疑问,如果我们想要统计的内容是一个正在连载的小说,我们在编写数据流水线的时候,这个小说还并没有完结,也就是说,未来还会不断有新的内容作为输入数据流入我们的数据流水线,那我们需要怎么做呢?
这个时候我们就需要用到窗口(Window)这个概念了。

窗口

在 Beam 的世界中,窗口这个概念将 PCollection 里的每个元素根据时间戳(Timestamp)划分成为了不同的有限数据集合。
当我们要将一些聚合操作(Aggregation)应用在 PCollection 上面的时候,或者我们想要将不同的 PCollections 连接(Join)在一起的时候,其实 Beam 是将这些操作应用在了这些被窗口划分好的不同数据集合上的。
取消
完成
0/1000字
划线
笔记
复制
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
该试读文章来自付费专栏《大规模数据处理实战》,如需阅读全部文章,
请订阅文章所属专栏。
立即订阅
登录 后留言

精选留言(3)

  • Chang
    老师,我对会话窗口的理解不知道对不对:像文中的例子gap是5 min的话,假设有一个数据流每4分钟一个流入一个数据,是不是只需要一个窗口?

    作者回复: 谢谢你的提问!是的,按照你说的情景最终只会产生一个会话窗口。

    2019-07-24
    1
  • W.T
    老师,文章读完有两点疑惑的地方:
    1、文中滑动窗口样例,窗口大小1小时,滑动周期30分钟:
    [July 8, 2019 0:00:00 AM, July 8, 2019 1:00:00 AM)
    [July 8, 2019 0:30:00 AM, July 8, 2019 1:30:00 AM)
    [July 8, 2019 1:00:00 AM, July 8, 2019 1:30:00 AM)
    [July 8, 2019 1:30:00 AM, July 8, 2019 2:00:00 AM)
    ……
    最后两条是否笔误了?窗口大小固定是1小时,我的理解应该是下面这样:
    [July 8, 2019 1:00:00 AM, July 8, 2019 2:00:00 AM)
    [July 8, 2019 1:30:00 AM, July 8, 2019 2:30:00 AM)
    2、会话窗口是否可以这么理解:指定一段时间,在这段时间范围圈定的数据集上去应用固定窗口。
    请老师指教,谢谢!

    作者回复: 谢谢你的留言!
    1、是的呢,eagle eye啊,已经给编辑部反映修改了。
    2、如果我没有理解错你的留言的话,应该是每次得到一个新数据后,如果这个新数据的时间戳和之前的会话窗口边界相差没有超过Duration Gap的话,就将这个新数据归入会话窗口中,并且再将窗口向外延时Duration Gap的时长。

    2019-07-10
    1
  • cricket1981
    beam支持动态session gap定义吗?全局窗口的作用和使用场景是什么?beam支持自定义窗口吗?

    作者回复: 谢谢你的留言!动态定义sessino gap说实话我没有尝试过,所以我不确定给同一个PCollection设置多次Sessions Window的话会不会报错。

    全局窗口的一个用处是在处理无边界数据的数据集时,配合触发器使用。例如每隔N段时间计算现有的所有数据平均值。

    自定义窗口Beam现在应该是不支持的。

    2019-07-08
    1
    1
收起评论
3
返回
顶部