2

我正在阅读Apache Crunch documentation并发现以下句子:

数据以流方式从文件系统中读取,因此不需要 PCollection 的内容适合内存,即可使用物化将其读入客户端。

我想知道什么read in from the filesystem in a streaming fashion意思,如果有人能告诉我与其他读取数据的方式有什么区别,我将不胜感激。

我想说这个概念也适用于其他工具,例如 Spark。

4

1 回答 1

2

假设您的文件系统上有一个英文文件,您需要将其翻译成德语。你基本上有两个选择。您可以将整个英文文件作为一个大批处理加载到内存中,一次翻译整个批处理,然后将新的德语批处理写回文件系统。

或者你可以逐行进行。用英文阅读第一行;翻译成德语并写入新文件;阅读第二行英文并翻译成德文并附加到新文件中;等等。

后一种方法类似于 Apache Crunch 文档中描述的流方法。

PCollectionCrunch 而言就像RDD对 Spark 一样——框架的基本分布式数据抽象,但 Crunch 在更高的抽象级别上运行。它旨在为跨技术的数据管道提供一个很好的 API。

例如,您可能在 Hive 中有您有可靠查询的数据;这些查询的输出用作在 HBase 中存储数据的传统 MapReduce 作业的输入;这些数据由 Spark 的 MLLib 机器学习库进行分析,结果最终交给 Cassandra。Crunch 试图通过PCollection抽象将所有这些都集中起来,但它的流式方法意味着您不必等待一项工作完成后再开始下一项工作。就像逐行文件翻译一样,您一次处理一个位,并将每个位移动到管道的每个阶段——而不是分批进行。

你说得对,流的概念适用于 Spark 之类的工具(最明显的是 Spark Streaming),但正如我所提到的,Spark 的工作抽象级别比 Crunch 低。Spark 作业可能只是 Crunch 管道的一部分。但流媒体确实是一个强大的范例。它是Jay Kreps(前身为 LinkedIn,现为 Confluent 的先驱,Apache Kafka的先驱)设计的Kappa 架构的基础,是 Nathan Marz(前身为 Twitter)设计的基于批处理的Lambda 架构的更简单但更强大的替代方案。

最后,选择是在抽象级别(Crunch 比 Spark 更高)和一次操作一批或逐位操作之间进行选择。

于 2017-04-27T05:07:26.057 回答