java—使用hadoop mapreduce在不同的节点上处理不同的文件

fdbelqdn  于 2021-06-03  发布在  Hadoop
关注(0)|答案(2)|浏览(438)

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

at0kjp5o

at0kjp5o1#

简而言之:试着 NLineInputFormat .
将所有输入文件复制到所有节点没有问题(如果愿意,可以将它们放入分布式缓存)。您真正想要分发的是检查处理。
使用hadoop,您可以创建(单个!)以(filename,check2run)或(filename,format,check2run)格式输入控制文件并使用 NLineInputFormat 向节点提供指定数量的检查(mapreduce.input.lineinputformat.linespermap控制向每个Map器提供的行数)。
注意:hadoop输入格式决定了分割的计算方式; NLineInputFormat (不像 TextInputFormat )不在乎积木。
根据检查的性质,您可能能够计算LinesEmap值以覆盖一个Map程序波中的所有文件/检查(或者可能根本无法使用此方法:)

sq1bmfud

sq1bmfud2#

这是可能的,但你可能不会得到太多的价值。你有这些力量来对付你:

输入混乱

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

多输出

您需要使用hadoop的稍微复杂的多输出文件处理功能,或者将您的输出作为reducer的一个副作用来编写(如果可以确保每个文件将转到不同的节点,则可以使用mapper)

初始化成本高

每一个hadoop map reduce作业都会带来巨大的启动成本,在一个小集群上大约需要30秒,在一个更大的集群上则需要更多时间。仅仅这一点就可能会让你损失比你所希望的更多的时间。

相关问题