大规模数据处理实战
蔡元楠
硅谷资深工程师
41608 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 46 讲
大规模数据处理实战
15
15
1.0x
00:00/00:00
登录|注册

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

懂得Beam编程模型后可为生态圈做出贡献
Google推崇Apache Beam
"WWWH":What、Where、When、How
4个概念:窗口、水位线、触发器、累加模式
Beam生态圈构成
深入理解设计原理
Apache Beam不同于其他开源项目
思考题
小结
Beam的编程模型
为什么要先学习Beam的编程模型?
站在Google的肩膀上学习Beam编程模型
参考文章

该思维导图由 AI 生成,仅供参考

你好,我是蔡元楠。
今天我要与你分享的话题是“站在 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/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

Apache Beam编程模型的重要性在于提供了统一的编程模型思想,帮助处理不同的数据处理问题。与学习SDK使用不同,先学习Beam的编程模型能够帮助读者更好地理解设计背后的含义,从而更好地处理各种应用场景。Beam并非一个数据处理平台,而是提供了统一的编程模型思想,通过这个接口编写处理逻辑,这些逻辑将被转化为底层运行引擎相应的API去运行。学习Beam的编程模型能够帮助读者在遇到不同的数据处理问题时,具备更好的思考模式和处理能力。 Beam的编程模型涉及窗口、水位线、触发器和累加模式等概念,通过回答"What、Where、When、How"这四个问题来构建数据处理逻辑。通过这些概念,读者可以更好地理解数据处理的时间范围、计算结果输出时机以及处理结果之间的关系。Beam的编程模型贯穿了整个Beam生态圈,为读者提供了统一的数据处理逻辑构建方式,使得处理不同数据场景更加高效。 Google推崇Apache Beam开源项目,希望为外界贡献一个容易使用而又功能强大的大数据处理模型,可以同时适用于流处理和批处理,并且还可以移植于各种不同数据处理平台上。在Beam的生态圈中,每一层的设计都是根据Beam的编程模型来搭建的。懂得了Beam编程模型之后,我们可以为生态圈中的任意一层做出贡献。 总的来说,学习Apache Beam编程模型能够帮助读者更好地理解数据处理的核心概念和技术特点,从而更好地应对不同的数据处理问题。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《大规模数据处理实战》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(13)

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

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

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

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

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

    作者回复: 谢谢分享!

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

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

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

    作者回复: 谢谢分享!

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

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

    2019-06-12
    1
  • Bin滨
    有针对kafka Stream 的支持吗? Kafka Stream 本身也提供对 WWWH的概念的支持。

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

    2019-06-18
  • wuhulala
    在做我们的统一etl工具开发的时候,就参考beam的思想做了设计。我们的etl工具也是只涉及到模型层,实际的runner由informatica、kettle、大数据平台等,一份etl代码 实现多处运行 。但后面也由于一些工作调动 这些东西也一直没有完成。遗憾
    2020-04-02
    1
  • RAY_CCW😝😝😝
    想请教一个问题,如果我要用Beam去出一个报表的情况下,那么怎么去控制数据权限呢?
    2022-02-12
收起评论
显示
设置
留言
13
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部