如何根据Map器输出大小动态设置缩减器的数量?

x3naxklr  于 2021-06-04  发布在  Hadoop
关注(0)|答案(3)|浏览(265)

我知道可以通过将mapred.min.split.size设置为dfs.block.size,根据我的dfs拆分大小设置Map器的数量。
类似地,如何根据Map器输出大小设置还原器的数量?
ps:我知道下面的选项可以用来操纵减速机的数量。mapred.tasktracker.reduce.tasks.最大mapred.reduce.tasks

8fq7wneg

8fq7wneg1#

如果要通过命令行动态设置Map器和还原器的数量::可以使用以下选项:
-d mapred.map.tasks=5-d mapred.reduce.tasks=5
我们还可以在驱动程序代码中设置Map器和还原器的数量:job.setnummaptasks();job.setnumreducetasks();
我不认为在map reduce作业启动后,您可以动态更改reducer的数量。据我所知,在作业运行期间,不会有提供值的交互。应该预先配置它。map reduce作业是一个批处理过程(运行时间很长),因此用户很难知道它何时会要求用户提供减速机的数量,而且在这个过程中它不是设计为交互式的!!希望你得到答案!!

6qftjkof

6qftjkof2#

要动态设置任务数:
Map的数量通常由输入文件中dfs块的数量驱动。尽管这会导致人们调整他们的dfs块大小来调整Map的数量。
因此,在下面的代码中,让我们动态设置reducer任务的数量,以便在运行时根据map任务的数量进行调整。
在java代码中:

long defaultBlockSize = 0;
int NumOfReduce = 10; // you can set anything
long inputFileLength = 0;
try {
    FileSystem fileSystem = FileSystem.get(this.getConf()); // hdfs file
                                                            // system
    inputFileLength = fileSystem.getContentSummary(
            new Path(PROP_HDFS_INPUT_LOCATION)).getLength();// input
                                                            // file or
                                                            // files
                                                            // stored in
                                                            // hdfs

    defaultBlockSize = fileSystem.getDefaultBlockSize(new Path(
            hdfsFilePath.concat("PROP_HDFS_INPUT_LOCATION")));// getting
                                                                // default
                                                                // block
                                                                // size
    if (inputFileLength > 0 && defaultBlockSize > 0) {
        NumOfReduce = (int) (((inputFileLength / defaultBlockSize) + 1) * 2);// calculating
                                                                                // no.
                                                                                // of
                                                                                // blocks
    }
    System.out.println("NumOfReduce : " + NumOfReduce);
} catch (Exception e) {
    LOGGER.error(" Exception{} ", e);
}

job.setNumReduceTasks(NumOfReduce);
af7jpaap

af7jpaap3#

作业提交后不能设置减速器的数量。这样想吧-partitioner在mapper输出上被调用,它不需要知道要划分的缩减器。

相关问题