我知道可以通过将mapred.min.split.size设置为dfs.block.size,根据我的dfs拆分大小设置Map器的数量。类似地,如何根据Map器输出大小设置还原器的数量?ps:我知道下面的选项可以用来操纵减速机的数量。mapred.tasktracker.reduce.tasks.最大mapred.reduce.tasks
8fq7wneg1#
如果要通过命令行动态设置Map器和还原器的数量::可以使用以下选项:-d mapred.map.tasks=5-d mapred.reduce.tasks=5我们还可以在驱动程序代码中设置Map器和还原器的数量:job.setnummaptasks();job.setnumreducetasks();我不认为在map reduce作业启动后,您可以动态更改reducer的数量。据我所知,在作业运行期间,不会有提供值的交互。应该预先配置它。map reduce作业是一个批处理过程(运行时间很长),因此用户很难知道它何时会要求用户提供减速机的数量,而且在这个过程中它不是设计为交互式的!!希望你得到答案!!
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);
af7jpaap3#
作业提交后不能设置减速器的数量。这样想吧-partitioner在mapper输出上被调用,它不需要知道要划分的缩减器。
3条答案
按热度按时间8fq7wneg1#
如果要通过命令行动态设置Map器和还原器的数量::可以使用以下选项:
-d mapred.map.tasks=5-d mapred.reduce.tasks=5
我们还可以在驱动程序代码中设置Map器和还原器的数量:job.setnummaptasks();job.setnumreducetasks();
我不认为在map reduce作业启动后,您可以动态更改reducer的数量。据我所知,在作业运行期间,不会有提供值的交互。应该预先配置它。map reduce作业是一个批处理过程(运行时间很长),因此用户很难知道它何时会要求用户提供减速机的数量,而且在这个过程中它不是设计为交互式的!!希望你得到答案!!
6qftjkof2#
要动态设置任务数:
Map的数量通常由输入文件中dfs块的数量驱动。尽管这会导致人们调整他们的dfs块大小来调整Map的数量。
因此,在下面的代码中,让我们动态设置reducer任务的数量,以便在运行时根据map任务的数量进行调整。
在java代码中:
af7jpaap3#
作业提交后不能设置减速器的数量。这样想吧-partitioner在mapper输出上被调用,它不需要知道要划分的缩减器。