Apache Crunch管道两次读取不同数据源的执行逻辑及合并机制咨询
关于Apache Crunch多次调用read方法的执行逻辑解答
没问题,我来给你拆解这段代码的执行逻辑和Apache Crunch的read方法行为:
首先直接给结论:你的这段代码完全符合预期——它会在同一个Apache Crunch管道中读取两个不同的数据源source1和source2,随后将两者的数据合并为一个PCollection<KeyValue>(也就是data3)。
具体的执行细节和read方法的行为:
- read方法的本质:根据Apache Crunch的官方文档,
pipeline.read(source)是在当前管道实例的上下文内注册一个输入数据源,并不会创建新的管道,也不会拆分现有管道。Crunch的Pipeline本身就是整个数据处理流程的统一管理容器,所有的输入、转换、合并操作都隶属于这个容器。 - 延迟执行特性:Crunch采用的是延迟执行模型,你调用
read()和union()这些方法时,只是在构建作业的依赖图(DAG),并没有实际读取数据或者执行合并操作。只有当你调用pipeline.run()或者其他触发执行的方法时,整个作业才会真正启动。 - 代码的执行流程:
- 调用
pipeline.read(source1):向当前管道注册source1作为输入,生成代表该数据源数据的PCollection<KeyValue> data1 - 调用
pipeline.read(source2):同样在这个管道内注册source2作为另一个输入,生成data2 - 调用
data1.union(data2):在管道的依赖图中添加一个合并节点,将data1和data2的数据集合并为新的data3
- 调用
当你最终触发管道执行时,Crunch会将这些步骤整合成一个完整的作业,先并行读取两个数据源的数据,再执行合并操作,全程都在同一个管道上下文中完成。
内容的提问来源于stack exchange,提问作者Lulu Li
相关产品推荐
相关产品推荐

