Hadoop 中的 MapReduce 是什么?大数据 Archi质地
Hadoop 中的 MapReduce 是什么?
映射简化 是一种用于处理大量数据的软件框架和编程模型。 映射简化 程序分为两个阶段工作,即 Map 和 Reduce。Map 任务处理数据的拆分和映射,而 Reduce 任务则对数据进行混洗和 Reduce。
Hadoop 能够运行用各种语言编写的 MapReduce 程序: Java, 红宝石, Python和 C++云计算中的Map Reduce程序本质上是并行的,因此非常适合使用集群中的多台机器进行大规模数据分析。
每个阶段的输入是 核心价值 对。此外,每个程序员都需要指定两个函数: 地图功能 和 减少功能.
映射简化 Archi大数据中的结构解释示例
整个过程经过拆分、映射、改组和缩减四个执行阶段。
现在,在本 MapReduce 教程中,让我们通过一个 MapReduce 示例来理解——
假设您在 MapReduce 中有以下输入数据 大数据计划
Welcome to Hadoop Class Hadoop is good Hadoop is bad
MapReduce 任务的最终输出是
坏 | 1 |
增益级 | 1 |
非常好 | 1 |
Hadoop的 | 3 |
is | 2 |
至 | 1 |
欢迎 | 1 |
数据在大数据中经历 MapReduce 的以下阶段
输入分割:
大数据作业中 MapReduce 的输入被分成固定大小的块,称为 输入分割 输入分割是单个映射使用的输入块
地图绘制
这是 map-reduce 程序执行的第一个阶段。在此阶段,每个分片中的数据被传递给映射函数以产生输出值。在我们的示例中,映射阶段的工作是计算输入分片中每个单词的出现次数(有关输入分片的更多详细信息如下)并以以下形式准备列表
洗牌
此阶段使用 Mapping 阶段的输出。其任务是整合来自 Mapping 阶段输出的相关记录。在我们的示例中,相同的单词与其各自的频率一起组合在一起。
减少
在此阶段,将汇总 Shuffling 阶段的输出值。此阶段将合并 Shuffling 阶段的值并返回单个输出值。简而言之,此阶段将汇总完整的数据集。
在我们的例子中,这个阶段聚合了来自 Shuffling 阶段的值,即计算每个单词的总出现次数。
映射简化 Archi结构详解
- 为每个分割创建一个 map 任务,然后对分割中的每个记录执行 map 函数。
- 进行多次拆分总是有益的,因为处理一次拆分所花的时间与处理整个输入所花的时间相比要短得多。当拆分较小时,由于我们正在并行处理拆分,因此处理负载平衡效果会更好。
- 但是,分片大小也不宜过小。当分片太小时,管理分片和创建 Map 任务的负担会开始占据整个作业执行时间的大部分。
- 对于大多数作业来说,最好将分割大小设置为等于 HDFS 块的大小(默认为 64 MB)。
- 执行 map 任务会导致输出写入相应节点上的本地磁盘而不是 HDFS。
- 选择本地磁盘而不是 HDFS 的原因是为了避免在 HDFS 存储操作时发生复制。
- Map 输出是中间输出,经过 Reduce 任务处理后产生最终输出。
- 一旦作业完成,map 输出就可以丢弃。因此,将其存储在具有副本的 HDFS 中就有些大材小用了。
- 一旦发生节点故障,在 map 输出被 Reduce 任务消费之前,Hadoop 会在另一个节点上重新运行 map 任务,并重新创建 map 输出。
- Reduce 任务不依赖于数据局部性的概念。每个 map 任务的输出都会被输入到 Reduce 任务中。Map 输出会被传输到运行 Reduce 任务的机器上。
- 在这台机器上,输出被合并,然后传递给用户定义的reduce函数。
- 与 map 输出不同,reduce 输出存储在 高密度文件系统 (第一个副本存储在本地节点上,其他副本存储在机架外的节点上)。因此,写入 Reduce 输出
MapReduce 如何组织工作?
现在,在本 MapReduce 教程中,我们将学习 MapReduce 的工作原理
Hadoop的 将工作划分为任务。有两种类型的任务:
- 地图任务 (分割与映射)
- 减少任务 (改组、减少)
正如刚才提到的。
完整的执行过程(Map 和 Reduce 任务的执行)由两种类型的实体控制,称为
- 工作追踪器:就像 主 (负责完整执行所提交的作业)
- 多任务追踪器:就像 奴隶, 每个人都在履行自己的职责
对于系统中提交执行的每个作业,都有一个 工作追踪器 驻留在 名称节点 并且有 多个任务跟踪器 位于 数据节点.
- 一个作业被分成多个任务,然后在集群中的多个数据节点上运行。
- 作业跟踪器负责通过调度任务在不同的数据节点上运行来协调活动。
- 然后,单个任务的执行由任务跟踪器负责,任务跟踪器驻留在执行部分作业的每个数据节点上。
- 任务跟踪器的职责是向作业跟踪器发送进度报告。
- 此外,任务跟踪器会定期发送 ‘心跳’ 向Jobtracker发出信号来通知他系统当前的状态。
- 因此,作业跟踪器会跟踪每项作业的总体进度。如果任务失败,作业跟踪器可以将其重新安排到不同的任务跟踪器上。