首页 > 解决方案 > 当调用 Apache Crunch 管道在两个不同的源上读取两次时会发生什么?

问题描述

拨打以下电话时:

    PCollection<KeyValue> data1 = pipeline.read(source1);
    PCollection<KeyValue> data2 = pipeline.read(source2);
    PCollection<KeyValue> data3 = data1.union(data2);

根据 Apache Crunch 阅读文档,是否使用同一管道从两个源中读取数据,然后将数据连接在一起?

标签: hadooppipelineapache-crunch

解决方案


Apache Crunch Pipeline 可以读取任意数量的源,然后您可以根据需要开始转换数据,例如 PCollections 联合,通过 DoFn 或 MapFn 传递源,以便使用 MapReduce 进行 Documents 对象组合等。

您需要记住的一件事是 Apache Crunch 与 Apache Spark 一样使用惰性执行模型,这意味着在您执行操作之前不会触发任何数据转换过程。下面我引用了Crunch 文档的一小部分讨论它。

Crunch 使用惰性执行模型。在用户显式调用 Pipeline 接口上控制作业计划和执行的方法之一之前,不会运行作业或创建输出。这些方法中最简单的是 PipelineResult run() 方法,它分析 PCollections 和 Target 输出的当前图并提出一个计划,以确保创建每个输出然后执行它,仅在作业完成时返回. run 方法返回的 PipelineResult 包含有关运行内容的信息,包括在管道运行期间执行的作业数量以及通过 StageResult 组件类为每个阶段执行的 Hadoop 计数器的值。

回答您的问题,是的,相同的管道将读取两个来源。

旁注:您可能希望只有一个管道用于数据转换。


推荐阅读