0

我以前使用过 Pig 和 Hive,但对 Hadoop MapReduce 还是陌生的。我需要编写一个应用程序,它有多个小文件作为输入(比如 10 个)。它们有不同的文件结构,所以我想在不同的节点上并行处理它们,以便可以快速处理它们。我知道 Hadoop 的优势在于处理大数据,但这些输入文件虽然很小,但需要大量处理,所以我希望利用 Hadoop 的并行计算能力。这可能吗?

4

2 回答 2

0

简而言之:尝试一下NLineInputFormat

将所有输入文件复制到所有节点没有问题(如果您愿意,可以将它们放入分布式缓存)。您真正想要分发的是支票处理。

使用 Hadoop,您可以创建(单个!)格式为 (filename,check2run) 或 (filename,format,check2run) 的输入控制文件,并用于NLineInputFormat向您的节点提供指定数量的检查(mapreduce.input.lineinputformat.linespermap 控制行馈送到每个映射器)。

注意:Hadoop 输入格式决定了拆分的计算方式;NLineInputFormat(不像TextInputFormat)不关心块。

根据您检查的性质,您可能能够计算linespermap 值以覆盖一波映射器中的所有文件/检查(或者可能根本无法使用这种方法:))

于 2012-12-29T03:55:31.577 回答
0

这是可能的,但您可能不会获得太多价值。你有这些力量反对你:

混乱的输入

您需要编写一个可以处理所有不同输入格式的映射器(通过检测输入格式,或使用输入的文件名来决定期望的格式)

多个输出

您需要使用 Hadoop 的稍微复杂的多输出文件处理功能,或者将输出写为 reducer(或映射器,如果您可以确定每个文件将转到不同的节点)的副作用

初始化成本高

每个 hadoop map reduce 作业都伴随着高昂的启动成本,在小型集群上大约需要 30 秒,在大型集群上则更多。仅这一点可能会让你失去更多的时间,而不是你希望通过并行获得的时间。

于 2012-12-28T14:56:39.987 回答