大规模数据处理实战
蔡元楠
Google Brain资深工程师
立即订阅
8444 人已学习
课程目录
已完结 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讲)
结束语 | 世间所有的相遇,都是久别重逢
大规模数据处理实战
登录|注册

23 | 站在Google的肩膀上学习Beam编程模型

蔡元楠 2019-06-12
你好,我是蔡元楠。
今天我要与你分享的话题是“站在 Google 的肩膀上学习 Beam 编程模型”。
在上一讲中,我带你一起领略了 Apache Beam 的完整诞生历史。通过上一讲,你应该对于 Apache Beam 在大规模数据处理中能够带来的便利有了一定的了解。
而在这一讲中,让我们一起来学习 Apache Beam 的编程模型,帮助你打下良好的基础以便应对接下来的 Beam 实战篇。希望你在以后遇到不同的数据处理问题时,可以有着 Beam 所提倡的思考模式。
现在让我们一起进入 Beam 的世界吧。

为什么要先学习 Beam 的编程模型?

可能你会有疑问,很多人学习一项新技术的时候,都是从学习 SDK 的使用入手,为什么我们不同样的从 SDK 入手,而是要先学习 Beam 的编程模型呢?
我的答案有两点。
第一,Apache Beam 和其他开源项目不太一样,它并不是一个数据处理平台,本身也无法对数据进行处理。Beam 所提供的是一个统一的编程模型思想,而我们可以通过这个统一出来的接口来编写符合自己需求的处理逻辑,这个处理逻辑将会被转化成为底层运行引擎相应的 API 去运行。
第二,学习 Apache Beam 的时候,如果只学习 SDK 的使用,可能你不一定能明白这些统一出来的 SDK 设计背后的含义,而这些设计的思想又恰恰是涵盖了解决数据处理世界中我们所能遇见的问题。我认为将所有的 SDK 都介绍一遍是不现实的。SDK 会变,但它背后的原理却却不会改变,只有当我们深入了解了整个设计原理后,遇到各种应用场景时,才能处理得更加得心应手。
取消
完成
0/1000字
划线
笔记
复制
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
该试读文章来自付费专栏《大规模数据处理实战》,如需阅读全部文章,
请订阅文章所属专栏。
立即订阅
登录 后留言

精选留言(9)

  • 常超
    终于进入beam了,讲得这些宏观概念以及举的例子都很清晰,很有收获。
    从课表上看后面有关beam的还有13讲,感觉前面的铺垫太长,为了在这个专栏上维持数据处理的完整性,好多框架都拿出来泛泛谈一下,熟悉的人不需要,不熟悉的人也只能了解个大概皮毛,到不了能实战的程度。希望老师未来能出个针对某一个具体框架的深度学习课程。

    作者回复: 谢谢你提出的宝贵建议!作为讲师这个角色,确实我还是有很多地方需要改进的。因为写专栏的时候,除了写Spark这个具体的数据处理引擎,其它的内容当时觉得还是必要的基础知识。

    2019-06-12
    1
    9
  • 明翼
    老师你好,看了介绍beam是集成流处理和批量处理模型形成一套统一的模型,而且可以跑在多个runner上,我在想如果有很好的兼容性那可能会牺牲些性能,beam的程序是否可以和原生的runner上写的代码一样的性能那?如果我下层绑定了runner,我何必再用beam?beam的适用场景是不是很窄了那?

    作者回复: 谢谢你的提问!这个问题问得很好!

    其实这个问题的本质还是Beam在整个数据处理框架中扮演着一个什么样的角色。

    首先为什么不是所有的大数据处理引擎都可以作为底层Runner呢?原因是因为并不是所有的数据处理引擎都按照Beam的编程模型去实现相应的原生API。

    我以现在国内很火的Flink作为底层Runner为例子来说一下。在Flink 0.10版本以前,Flink的原生API并不是按照Beam所提出的编程模型来写的,所以那个时候Flink并不能作为底层Runner。而在Flink 0.10版本以后,Flink按照Beam编程模型的思想重写了DataStream API,这个时候如果我们用Beam SDK编写完数据处理逻辑就可以直接转换成相应的Flink原生支持代码。

    当然你说的没错,因为不是直接在原生Runner上编写程序,在参数调整上肯定会有所限制。但是Beam所提倡的是一个生态圈系统,希望不同的底层数据处理引擎都能有相应的API来支持Beam的编程模型。

    这种做法的好处是对于专注于应用层的工程师来说,它解放了我们需要学习不同引擎中原生API的限制,也解放了我们需要花时间了解不同处理引擎的利弊。对于专注于开发数据处理引擎的工程师来说,他们可以根据Beam编程模型不断优化自身产品,这样会导致更多产品之间的竞争,从而最终对整个行业起到良性的促进作用。

    2019-06-12
    7
  • ditiki
    这章在 Streaming 101/102 中有更多讲解,可以作为reference
    https://www.oreilly.com/ideas/the-world-beyond-batch-streaming-102

    作者回复: 谢谢分享!

    2019-06-14
    2
  • JohnT3e
    是否可以把Beam应该可以称为大数据处理的高级语言。虽然直接使用高级语言编写会产生一定的性能损耗,但屏蔽了各个底层平台的差异,提供了统一的逻辑抽象,提高了开发效率。如果一个场景既需要离线处理,也需要实时处理,那么就需要两种不同的计算平台(比如采用lambda架构)。此时采用beam可以解决同样逻辑多个平台开发的问题吧

    作者回复: 谢谢你的留言!我是很赞成你的说法的。这其实就好比SQL。我们学习SQL是学习它的语法从而根据实际应用场景来写出相应的SQL语句去解决问题。而相对的,如果觉得底层使用MySQL很好,那就是另外的决定了。写出来的SQL语句是不会因此改变的。

    2019-06-12
    2
  • 毛毛
    基于元素个数触发的窗口计算,统计交易数据,假如有很多个元素计数都为1,实际也没触发统计,这对当前时间窗口的统计就比实际差很多了,这种情况要怎么解决或者说适合什么场景呢,老师!

    作者回复: 谢谢提问!这个问题挺好的,在文章中我为了说明基于个数的触发器所以举出这样一个例子,在实际应用中并不一定适用。就如你所说,我们不能假设每个交易商品都会超过1,或者说每个窗口中都会有超过1个交易数据。
    在实际中具体怎么设计触发器肯定还是要按照自己的需求来的,像这种基于个数的触发器,可能更适合寻找top k这样一些场景。

    2019-07-07
    1
  • 朱同学
    我们开始也是被底层开发困扰,每个指标都要写代码,然后发现了kylin ,基本只关注模型和纬度了

    作者回复: 谢谢分享!

    2019-06-13
    1
  • 王治澎
    在业务系统中, 有非常复杂的业务逻辑计算, Beam 编程模型的引入会达到什么效果呢?
    2019-11-09
  • Bin滨
    有针对kafka Stream 的支持吗? Kafka Stream 本身也提供对 WWWH的概念的支持。

    作者回复: 谢谢你的提问!支持的,Beam有专门的KafkaIO。

    2019-06-18
  • AF
    还是那个理念:让工程师更专注与业务逻辑,而不要把精力和时间放到底层的实现上去!
    还是有利有弊吧!

    作者回复: 你说得没错,都是有所取舍的。

    2019-06-12
收起评论
9
返回
顶部