hadoop - 将合并器用于mapreduce二级排序

标签 hadoop mapreduce bigdata cloudera-cdh combiners

我已经为我的应用程序实现了二级排序。

File-1                          File-2                    File-3
------                          ------                    ------

name,pos,r,value           name,pos,r,value            name,pos,r,value

   aa,1,0,123                 aa,2,1,1                    aa,3,1,11
   bb,1,0,234                 aa,2,2,34                   aa,3,2,12
                              aa,2,3,55                   aa,3,3,13
                              bb,2,1,99                   bb,3,1,15
                              bb,2,2,54                   bb,3,2,19
                              bb,2,3,32                   bb,3,3,13

对于文件1中的每个记录,在文件2和文件3中将分别有三个记录。

复合键是:: name +(pos + r)

自然键是::名称

排序顺序基于组合键。基于(pos + r)的升序

预期输出为

特定名称(aa)的File1内容,其后是所有file2内容(三行aa,基于pos + r排序),然后是文件三内容(三行aa,基于pos +排序)

aa,123,1,34,55,11,12,13

bb,234,99,54,32,15,19,13

我已经使用setGroupingComparatorClass,setSortComparatorClass和自定义分区程序在二级排序中实现了此功能。

我的怀疑是:

1)如何为这种情况添加合并器。
  • 据我了解,分组和排序发生在
    所有 map 输出(基于
    自然键)转移到减少机器。

  • 2)如果添加了合并器,排序的方式和时间将发生,以便
    reduce函数以正确的顺序从所有映射器接收输出。
  • 将 map 输出排序两次,一次在执行的合并器中进行
    在每个映射之后,再在化简器端对所有组合器进行排序
    输出?
  • 最佳答案

    建议您好好经历
    http://bytepadding.com/big-data/map-reduce/understanding-map-reduce-the-missing-guide/

  • 在mapper上进行排序。
  • 合并(排序和合并)发生在 reducer 上。
  • Combiner是额外的一层,您尝试在Mapper上进行缩减。
  • 还原器始终接收给定键的所有给定值。
  • Mapper以排序方式发送给定键的值。

  • 请使自己了解码比较器和排序比较器,并适当使用它。

    关于hadoop - 将合并器用于mapreduce二级排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47431128/

    相关文章:

    java - 通过使用下面提到的以下命令来编译Java代码

    python - 如何剪切/拆分大Excel数据?

    java - 级联的wordcount Java任务抛出nullPointErexception

    hadoop - 带有查询的位置 Hive 日志 (Tez)

    apache-spark - 读取 Hive 表的空 Spark 数据集

    hadoop - 为什么在 Ambari 从 1.6.0 迁移到 2.0.0 时调用 hive Metatool updatelocation 以将位置移动到不需要的地方?

    sql - Impala 中的日期/字符串比较不起作用(总是返回 false)

    hadoop - Hadoop中的设置方法

    hadoop - 现实世界大数据开源应用示例

    hadoop - 在将文件提供给HDFS之前如何对其进行串联?