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

29 | 如何测试Beam Pipeline?

使用PAssert验证输出结果
调用所有Transforms操作
使用Create Transform
创建静态测试数据集
创建TestPipeline
验证输出结果
调用Transform处理逻辑
使用Create Transform创建PCollection
创建静态输入数据集
创建TestPipeline
DirectRunner
思考题
Beam的端到端测试
Beam的Transform单元测试
Beam提供的测试SDK
测试Beam Pipeline的重要性
如何测试Beam Pipeline

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

你好,我是蔡元楠。
今天我要与你分享的主题是“如何测试 Beam Pipeline”。
在上一讲中,我们结合了第 7 讲的内容,一起学习了在 Beam 的世界中我们该怎么设计好对应的设计模式。而在今天这一讲中,我想要讲讲在日常开发中经常会被忽略的,但是又非常重要的一个开发环节——测试。
你知道,我们设计好的 Beam 数据流水线通常都会被放在分布式环境下执行,具体每一步的 Transform 都会被分配到任意的机器上面执行。如果我们在运行数据流水线时发现结果出错了,那么想要定位到具体的机器,再到上面去做调试是不现实的。
当然还有另一种方法,读取一些样本数据集,再运行整个数据流水线去验证哪一步逻辑出错了。但这是一项非常耗时耗力的工作。即便我们可以把样本数据集定义得非常小,从而缩短运行数据流水线运行所需的时间。但是万一我们所写的是多步骤数据流水线的话,就不知道到底在哪一步出错了,我们必须把每一步的中间结果输出出来进行调试。
基于以上种种的原因,在我们正式将数据流水线放在分布式环境上面运行之前,先完整地测试好整个数据流水线逻辑,就变得尤为重要了。
为了解决这些问题,Beam 提供了一套完整的测试 SDK。让我们可以在开发数据流水线的同时,能够实现对一个 Transform 逻辑的单元测试,也可以对整个数据流水线端到端(End-to-End)地测试。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

Beam Pipeline测试是开发中的重要环节。文章介绍了如何在Beam中进行Pipeline的测试,强调了分布式环境下定位和调试问题的难度,以及传统样本数据集验证方法的不足。Beam提供了完整的测试SDK,推荐使用TestPipeline进行逻辑测试。文章详细介绍了Beam的Transform单元测试步骤,包括创建TestPipeline实例、创建静态输入数据集、使用Create Transform创建PCollection、调用Transform处理逻辑以及验证输出结果。此外,还提到了端到端测试的步骤,需要为所有输入数据集创建测试数据集,并使用PAssert类验证输出结果。最后给出了一个具体的Transform单元测试示例代码。通过本文,读者可以快速了解Beam Pipeline测试的重要性以及如何在Beam中进行Pipeline的测试。文章内容涵盖了Beam测试逻辑的两种方式,为读者提供了实用的技术指导。

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

全部留言(6)

  • 最新
  • 精选
  • 李孟聊AI
    Beam 有类似sparksql的api吗?

    作者回复: 谢谢你的提问!有Beam SQL,不过现在只支持Java。

    2019-07-08
  • 明翼
    我期望是基于spark或flink讲解的重实践思想,轻知识,这个可以自己下去学
    2019-07-02
    7
  • JustDoDT
    看来我得先去学学Java了,不会java,看不太懂。
    2019-09-10
    2
  • Ming
    我觉得测试的话,相对麻烦的地方还是在工程脚手架的设计上。 显然代码本身要抽象封装好,确保测试能覆盖生产代码,而不是生产代码的“拷贝”。 但有些在代码之外的问题让我挺好奇的: 如何保证测试数据的格式和生产数据的格式同步? 流处理的测试怎么模拟时间? 团队是如何在流程上确保pipeline必须经过测试才能运行的,是通过CI/CD来自动执行pipeline?还是往往通过人力把关?
    2019-06-30
    2
  • 之渊
    我觉得挺好的,对于我们新手来说很友好。 谁都是从新手过来的,感谢大佬对新手的支持。 代码示例: https://gitee.com/oumin12345/daimademojihe/tree/master/cloudx/bigdata/src/main/java/test/beam
    2020-08-22
  • 杰洛特
    TestClass 里的这个 PCollection<String> output = input.apply(ParDo.of(new EvenNumberFn())); 里面的泛型是不是写错了?偶数是 Integer 吧?
    2019-11-14
    1
收起评论
显示
设置
留言
6
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部