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

28 | 如何设计创建好一个Beam Pipeline?

合并模式的Beam实现
街头美团外卖电动车数量预测案例
分离模式的Beam实现
商城会员系统的分离模式案例
过滤模式的Beam实现
商城会员系统的过滤模式案例
复制模式的Beam实现
YouTube视频平台的复制模式案例
输出数据需要是什么样的格式,需要存储到哪里?
这个pipeline你打算对数据进行哪些操作?
输入数据是什么格式?
输入数据存储在哪里?
思考题
合并模式的Pipeline设计
分离模式的Pipeline设计
过滤模式的Pipeline设计
复制模式的Pipeline设计
设计Pipeline的基本考虑因素
如何设计创建好一个Beam Pipeline

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

你好,我是蔡元楠。
今天我要与你分享的主题是“如何设计创建好一个 Beam Pipeline”。
这一讲我们会用到第 7 讲中介绍过的四种常见设计模式——复制模式、过滤模式、分离模式和合并模式。这些设计模式就像是武功的基本套路一样,在实战中无处不在。今天,我们就一起来看看我们怎么用 Beam 的 Pipeline 来实现这些设计模式。

设计 Pipeline 的基本考虑因素

在设计 Pipeline 时,你需要注意 4 条基本的考虑因素。

1. 输入数据存储在哪里?

输入数据是存储在云存储文件系统,还是存储在一个关系型数据库里?有多大的数据量?这些都会影响你的 pipeline 设计是如何读入数据的。上一讲已经讲到过,Pipeline 的数据读入是使用 Read 这个特殊的 Transform。而数据读入往往是一个 Pipeline 的第一个数据操作。

2. 输入数据是什么格式?

输入数据是纯文本文件?还是读取自关系型数据库的行?还是结构化好的特殊数据结构?这些都会影响你对于 PCollection 的选择。比如,如果输入数据是自带 key/value 的结构,那你用 Beam 的 key/value 为元素的 PCollection 能更好的表示数据。

3. 这个 pipeline 你打算对数据进行哪些操作?

确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

Beam中Pipeline设计模式详解 本文详细介绍了在Beam中设计和创建Pipeline时所涉及的四种常见设计模式:复制模式、过滤模式、分离模式和合并模式。通过具体案例和代码示例,文章生动展示了如何在Beam中应用这些设计模式。其中,复制模式通过多重输出PCollection实现数据复制和多种处理;过滤模式通过条件过滤实现数据筛选;分离模式通过side input/output技术将数据分组处理;合并模式则通过Flatten函数将多个PCollection合并成一个总数据集。总结指出,这些基本数据处理模式在实战项目中占据重要地位,并对未来实现大型系统具有帮助。文章内容丰富,为读者提供了实用的技术指导,使其能够快速了解Beam中Pipeline设计模式的特点和应用方法。

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

全部留言(8)

  • 最新
  • 精选
  • cricket1981
    Beam Pipeline的合并模式是否支持keyed join,inner/left outer/right outer/full outer都支持吗? 看上面的代码示例虽然是叫Joiner Pattern,实际效果却是Union。分离模式倒是跟flink的split/select算子组合很类似。

    作者回复: 你这个问题问的很好啊,beam的join的确没有sql的join那么丰富。这是因为性能的原因只提供最基本的join。和union是不一样的,union指的是column一样的时候叠起来。

    2019-06-26
    2
    4
  • 人唯优
    平台的自然语言理解(NLP)的数据处理模块可以分析视频数据,自动生成视频字幕。 感觉这里不是很严谨,字幕这块应该是OCR+ASR为主吧

    作者回复: 不管是OCR还是什么都是一种数据处理。我们这里的数据处理指的是一种抽象

    2019-08-21
    3
  • Ming
    我也有个小问题:在实践中一个集群往往同一时间只能执行一个pipeline吗?假如一个产品需要用到文中的全部四个例子,两个流处理两个批处理,实践中往往是有四个集群,还是一个集群?

    作者回复: 一个集群有可能同时执行两个pipeline的

    2019-06-26
    2
    2
  • 蒙开强
    老师你好,我问一个大数据相关的问题呢,在大数据处理场景中有没有什么好的CDC方案额。

    作者回复: CDC是什么?

    2019-06-26
    3
    1
  • 闫少伟
    PCollection userCollection = ...; PCollection diamondUserCollection = userCollection.apply("filterDiamondUserTransform", ParDo.of(new DoFn(){ @ProcessElement public void processElement(ProcessContext c) { if (isDiamondUser(c.element()) { c.output(c.element()); } }})); PCollection notifiedUserCollection = userCollection.apply("notifyUserTransform", ParDo.of(new DoFn(){ @ProcessElement public void processElement(ProcessContext c) { if (notifyUser(c.element()) { c.output(c.element()); } }})); 这里notifiedUserCollection ,是不是要用diamondUserCollection.apply呀?
    2022-05-24
    1
  • abc-web
    老师,你的课程是否有实际的实例代码,这样学习效果会更好些;
    2019-08-24
    1
  • JohnT3e
    老师,有几个问题不解。在复制或者分离模式下,每个处理和输出是不同步的吧,如果业务上对不同输出有同步要求时,怎么办?复制或者分离模式和组合模式进行组合时,上一步的输出不同步或者延迟较大会加大后续组合时数据业务时间乱序问题(特别是流处理)这时有解决办法吗或者其它思路
    2019-06-26
    1
  • juan
    @ProcessElement public void processElement(ProcessContext c) { if (isFiveStartMember(c.element())) { c.output(c.element()); // 忘了 starmemember ???c.output(fiveStartMemberTag,c.element()); } else if (isGoldenMember(c.element())) { c.output(goldenMembershipTag, c.element()); } else if (isDiamondMember(c.element())) { c.output(diamondMembershipTag, c.element()); } } })
    2019-07-03
收起评论
大纲
固定大纲
设计 Pipeline 的基本考虑因素
1. 输入数据存储在哪里?
2. 输入数据是什么格式?
3. 这个 pipeline 你打算对数据进行哪些操作?
显示
设置
留言
8
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部