我想在hadoop多节点集群上实现自适应合并排序,以减少运行时间。但是到目前为止,我研究 map 并没有对其进行排序和分组。我的意思是, map 输出是reduce的输入,我们得到的 map 的输出已排序(如果我没记错的话)。那么如何实现自适应合并排序呢?我的意思是可能吗?
最佳答案
在map reduce程序中,如果要在map输出上应用on排序逻辑,以便reducer以某种排序顺序获取数据,则需要执行以下操作
例如,如果您有如下数据集
UserID,ApplicationId,Datetime
如果您想根据用户ID和日期时间对行进行排序
首先,您需要创建一个由userid和datetime组成的复合键类
其次,您需要编写排序比较器类,在其中需要编写排序逻辑
第三,您需要编写分组比较器类,在该类中,您要基于一个键而不是两个键来比较键的值,例如在此示例中,我们只希望仅将记录与userid分组。
第四,您需要创建分区类,在其中您需要编写逻辑以将相同用户ID的数据发送到相同的reducer。
最后,您需要在作业实例下设置所有类
job.setSortComparatorClass(YourSortComparator.class);
job.setGroupingComparatorClass(YourGroupingComparator.class);
job.setPartitionerClass(YourPartitioner.class);
关于sorting - 我如何使用mapreduce在hadoop集群上实现自适应mergesort,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43125581/