我正在考虑建立一个小测试的应用程序在hadoop获得挂起的系统。

该应用程序,我已经在心将在该领域做的统计数据。我想要有"10个最糟糕的价值为每一个关键"从我的器的功能(这里我必须假设的可能性的一个巨大的数值对于一些按键)。

我有什么计划是值得去为我减速将基本上可以结合"实际值"和"优质/有关的实际价值"。根据有关我"只是"想要采取的最糟糕的10/最好的价值观和输出它们的减速。

我怎么去做,(假定一个巨大的数值,用于一个特定关键的)?有没有办法,我可以排序的所有价值观之前,他们被送入减速(和停止阅读在输入时我已经阅读的第一个10)或必须这样做有什么不同?

有人可以在这点我一块例码我可以看看?


更新:我找到两个有趣的Jira问题 HADOOP-485HADOOP-686.

任何人都有一个代码碎片有关如何使用这在你可以使用以下几种方0.20API?

有帮助吗?

解决方案

这听起来像你想使用一个组合,其定义是做什么用的价值观你的创建在地图上的边之前他们被送到的减速,但是之后他们被分组通过的关键。合并器经常被设定只可减速级(以减少在地图上侧,然后再次减少侧)。

看一看如何wordCount例如采用组合预算的部分计数:

http://wiki.apache.org/hadoop/WordCount


更新 这里就是我想对于你的问题;这是可能的,我误会了你试图要做的,虽然。

每映射器发射 <key, {score, data}> 对。

组合到一个部分集的这些对: <key, [set of {score, data}> 和一个当地的排序(还在上映射器节点),并且输出 <key, [sorted set of top 10 local {score, data}]> 对。

减速将获得的 <key, [set of top-10-sets]> -所有的它都有要做的就是执行合并的步骤排序合并(没有排序的需要)为每个成员的价值的集和阻止合并在第10值都拉。


更新2

所以,现在,我们知道,列为cumilative和结果,你不能过滤数据尽早通过使用合成器,唯一的事情就是做什么你的建议--得到一次排下去。你已经找到了正确的机票;有一个例子如何做到这一Hadoop20src/examples/org/apache/hadoop/examples/SecondarySort.java (或者,如果你不想下载整个来源的树,你可以看看如补丁 https://issues.apache.org/jira/browse/HADOOP-4545 )

其他提示

听起来确实像个SecondarySortProblem.看看到"Hadoop:明确的指导",如果你喜欢。这是O'Reilly.你还可以访问网上。在那里,他们描述了一个很好的执行。

我实现了它通过自己了。基本上它的工作原理是这样的:该分区程序将照顾所有关键价值的-对具有相同的密钥要一个单一的减速。没有什么特别在这里。但也有GroupingComparator,这将形成集团。一个集团实际上是通过作为一个迭代的一个减少()-呼叫。因此,一个分区都可以包含多个团体。但是该数额的分区应该以平等的数量的减速器。但是该分组还可以做一些分类,因为它实现了一个compareTo-方法。

用这种方法,你可以控制的,这10个最好/最糟糕/最高/低但是钥匙将达到减第一次。以后你读这10钥匙,你可以离开了降低的方法没有任何进一步迭代。

希望这是有用:-)

如果我理解这个问题正确,则需要使用一个 TotalOrderPartitioner.

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top