我想在hadoop多节点集群上实现自适应合并排序,以减少运行时间。但就我所做的研究而言,Map本身就是分类和分组的。我的意思是Map输出是reduce的输入,我们得到的Map输出是排序的(如果我没有错的话)。那么如何实现自适应合并排序呢?我是说有可能吗?
ryevplcw1#
在map-reduce程序中,如果您想对map输出应用on排序逻辑,以便reducer以某种排序顺序获取数据,则需要执行以下操作选择复合密钥设置排序比较器类设置分组比较器类设置分区类例如,如果您有如下数据集用户ID、应用程序ID、日期时间如果要根据userid和datetime对行进行排序首先,您需要创建一个由userid和datetime组成的复合键类其次,您需要编写排序比较器类,在该类中您需要编写排序逻辑第三,您需要编写分组比较器类,在该类中,您希望根据其中一个键(而不是两个键)比较键的值,就像在本例中,我们只希望使用userid对记录进行分组。第四,您需要创建分区类,在该类中您需要编写逻辑来将相同用户id的数据发送到相同的reducer。最后,您需要设置作业示例下的所有类
job.setSortComparatorClass(YourSortComparator.class); job.setGroupingComparatorClass(YourGroupingComparator.class); job.setPartitionerClass(YourPartitioner.class);
1条答案
按热度按时间ryevplcw1#
在map-reduce程序中,如果您想对map输出应用on排序逻辑,以便reducer以某种排序顺序获取数据,则需要执行以下操作
选择复合密钥
设置排序比较器类
设置分组比较器类
设置分区类
例如,如果您有如下数据集
用户ID、应用程序ID、日期时间
如果要根据userid和datetime对行进行排序
首先,您需要创建一个由userid和datetime组成的复合键类
其次,您需要编写排序比较器类,在该类中您需要编写排序逻辑
第三,您需要编写分组比较器类,在该类中,您希望根据其中一个键(而不是两个键)比较键的值,就像在本例中,我们只希望使用userid对记录进行分组。
第四,您需要创建分区类,在该类中您需要编写逻辑来将相同用户id的数据发送到相同的reducer。
最后,您需要设置作业示例下的所有类