Hadoop 中的 MapReduce 是什么? Archi结构与图表
Hadoop 中的 MapReduce 是什么?
MapReduce 是一种用于处理海量数据的软件框架和编程模型。MapReduce 程序分两个阶段运行,即 Map 和 Reduce。Map 任务负责拆分和归约。ping 在 Reduce 任务中,数据会进行重新排序和缩减。
Hadoop的 能够运行用各种语言编写的 MapReduce 程序: Java, 红宝石, Python和 C++MapReduce 程序本质上是并行的,因此非常适合使用集群中的多台机器执行大规模数据分析。
每个阶段的输入都是键值对。此外,每个程序员都需要指定两个函数:一个映射函数和一个归约函数。
映射简化 Archi大数据中的结构解释示例
整个过程分为四个执行阶段,即拆分、映射。ping重新洗牌和减少。
现在,在本 MapReduce 教程中,让我们通过一个 MapReduce 示例来理解它。
假设你的 MapReduce 有以下输入数据: 大数据 程序:
Welcome to Hadoop Class Hadoop is good Hadoop is bad
下图 traces 这三条线贯穿每个阶段,从左侧的输入分割到右侧的最终字数统计。
MapReduce 任务的最终输出是
| 坏 | 1 |
| 增益级 | 1 |
| 非常好 | 1 |
| Hadoop的 | 3 |
| is | 2 |
| 至 | 1 |
| 欢迎来到大巨龙 | 1 |
大数据中的 MapReduce 过程会经历以下几个阶段。
输入拆分
在大数据作业中,MapReduce 的输入会被分割成固定大小的片段,称为输入拆分。一个输入拆分是输入数据中会被单个 Map 处理的部分。
地图绘制
这是 MapReduce 程序执行的第一阶段。在这个阶段,每个拆分中的数据都会被传递给一个 map 对象。ping 生成输出值的函数。在我们的示例中,map 函数的作用是生成输出值。ping 该阶段的目标是统计输入分割中每个单词出现的次数(有关输入分割的更多详细信息,请参见下文),并准备一个列表,格式如下: 。
洗牌
此阶段会消耗 Map 的输出。ping 阶段。其任务是整合地图中的相关记录。ping 相位输出。在我们的示例中,相同的词语及其各自的频率被组合在一起。
减少
在此阶段,来自洗牌阶段的输出值将被聚合。此阶段会将来自洗牌阶段的值合并,并返回一个单一的输出值。简而言之,此阶段是对整个数据集进行汇总。
在我们的示例中,此阶段汇总了 Shuffle 阶段的值,即计算每个单词的总出现次数。
映射简化 Archi结构详解
以下几点解释了拆分任务、映射任务和归约任务是如何在集群中实际放置和存储的。
- 为每个拆分创建一个映射任务,然后对拆分中的每个记录执行映射函数。
- 将数据拆分成多个部分总是有益的,因为处理单个部分所需的时间远小于处理整个输入所需的时间。拆分部分越小,负载均衡性越好,因为各个部分可以并行处理。
- 然而,拆分规模过小也是不可取的。当拆分规模过小时,管理拆分和创建映射任务的开销会占据作业总执行时间的大部分。
- 对于大多数工作而言,最好使分割尺寸与总尺寸相等。 高密度文件系统 块大小从 Hadoop 2.x 开始默认为 128 MB(Hadoop 1.x 中为 64 MB),并由以下因素控制:
dfs.blocksize属性。 - 执行 map 任务会将输出写入相应节点上的本地磁盘,而不是写入 HDFS。
- 选择本地磁盘而不是 HDFS 的原因是为了避免 HDFS 存储操作期间发生的数据复制。
- Map 输出是中间输出,经过 Reduce 任务处理后产生最终输出。
- 一旦作业完成,map 输出就可以丢弃。因此,将其存储在具有副本的 HDFS 中就有些大材小用了。
- 一旦发生节点故障,在 map 输出被 Reduce 任务消费之前,Hadoop 会在另一个节点上重新运行 map 任务,并重新创建 map 输出。
- Reduce 任务不遵循数据局部性原则。每个 Map 任务的输出都会被传递给 Reduce 任务。Map 的输出会被传输到运行 Reduce 任务的机器上。
- 在这台机器上,输出被合并,然后传递给用户定义的reduce函数。
- 与 map 输出不同,reduce 输出存储在 HDFS 中(第一个副本存储在本地节点上,其他副本存储在异地节点上)。因此,写入 reduce 输出确实会消耗网络带宽,但仅与普通 HDFS 写入管道消耗的带宽相当。
MapReduce 如何组织工作?
现在,在本 MapReduce 教程中,我们将学习 MapReduce 的工作原理。
Hadoop 将作业分解成多个任务。任务分为两种类型:
- 地图任务(拆分和地图)ping)
- 减少任务(重新排序,减少)
整个执行过程,即 Map 和 Reduce 任务的执行,由两种类型的实体控制,这两种实体分别称为:
- 工作Tracker:扮演主人的角色,负责完整执行提交的任务。
- 多任务Trackers:像奴隶一样行事,每个人都承担一部分工作。
系统中提交执行的每个作业都对应一个作业。Tracker 位于 NameNode 上,并且有多个 TaskTrac驻留在数据节点上的 kers。
注意: 工作Tracker 和 TaskTracker 对属于 MapReduce 版本 1(Hadoop 1.x)。从 Hadoop 2.x 开始,YARN 将这些职责分配给集群范围的 ResourceManager、每个节点上的 NodeManager 以及每个作业一个 ApplicationMaster,尽管 map、shuffle 和 reduce 阶段本身保持不变。
下图展示了提交的作业是如何分解成各个任务的。 trac跨越集群。
- 一项作业被分解成多个任务,然后在集群中的多个数据节点上运行这些任务。
- 这是工作职责。 tracker 通过调度任务在不同的数据节点上运行来协调活动。
- 单个任务的执行则由该任务负责。 tracker,它驻留在执行作业部分的每个数据节点上。
- 任务 tracker 的职责是向工作单位发送进度报告。 tracker。
- 此外,这项任务 tracker 会定期向作业发送“心跳”信号。Tracker 以便通知它系统的当前状态。
- 因此,这份工作 tracker 保持 track 代表每项任务的整体进度。如果任务失败,则该任务 tracker 可以将其重新安排到另一个任务中。 tracker。


