当前位置: 首页 > 面试题库 >

Map-Reduce中的二级排序

全卜霸
2023-03-14
问题内容

我了解在密钥进入化简器之前对特定密钥的值进行排序的方式。我了解到,可以通过编写三种方法来完成此工作,即键比较器,分区器和值分组。

现在,当值分组运行时,它基本上将与自然键关联的所有值分组,对吗?因此,当它对自然键的所有值进行分组时,将与一组排序后的值一起发送给reducer的实际键是什么?自然键将与一种以上类型的实体(复合键的第二部分)相关联。组合密钥将被发送到减速器什么?

ap


问题答案:

知道这可能令人惊讶,但是值Iterable的每次迭代实际上也更新了键引用:

protected void reduce(K key, Iterable<V> values, Context context) {
    for (V value : values) {
        // key object contents will update for each iteration of this loop
    }
}

我知道这适用于新的mapreduce API,但我没有针对旧的mapred API进行追踪。

因此,在回答您的问题时,所有键都将可用,第一个键将与组中的第一个排序键相关。

编辑 :有关如何以及为什么这样工作的一些其他信息:

归约器使用两个比较器来处理map阶段输出的键/值对:

  • 密钥排序比较器-首先应用此比较器,并对所有KV对进行排序。从概念上讲,您仍在此阶段处理序列化的字节。
  • 密钥组比较器-该比较器负责确定上一个密钥和当前密钥何时“不同”,表示一组KV对与另一对KV对之间的边界

在幕后,对键和值的引用永远不会改变,每次对Iterable.Iterator.next()的调用都会将基础字节流中的指针前进到下一个KV对。如果密钥分组程序确定当前密钥字节集和先前密钥字节集是相对相同的密钥,则Iterable.iterator()值的hasNext方法将返回true,否则返回false。如果返回true,则将字节反序列化为Key和Value实例,以供您的reduce方法使用。



 类似资料:
  • 如果你读过Google的那篇大名鼎鼎的论文“MapReduce: Simplified Data Processing on Large Clusters”,你就能大概明白map/reduce的概念。 map 举例说明,比如我们有一个函数f(x)=x2,要把这个函数作用在一个数组[1, 2, 3, 4, 5, 6, 7, 8, 9]上,就可以用map实现如下: 由于map()方法定义在JavaSc

  • Python内建了map()和reduce()函数。 如果你读过Google的那篇大名鼎鼎的论文“MapReduce: Simplified Data Processing on Large Clusters”,你就能大概明白map/reduce的概念。 我们先看map。map()函数接收两个参数,一个是函数,一个是序列,map将传入的函数依次作用到序列的每个元素,并把结果作为新的list返回。

  • Python内建了map()和reduce()函数。 如果你读过Google的那篇大名鼎鼎的论文“MapReduce: Simplified Data Processing on Large Clusters”,你就能大概明白map/reduce的概念。 我们先看map。map()函数接收两个参数,一个是函数,一个是Iterable,map将传入的函数依次作用到序列的每个元素,并把结果作为新的It

  • 我是Hadoop和Map/reduce框架的新手。在进行第一个程序时,字数问题,我陷入了跟踪者的工作细节。Map/Reduce完成图代表什么?或者通俗地说,x,y轴上代表什么?

  • 我是Hadoop新手。我试图根据Apache hadoop站点上给出的示例创建一个hadoop集群。 然而,当我运行map reduce示例时,应用程序卡在map 100%和reduce 0%。 请帮忙 我已经设置了使用Vagrant和Virtual Box的环境。创建了两个实例。 yarn-site.xml

  • 在Map Reduce编程中,Reduce阶段包含了shuffling、sorting和Reduce三个子部分。分拣是一件代价高昂的事情。 Map Reduce编程中reducer中的洗牌和排序阶段的目的是什么?