hadoop - 当调用 Apache Crunch 管道在两个不同的源上读取两次时会发生什么?
问题描述
拨打以下电话时:
PCollection<KeyValue> data1 = pipeline.read(source1);
PCollection<KeyValue> data2 = pipeline.read(source2);
PCollection<KeyValue> data3 = data1.union(data2);
根据 Apache Crunch 阅读文档,是否使用同一管道从两个源中读取数据,然后将数据连接在一起?
解决方案
Apache Crunch Pipeline 可以读取任意数量的源,然后您可以根据需要开始转换数据,例如 PCollections 联合,通过 DoFn 或 MapFn 传递源,以便使用 MapReduce 进行 Documents 对象组合等。
您需要记住的一件事是 Apache Crunch 与 Apache Spark 一样使用惰性执行模型,这意味着在您执行操作之前不会触发任何数据转换过程。下面我引用了Crunch 文档的一小部分讨论它。
Crunch 使用惰性执行模型。在用户显式调用 Pipeline 接口上控制作业计划和执行的方法之一之前,不会运行作业或创建输出。这些方法中最简单的是 PipelineResult run() 方法,它分析 PCollections 和 Target 输出的当前图并提出一个计划,以确保创建每个输出然后执行它,仅在作业完成时返回. run 方法返回的 PipelineResult 包含有关运行内容的信息,包括在管道运行期间执行的作业数量以及通过 StageResult 组件类为每个阶段执行的 Hadoop 计数器的值。
回答您的问题,是的,相同的管道将读取两个来源。
旁注:您可能希望只有一个管道用于数据转换。
推荐阅读
- flutter - 扩展一个小部件真的是一种反模式吗?
- sql - 以 YYYY-MM-DD 格式获取一年前的最后一天
- android - 我想编写一次代码并在多个平台(Windows、Linux、Mac、Android、iOS)上运行它。有没有与此相关的编程语言?
- javascript - 从 material-ui 的 TextField 打印 React 中的值
- sap-cloud-sdk - 如何在 SAP Cloud SDK Java 中调用本地 BAPI
- python - AttributeError: 'int' object has no attribute 'append' 我的列表有简单的问题
- perl - 如何使用 Test::More 在 perl 程序中测试 subs 而不会丢失程序退出代码?
- amazon-web-services - 自动删除旧的 AWS RDS 手动快照
- geoserver - 使用 OpenLayers 6 从 Geoserver 显示地图
- image - 将 SVG 图像复制到 Word 文件时出现问题