- MapReduce 教程
- MapReduce 工作原理
- MapReduce Mapper
- MapReduce Reducer
- MapReduce 键值对
- MapReduce InputFormat
- MapReduce InputSplit
- MapReduce RecordReader
- MapReduce Partitioner
- MapReduce Combiner
- MapReduce Shuffle 和排序
- MapReduce OutputFormat
- MapReduce InputSplit 与 HDFS 块
- MapReduce 只有 Map 阶段的 job
- MapReduce 数据本地化
- MapReduce 推测执行
- MapReduce 计数器
- MapReduce 性能优化
MapReduce Reducer
Reducer 获取 Mapper 的输出数据( 键值对 ),并对这些数据逐个处理,最终把最终处理结果存储到 HDFS。通常在 Hadoop 的 Reducer 阶段,我们会做聚合计算、求和计算等操作。
什么是 Hadoop Reducer
Reducer 处理 mapper 的输出数据,在处理这些数据的时候,它会生成一组新的输出数据。最后把数据存储到 HDFS。
Hadoop Reducer 以 mapper 输出的中间结果(键值对)作为输入数据,并对这些数据逐一执行 reducer 函数,比如可以对这些数据做聚合、过滤、合并等操作。Reducer 首先按 key 处理键值对的值,然后生成输出数据(零或多个键值对)。key 相同的键值对数据将会进入同一个 reducer,并且 reducer 是并行执行的,因为 reducer 之间不存在依赖关系。reducer 的数量由用户自己决定,默认值是 1。
MapReduce Reducer 阶段
通过前面章节的介绍我们已经知道,Hadoop MapReduce 的 Reducer 过程包含 3 个阶段。下面对他们进行逐个详细介绍。
Reducer 的 Shuffle 阶段
在本阶段,来自 mapper 的已经排好序的数据将作为 Reducer 的输入数据。在 Shuffle 阶段,MapReduce 通过 HTTP 协议拉取 mapper 输出数据的相应分区数据。
Reducer 的排序阶段
在该阶段,来自不同 mapper 的输入数据将会按 key 重新做排序。shuffle 和排序阶段是同时进行的。
Reduce 阶段
在 shuffle 和排序完成之后,reduce 任务对键值对数据做聚合操作。之后,OutputCollector.collect() 方法把 reduce 任务的输出结果写到 HDFS。Reducer 的输出不做排序。
Reducer 任务的数量
一个作业的 Reduce 任务数量是怎么确定的呢?以及如何修改 Reduce 数量?下面我们带着问题来详细了解一下。
我们可以通过 Job.setNumreduceTasks(int) 方法设置 reduce 的数量。一般合适的 reduce 任务数量可以通过下面公式计算:
(0.95 或者 1.75) * ( 节点数 * 每个节点最大的容器数量)
使用 0.95 的时候,当 map 任务完成后,reducer 会立即执行并开始传输 map 的输出数据。使用 1.75 的时候,第一批 reducer 任务将在运行速度更快的节点上执行完成,而第二批 reducer 任务的执行在负载平衡方面做得更好。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论