2014-06-25 17 views
2

我想知道是否有可能根据文件数量来判断使用的mappers/reducer的数量(默认情况下)?是否可以根据文件数来判断使用的映射器/缩减器的数量?

我知道mapper的数量取决于块的大小,而不是实际的文件大小,但要确保如果我在那里丢失任何东西。

对于前:

如果有4个目录以在其中4个文件HDFS。

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) 

有没有办法告诉多少映射器和减压器将用于处理上述四个文件?

回答

5

映射器的数量取决于拆分的数量,但是如果文件小于拆分大小,则每个文件将对应一个映射器。这是不推荐

确定性质来决定分割大小和原因,大量的小文件有默认值如下

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 

数计算减速器取决于-D mapred.reduce.tasks =减速器参数的数量。 Java API将尝试派生你需要的reducer的数量,但是你也可以明确地设置它。在这两种情况下,对可以在每个节点运行减速的数量硬工资帽,并且在您mapred-site.xml中的配置文件使用mapred.tasktracker.reduce.tasks.maximum

默认值

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

这里是关于减速映射器的数目和一个不错的基准上的apache维基http://wiki.apache.org/hadoop/HowManyMapsAndReduces

+0

因此,如果我不设置任何减速器的值,将为4个映射器调用多少个减速器?默认情况下是1? – Learner

+0

用默认值和其他相关信息更新了答案。是的,如果你没有明确设置,那么它会是1 – dpsdce

1

映射器的数量取决于文件的数量,HDFS块大小属性和mapred.min.split.size属性,它确定的最小尺寸分割需要是为了使文件实际分割。

比方说,你有两个输入文件,每个文件128MB,

如果HDFS块大小为128 MB,那么你将产生2名映射器(独立于min分流大小)。

如果hdfs块大小实际上小于文件大小(比如32 Mb),那么它也将取决于您的最小分割大小。如果它小于hdfs块的大小,则会生成每个文件4个映射器,而如果它更大(例如64 Mb),则会根据此值拆分文件,因此会生成每个文件2个映射器。

但是,还原剂的数量几乎完全取决于您(因为您可以通过setNumReduceTasks方法设置准确的还原剂数量)。

相关问题