我有一个MapReduce作业,它由包含多行记录的单个输入文件组成。每个记录需要时间的相当数量的时间进行处理。因此,我的输入文件(尽管其大小可能是远小于HDFS块大小)在单个节点上执行时需要大量时间。在节点之间均匀分配重量级任务
如何告诉Hadoop在节点之间均匀有效地分割输入文件?这样即使输入文件很小,它仍然被分成几个并行执行的任务。
另外,我们可以告诉hadoop将文件拆分成N个任务,其中N是可用节点的数量?
谢谢!
编辑: 为了更加清晰,我想要做的是类似于以下内容。我有很多大文件。我有一个外部程序将处理每个文件。每个文件都需要大量时间来处理。
因此,我将文件的文件名存储在输入文件中,然后我希望Hadoop均匀地分割它。然后在映射器中,我将与ID对应的文件复制到本地计算机并调用程序。
对不起,我的意思是“每个记录**需要**相当长的时间才能处理”。所以基本上每个记录都是存储在其他地方的“某些东西”的ID,处理这个“东西”需要很长时间。我想要有效地并行处理所有“事物”,因此是问题。 – fushar
所以你可以用它的ID来聚合这些“东西”并将它们存储在HDFS上,这会给你一个更大的文件,Hadoop知道如何处理大文件 – darkjh
我同意@darkjh。但是,为了让自己清楚,为什么当你的实际目标是处理与该记录(ID)相关的“某事”时,你担心“记录(ID)”? – Tariq