我的情况如下:我有两份mapreduce工作。第一个是mapreduce作业,它生成按键排序的输出。然后,第二个map-only作业将提取部分数据并收集它。我的第二份工作没有减速机。问题是我不确定是否只有map作业的输出将被排序,或者它将从map函数被洗牌。
s2j5cfk01#
不,正如zsxwing所说,除非指定reducer,否则不会进行任何处理,然后将在map端执行分区,并在reduce端执行排序和分组。
uurity8g2#
首先:如果您的第二个作业只包含一个筛选器来包含/排除特定的记录,那么您最好只将此筛选器添加到第一个作业的末尾。mapreduce的一个相当重要的事实是,reducer将以您无法控制的“某种方式”对记录进行排序。在编写作业时,应该假设记录是以随机顺序输出的。如果您真的需要以特定的顺序输出所有记录,那么将secondarysort机制与单个reducer结合使用是一种“简单”的解决方案,它的伸缩性不好。“硬”解决方案是“tera sort”基准所使用的。阅读这个问题,可以更深入地了解它是如何工作的:mapreduce排序算法是如何工作的?
2条答案
按热度按时间s2j5cfk01#
不,正如zsxwing所说,除非指定reducer,否则不会进行任何处理,然后将在map端执行分区,并在reduce端执行排序和分组。
uurity8g2#
首先:如果您的第二个作业只包含一个筛选器来包含/排除特定的记录,那么您最好只将此筛选器添加到第一个作业的末尾。
mapreduce的一个相当重要的事实是,reducer将以您无法控制的“某种方式”对记录进行排序。在编写作业时,应该假设记录是以随机顺序输出的。
如果您真的需要以特定的顺序输出所有记录,那么将secondarysort机制与单个reducer结合使用是一种“简单”的解决方案,它的伸缩性不好。“硬”解决方案是“tera sort”基准所使用的。阅读这个问题,可以更深入地了解它是如何工作的:mapreduce排序算法是如何工作的?