【问题标题】:Which key class is suitable for secondary sort?哪个键类适合二次排序?
【发布时间】:2010-07-19 10:11:51
【问题描述】:

在 Hadoop 中,您可以使用辅助排序机制在将值发送到 reducer 之前对其进行排序。

在 Hadoop 中完成此操作的方式是将要排序的值添加到键中,然后使用一些自定义组和键比较方法挂钩到排序系统中。

因此,您需要有一个键,该键基本上由真正的键和要排序的值组成。为了使其执行得足够快,我需要一种创建组合键的方法,该组合键也很容易分解为组和键比较方法所需的单独部分。

最聪明的方法是这样做。是否有一个“开箱即用”的 Hadoop 类可以帮助我,还是我必须为每个 map-reduce 步骤创建一个单独的键类?

如果键实际上是由多个部分组成的组合(由于分区程序也需要单独),我该怎么做?

你们有什么推荐的?

附:我想添加标签“二级排序”,但我还没有足够的代表这样做。

【问题讨论】:

  • 你去(我添加了标签):-)
  • 感谢您添加标签 :)
  • 没完全明白你的问题,你介意添加一个简短的例子吗?

标签: java sorting hadoop mapreduce


【解决方案1】:

我一直遇到这种情况,并且厌倦了编写自定义复合键类。我写了一个通用的 Tuple 类,它是一个对象列表,可以作为一个复合键。该列表可能包含任意数量的 Java 原始包装类型的对象。它实现了 WritableComparable。源码可以看这里

https://github.com/pranab/chombo/blob/master/src/main/java/org/chombo/util/Tuple.java

【讨论】:

    【解决方案2】:

    我无法理解这个问题。我确实有一个工作副本 SecondarySort,它打印值列表中的最大值。

    https://github.com/kapild/hadoop-examples/tree/master/src/SecondarySort

    【讨论】:

      【解决方案3】:

      您需要更改键重新分区和分组的方式,这基本上意味着您将超过 1 种数据类型放入键中,完全覆盖了用于分区和分组的比较器方法....

      -你可以序列化/反序列化你的键,如果你想要强类型的、健壮的代码进行二次排序,你可以将输入数据作为对象或 bean 处理......

      -对于更简单的场景,只需在值之间加上“#”号!

      这里有一篇很棒的高级文章:

      http://pkghosh.wordpress.com/2011/04/13/map-reduce-secondary-sort-does-it-all/

      【讨论】:

        【解决方案4】:

        我有一种情况,我必须对两列上的数据进行排序,一个是字符串类型,另一个是整数类型。我编写了我的自定义 WritableComparable,并在 compareTo 方法中编写了我的逻辑。从我的角度来看,这实际上是一种最佳方式,因为我们可以自定义排序逻辑。

        【讨论】:

          猜你喜欢
          • 2021-02-13
          • 2016-01-04
          • 2020-09-12
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-03-16
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多