29 | 如何测试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
《大规模数据处理实战》,新⼈⾸单¥59
立即购买
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
登录 后留言
全部留言(6)
- 最新
- 精选
- 李孟聊AIBeam 有类似sparksql的api吗?
作者回复: 谢谢你的提问!有Beam SQL,不过现在只支持Java。
2019-07-08 - 明翼我期望是基于spark或flink讲解的重实践思想,轻知识,这个可以自己下去学2019-07-027
- JustDoDT看来我得先去学学Java了,不会java,看不太懂。2019-09-102
- Ming我觉得测试的话,相对麻烦的地方还是在工程脚手架的设计上。 显然代码本身要抽象封装好,确保测试能覆盖生产代码,而不是生产代码的“拷贝”。 但有些在代码之外的问题让我挺好奇的: 如何保证测试数据的格式和生产数据的格式同步? 流处理的测试怎么模拟时间? 团队是如何在流程上确保pipeline必须经过测试才能运行的,是通过CI/CD来自动执行pipeline?还是往往通过人力把关?2019-06-302
- 之渊我觉得挺好的,对于我们新手来说很友好。 谁都是从新手过来的,感谢大佬对新手的支持。 代码示例: https://gitee.com/oumin12345/daimademojihe/tree/master/cloudx/bigdata/src/main/java/test/beam2020-08-22
- 杰洛特TestClass 里的这个 PCollection<String> output = input.apply(ParDo.of(new EvenNumberFn())); 里面的泛型是不是写错了?偶数是 Integer 吧?2019-11-141
收起评论