【问题标题】:how can I implement adaptive mergesort on hadoop clustering using mapreduce如何使用 mapreduce 在 hadoop 集群上实现自适应归并排序
【发布时间】:2017-08-24 20:01:11
【问题描述】:

我想在 hadoop 多节点集群上实现自适应合并排序,以减少运行时间。但就我所做的研究而言,地图本身会进行排序和分组。我的意思是 map 输出是 reduce 的输入,我们得到的 map 输出是排序的(如果我没记错的话)。那么如何实现自适应归并排序呢?我的意思是有可能吗?

【问题讨论】:

  • 您需要使用二次排序在地图输出上添加您的排序逻辑,您可以关注this link
  • 谢谢你的回应。我在 java 中编写了一个自适应合并排序。我可以在 hadoop 中运行它吗?实际上我不明白如何将代码 cnvrt 转换为 mapreduce 而 map 进行排序。
  • 请在下方回答我的 cmets

标签: sorting hadoop dictionary merge reduce


【解决方案1】:

在 map reduce 程序中,如果您想在 map 输出上应用排序逻辑,以便 reducer 以某种排序顺序获取数据,您需要执行以下操作

  1. 选择您的复合键
  2. 设置排序比较器类
  3. 设置分组比较器类
  4. 设置分区类

例如,如果您有如下数据集

用户ID、应用程序ID、日期时间

如果你想根据用户 ID 和日期时间对行进行排序

首先你需要创建一个由用户ID和日期时间组成的组合键类

其次,您需要编写排序比较器类,您需要在其中编写排序逻辑

第三,您需要编写分组比较器类,在该类中您希望基于其中一个键而不是基于两个键来比较键的值,就像在此示例中我们只想将记录与用户 ID 进行分组一样。

第四,您需要创建分区类,您需要在其中编写逻辑以将相同用户ID的数据发送到相同的reducer。

最后你需要设置作业实例下的所有类

job.setSortComparatorClass(YourSortComparator.class);
job.setGroupingComparatorClass(YourGroupingComparator.class);
job.setPartitionerClass(YourPartitioner.class);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-01
    • 2016-03-11
    • 2021-09-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多