我正在阅读Apache Crunch documentation
,我找到了以下句子:
数据以流方式从文件系统读入,所以存在 不要求PCollection的内容适合内存 使用实现方法将其读入客户端。
我想知道read in from the filesystem in a streaming fashion
的含义,如果有人能告诉我其他人阅读数据的方式有何不同,我会非常感激。
我想说这个概念也适用于其他工具,例如Spark。
答案 0 :(得分:2)
假设您的文件系统中有一个英文文件,您需要将其翻译为德语。你基本上有两个选择。您可以将整个英文文件作为一个大批量加载到内存中,一次翻译整个批次,然后将新的德语批次写回文件系统。
或你可以逐行完成。阅读第一行英文;翻译成德语并写出新文件;阅读第二行英文并翻译成德文并附加到新文件;等等。
后一种方法类似于Apache Crunch文档中描述的流式方法。
PCollection
是Crunch RDD
对Spark的影响 - 框架的基本分布式数据抽象,但Crunch在更高的抽象层运行。它旨在为跨技术的数据管道提供一个很好的API。
例如,您可能在Hive中拥有可靠查询的数据;这些查询的输出用作存储HBase中数据的传统MapReduce作业的输入;这些数据由Spark的MLLib机器学习库进行分析,结果最终归结为Cassandra。 Crunch试图通过PCollection
抽象来管理所有这些,但它的流式方法意味着你不必等待一个工作在下一个工作开始之前完成。就像逐行文件转换一样,您可以一次处理一个位并将每个位移动到管道的每个阶段 - 而不是分批完成。
你是对的,流媒体的概念适用于像Spark这样的工具(最明显的是使用Spark Streaming),但正如我所提到的,Spark的工作抽象级别低于Crunch。 Spark作业可能只是Crunch管道的一部分。但流媒体确实是一种强有力的范例。它是由Jay Kreps(以前的LinkedIn和现在的汇合,先驱Kappa Architecture)设计的Apache Kafka的基础,是基于批量Lambda Architecture设计的更简单但更强大的替代方案作者:Nathan Marz(以前的Twitter)。
最后,选择是在抽象级别(Crunch高于Spark)之间以及在一次操作一个批次或逐位操作之间。