笔记《数据算法Hadoop/Spark。。。》1.二次排序

二次排序问题是指在归约阶段对其中一个键关联的值排序。有时这也称为值键转换。利用二次排序技术,可以对传入各个归约器的值完成(升序或降序)排序。
首先,我们会重点介绍MapReduce/Hadoop解决方案:

    map(key1,value1)-----list(key2,value2)

    reduce(key2,list(value2))-----list(key3,value3)

首先,map()函数接收一个键-值对输入(key1,value1).然后它会输出任意数目的键-值对(key2,value2)。接下来,reduce()函数接收另一个键-值对(key2,list(value2))作为输入,并输出任意数目的键-值对(key3,value3)。
现在考虑下面的键-值对(key2,list(value2)),这会作为归约器的输入:

    list(value2)=(V1,V2,....,Vn)

这里,归约器值(V1,V2,...,Vn)是无序的。
二次排序模式的目标就是让归约器接收的值有一种顺序。这样一来,对MapReduce范式应用这种模式时,就可以得到:

    SORT(V1,V2,...,Vn)=(S1,S2,...,Sn)

    list(value2)=(S1,S2,...,Sn)

在这里:

    S1<S2<...<Sn(升序),或

    S!>S2>...>Sn(降序)

二次排序问题解决方案:

  • 1.使用值键转换模式:构造一个组合中间键(K,V1),其中V1是次键。在这里,K称为自然键。要在归约器键中注入一个值(即V1),只需要创建一个组合键。
  • 2.让MapReduce执行框架完成排序(而不是在内存中排序,要让框架使用集群节点来完成排序)。
  • 3.保留多个键-值对的状态来完成处理,可以利用适当的映射器输出分区器来实现这一点。

实现细节

  • 要实现二次排序特征,还需要另外一些Java插件类。我们要告诉MapReduce/Hadoop框架:
  • 如何对归约器键排序
  • 如何对传入归约器的键分区(定制分区器)。
  • 如何对到达各个归约器的数据分组。
#笔记##读书笔记#
全部评论
【求救】机器学习笔试题_技术交流_牛客网  https://www.nowcoder.com/discuss/87027
点赞 回复
分享
发布于 2018-07-19 14:06

相关推荐

点赞 3 评论
分享
牛客网
牛客企业服务