Hadoop - 按键正确排序并按减速器分组
Hadoop - Properly sort by key and group by reducer
我有一些来自减速器的数据是这样的:
9,2 3
5,7 2
2,3 0
1,5 3
6,3 0
4,2 2
7,1 1
我想根据第二列的数字对它们进行排序。像这样:
2,3 0
6,3 0
7,1 1
5,7 2
4,2 2
1,5 3
9,2 3
当我在本地运行我的程序时,我使用:
sort -k2,2n
但我不知道如何在 Hadoop 上做同样的事情。我尝试了几个不起作用的选项,例如:
-D mapreduce.partition.keycomparator.options=-k2,2n
此外,我希望所有具有相同密钥的数据都在同一个减速器上。
所以在这种情况下:
2,3 0
和
6,3 0
应该由同一个reducer处理。
关于我应该在 hadoop 上使用的选项有什么想法吗?
提前致谢!
在作业的默认配置中,第一列是 reducer 结果的键,第二列是值。为了产生结果,reducer 正在处理具有相同键的所有记录。因此,在您的情况下,您需要 运行 一个额外的 mapreduce 作业。该地图会将第二列作为键,将第一列作为值。此作业将根据您的要求对数据进行分组。但是,如果您的数据量很小,则每个作业只设置一个减速器 -D mapred.reduce.tasks=1.
我有一些来自减速器的数据是这样的:
9,2 3
5,7 2
2,3 0
1,5 3
6,3 0
4,2 2
7,1 1
我想根据第二列的数字对它们进行排序。像这样:
2,3 0
6,3 0
7,1 1
5,7 2
4,2 2
1,5 3
9,2 3
当我在本地运行我的程序时,我使用:
sort -k2,2n
但我不知道如何在 Hadoop 上做同样的事情。我尝试了几个不起作用的选项,例如:
-D mapreduce.partition.keycomparator.options=-k2,2n
此外,我希望所有具有相同密钥的数据都在同一个减速器上。 所以在这种情况下:
2,3 0
和
6,3 0
应该由同一个reducer处理。
关于我应该在 hadoop 上使用的选项有什么想法吗?
提前致谢!
在作业的默认配置中,第一列是 reducer 结果的键,第二列是值。为了产生结果,reducer 正在处理具有相同键的所有记录。因此,在您的情况下,您需要 运行 一个额外的 mapreduce 作业。该地图会将第二列作为键,将第一列作为值。此作业将根据您的要求对数据进行分组。但是,如果您的数据量很小,则每个作业只设置一个减速器 -D mapred.reduce.tasks=1.