之前我使用过Pig和Hive,但我是Hadoop MapReduce的新手。我需要编写一个具有多个小型文件作为输入的应用程序(比如10)。它们具有不同的文件结构,因此我希望在不同的节点上并行处理它们,以便可以快速处理它们。我知道Hadoop的优势在于处理大数据,但这些输入文件虽然很小,但需要大量处理,所以我希望利用Hadoop的并行计算能力。这可能吗?
答案 0 :(得分:0)
这是有可能的,但你可能不会得到太多的价值。你有这些力量对你不利:
您需要编写一个可以处理所有不同输入格式的映射器(通过检测输入格式,或使用输入的文件名来决定期望的格式)
您需要使用Hadoop稍微棘手的多输出文件处理功能,或者将输出编写为reducer的副作用(如果您可以确定每个文件将转到不同的节点,则为mapper)
每个hadoop map减少工作都需要大量的启动成本,在小型集群上大约需要30秒,在更大的集群上需要更多。仅此一点可能会失去你所希望通过并行获得的更多时间。
答案 1 :(得分:0)
简而言之:尝试NLineInputFormat
。
将所有输入文件复制到所有节点没有问题(如果愿意,可以将它们放到分布式缓存中)。你真正想要分发的是支票处理。
使用Hadoop,您可以以(filename,check2run)或(filename,format,check2run)格式创建(单个!)输入控制文件,并使用NLineInputFormat
向节点提供指定数量的检查(mapreduce。 input.lineinputformat.linespermap控制每个映射器的行数。
注意:Hadoop输入格式决定了如何计算拆分; NLineInputFormat
(与TextInputFormat
不同)并不关心块。
根据检查的性质,您可以计算linepermap值以涵盖一波映射器中的所有文件/检查(或者可能根本无法使用此方法:))