2016-06-29 180 views
1

我有一个使用少量数据(200 MB)的Mapreduce作业。地图阶段计算简单,但缩小阶段的计算量很大,需要花费更多的时间来分析一个输入。给定32 MB的分割大小,我发现在映射阶段所有机器都在计算,但在缩小阶段只有一个是,而缩小阶段要慢得多。有没有一种方法可以使分割更小,仅用于缩小作业阶段,以便我可以将所有机器用于缩小阶段?hadoop减少拆分大小

+0

您的制图人员制作了多少个关键组? –

+0

@BinaryNerd我怎么知道? – user4052054

+0

看看你的工作柜台,它是一个标准柜台。你也应该知道你的关键是什么,以及你期望它的粒度。例如,如果您有一个键,则只会运行一个缩减器。 –

回答

1

分割大小不会影响并行度的降低。它只会推动mappers的数量。

的MapReduce任务,您可以指定减速机使用的数量。您可以将mapreduce.job.reduces属性设置为默认值1,也可以使用Job.setNumReduceTasks(int tasks)see javadoc)。在这里,你想增加这个数字。

更高层次的工具(如Apache Crunch)会根据输入大小,提供的比例因子和每个Reducer的目标输入大小自动设置Reducer的数量。如果一些任务的硬编码不符合您的需求,您可以轻松实施类似的策略。