sorting - 我如何使用mapreduce在hadoop集群上实现自适应mergesort

标签 sorting hadoop dictionary merge reduce

我想在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/

    相关文章:

    hadoop - 修复 HBase 表(过渡中未分配区域)

    python - 将字符串列表转换为字典列表 python

    python - 如果来自 Python 字典的子类,LRU 缓存不可散列类型

    c - C语言中分数升序排列

    javascript - 为什么我无法对 firebase 查询返回的日期数组进行排序?

    python - 对包含元组 python 的列表列表中的项目进行分组

    c++ - 我如何使用 C++ STL Sort 对具有继承的对象数组进行排序

    python - java.lang.OutOfMemoryError : Unable to acquire 100 bytes of memory, 得到 0

    hadoop - 在 AWS EMR 中重启 Oozie

    python - 将字典中的错误附加到数据框