0

我正在处理目录中的一组文件,这是另一个任务的输出。我需要一次处理整个文件的内容(计算 MD5 校验和并进行一些转换)。我不确定我的 Mapper 的签名应该是什么样子,如果我要做的话

class MyMapper extends Mapper<LongWritable, Text, NullWritable, NullWritable> { ... }

然后我将在map方法中获取输入文件的全部内容。这将存储在内存中,但文件可能非常大。

有没有办法不将完整的“记录”读入内存以供 Hadoop 映射任务处理,而是获取记录的“流”?

4

1 回答 1

0

你实际上不需要担心它。Hadoop 经过优化,可以利用集群的所有资源来完成工作。它的全部意义在于抽象出所有这些的低级细节,让您专注于您的用例。

我向您保证 Hadoop 可以处理您的文件。如果它们真的很大和/或您的集群的机器功能较弱或不可靠,那么这些作业可能需要更长的时间。但他们不会失败(没有任何其他错误)。

所以我认为你的方法很好。我要提出的唯一建议是考虑避免使用规范的 MapReduce,因为它的抽象级别不够高。请考虑使用CascadingJCascalog

于 2013-10-21T00:03:35.420 回答