有没有可能根据文件的数量来判断所使用的Map器/还原器的数量?

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

我想知道是否有可能告诉数量的Map器/还原器使用(默认)的基础上,文件的数量?
我知道Map器的数量取决于块大小而不是实际的文件大小,但我想确定我是否遗漏了任何东西。
例如:
如果hdfs中有4个目录,其中包含4个文件。

dir1/file1 - contains (testing file 1, testing again)
dir2/file2 - contains (testing file 2, testing again)
dir3/file3 - contains (testing file 3, testing again)
dir4/file4 - contains (testing file 4, testing again)

有没有一种方法可以告诉有多少Map器和还原器将被用来处理上述四个文件?

bzzcjhmw

bzzcjhmw1#

Map器的数量取决于拆分的数量,但是如果文件小于拆分大小,则每个文件将对应一个Map器。这就是不建议使用大量小文件的原因
确定属性以确定拆分大小,默认值如下

mapred.min.split.size=1 (in bytes)
  mapred.max.split.size=Long.MAX_VALUE
  dfs.block.size=64 MB

拆分大小计算为

inputSplitSize=max(minimumSize, min(maximumSize, blockSize))

  # of mappers= totalInputSize/inputSplitSize

reducer的数量取决于-d mapred.reduce.tasks=#reducers参数。javaapi将尝试导出您将需要的缩减器的数量,但是您也可以显式地设置它。在这两种情况下,每个节点可以运行的缩减器的数量都有一个硬性限制,这是在mapred-site.xml配置文件中使用mapred.tasktracker.reduce.tasks.maximum设置的
默认值

mapred.reduce.tasks=1
  mapred.tasktracker.reduce.tasks.maximum=2

这里有一个关于ApacheWiki上Map器和还原器数量的很好的参考http://wiki.apache.org/hadoop/howmanymapsandreduces

a0x5cqrl

a0x5cqrl2#

Map器的数量取决于文件的数量、hdfs块大小属性和 mapred.min.split.size 属性,该属性确定实际拆分文件所需的最小大小。
假设你有两个输入文件,每个128mb,
如果hdfs块大小是128mb,那么您将生成2个Map器(独立于最小拆分大小)。
如果hdfs块大小实际上小于文件大小(比如说32mb),那么它也将取决于最小分割大小。如果它小于hdfs块大小,则每个文件将生成4个Map器,而如果它更大(例如64 mb),则将根据该值拆分文件,因此每个文件将生成2个Map器。
然而,减速机的数量几乎完全取决于您(因为您可以通过 setNumReduceTasks 方法)。

相关问题