独家 | 一文读懂Hadoop(三):Mapreduce

简介:



随着全球经济的不断发展,大数据时代早已悄悄到来,而Hadoop又是大数据环境的基础,想入门大数据行业首先需要了解Hadoop的知识。2017年年初apache发行了Hadoop3.0,也意味着一直有一群人在对Hadoop不断的做优化,不仅如此,各个Hadoop的商业版本也有好多公司正在使用,这也印证了它的商业价值。

读者可以通过阅读“一文读懂Hadoop”系列文章,对Hadoop技术有个全面的了解,它涵盖了Hadoop官网的所有知识点,并且通俗易懂,英文不好的读者完全可以通过阅读此篇文章了解Hadoop。

本期独家内容“一文读懂Hadoop”系列文章先介绍Hadoop,继而分别详细介绍HDFSMAPREDUCEYARN的所有知识点,分为四期内容在近几天推送。敬请关注后续内容。


本期内容为大家详解Mapreduce:

Mapreduce是一个计算框架,既然是做计算的框架,那么表现形式就是有个输入(input),mapreduce操作这个输(input),通过本身定义好的计算模型,得到一个输出(output),这个输出就是我们所需要的结果。

我们要学习的就是这个计算模型的运行规则。在运行一个mapreduce计算任务时候,任务过程被分为两个阶段:map阶段和reduce阶段,每个阶段都是用键值对(key/value)作为输入(input)和输出(output)。而程序员要做的就是定义好这两个阶段的函数:map函数和reduce函数。

1. 设计理念

  • 分布式计算;

  • 移动计算而不移动数据。

2. 计算框架


  • 第一个阶段是split,主要是将大文件切分成小文件。

  • 第二个阶段是map,做些基本的分析,一般一个split对应一个map。一般很少在map端做累加,如果文件较大,就要将split传给map的文件全部加载到内存。

  • 第三个阶段是shuffle,主要做排序、分区、分组,连接map与reduce。

  • 第四个阶段是reduce,做进一步分析,reduce在拿数据的时候是通过迭代器的方式拿的,避免了内存溢出的情况。

3. 主从结构

resourcemanager

负责调度分配每一个task任务运行于nodemanager上,如果发现有失败的,就重新分配任务到其它节点,每一个hadoop集群中只有一个resourcemanager,一般它运行在master节点。

nodemanager

nodemanager主动与resourcemanager通信,接收作业,并负责执行每一个task任务,为了减少网络带宽,nodemanager最好运行在hdfsdatanode上。

4. 组成

4.1 MapReducesplit的大小

Split的最大值为:max_split

Split的最小值为:min_split

Block的大小:block

切分规则:max(min_split,min(max_split,block)),主要是为了减少网络带宽。

4.2 Mapper

MapReduce的思想:分而治之。Mapper负责即把复杂的任务分解为若干个简单的任务执行,这样数据或计算规模相对于源任务大大缩小,就近计算,即会被分配到存放了所需数据的节点进行计算,并且这些小任务可以并行计算,彼此间几乎没有依赖关系。

计算框架Mapperresourcemanager主要是对计算流程的管理,数据存放在datanode上,计算也在这上面计算。同时,namenode管理元数据信息,过程中resourcemanager会请求namenode

4.3 Shuffle

 

Shuffle是介于mapperreducer中间的一个步骤,hadoop一般都是移动计算而不移动数据,但是在shuffle阶段有数据的移动。首先mapK-Value键值对的形式输出,输出后写到内存缓冲区,每一个map_task都有一个内存缓冲区(默认100MB)存储着map的输出结果。当写入内存缓冲区中的数据达到了一定的阈值时,将缓冲区的数据以一个临时文件的方式存放到磁盘(split)。溢写是由单独线程来完成,不影响往缓冲区写map结果的线程(split.percent)默认是0.8,将溢写的过程中的一个个磁盘小文件进行分区,分区的目的是为了标记这些数据都是由后面的哪个reduce来处理。分区的默认规则是keyhash%reduce的个数。当溢写线程启动后,需要对这80MB空间内的KEY做排序(sort)。将磁盘小文件合并成一个大文件(combiner),然后reduce主动去map端把属于自己的数据拉取过来,到了reduce端要进行二次排序(分组)。同时reduce端的数据也是加载到内存的,内存满了同样会触发溢写。过多的小文件同样会合并成大文件,最后是reduce的输出。

4.4 Reducer

Reducer主要是对map阶段的进行汇总,Reduce的数目由mapred-site.xml配置文件里的项目mapred.reduce.tasks决定,缺省值为1,用户可以覆盖。

4.4.1 计算框架Reducer

其中resourcemanager用于调度,reducemap端拿数据,并进行汇总,将结果输出到hdfs中。



原文发布时间为:2017-07-26 

本文作者:宋莹

本文来自云栖社区合作伙伴“数据派THU”,了解相关信息可以关注“数据派THU”微信公众号

相关文章
|
2月前
|
分布式计算 资源调度 Hadoop
大数据-80 Spark 简要概述 系统架构 部署模式 与Hadoop MapReduce对比
大数据-80 Spark 简要概述 系统架构 部署模式 与Hadoop MapReduce对比
83 2
|
22天前
|
数据采集 分布式计算 Hadoop
使用Hadoop MapReduce进行大规模数据爬取
使用Hadoop MapReduce进行大规模数据爬取
|
2月前
|
分布式计算 资源调度 Hadoop
Hadoop-10-HDFS集群 Java实现MapReduce WordCount计算 Hadoop序列化 编写Mapper和Reducer和Driver 附带POM 详细代码 图文等内容
Hadoop-10-HDFS集群 Java实现MapReduce WordCount计算 Hadoop序列化 编写Mapper和Reducer和Driver 附带POM 详细代码 图文等内容
119 3
|
2月前
|
分布式计算 资源调度 数据可视化
Hadoop-06-Hadoop集群 历史服务器配置 超详细 执行任务记录 JobHistoryServer MapReduce执行记录 日志聚合结果可视化查看
Hadoop-06-Hadoop集群 历史服务器配置 超详细 执行任务记录 JobHistoryServer MapReduce执行记录 日志聚合结果可视化查看
52 1
|
2月前
|
分布式计算 资源调度 Hadoop
Hadoop-05-Hadoop集群 集群WordCount 超详细 真正的分布式计算 上传HDFS MapReduce计算 YRAN查看任务 上传计算下载查看
Hadoop-05-Hadoop集群 集群WordCount 超详细 真正的分布式计算 上传HDFS MapReduce计算 YRAN查看任务 上传计算下载查看
58 1
|
2月前
|
SQL 分布式计算 关系型数据库
Hadoop-24 Sqoop迁移 MySQL到Hive 与 Hive到MySQL SQL生成数据 HDFS集群 Sqoop import jdbc ETL MapReduce
Hadoop-24 Sqoop迁移 MySQL到Hive 与 Hive到MySQL SQL生成数据 HDFS集群 Sqoop import jdbc ETL MapReduce
110 0
|
2月前
|
SQL 分布式计算 关系型数据库
Hadoop-23 Sqoop 数据MySQL到HDFS(部分) SQL生成数据 HDFS集群 Sqoop import jdbc ETL MapReduce
Hadoop-23 Sqoop 数据MySQL到HDFS(部分) SQL生成数据 HDFS集群 Sqoop import jdbc ETL MapReduce
51 0
|
2月前
|
SQL 分布式计算 关系型数据库
Hadoop-22 Sqoop 数据MySQL到HDFS(全量) SQL生成数据 HDFS集群 Sqoop import jdbc ETL MapReduce
Hadoop-22 Sqoop 数据MySQL到HDFS(全量) SQL生成数据 HDFS集群 Sqoop import jdbc ETL MapReduce
60 0
|
4月前
|
缓存 分布式计算 算法
优化Hadoop MapReduce性能的最佳实践
【8月更文第28天】Hadoop MapReduce是一个用于处理大规模数据集的软件框架,适用于分布式计算环境。虽然MapReduce框架本身具有很好的可扩展性和容错性,但在某些情况下,任务执行可能会因为各种原因导致性能瓶颈。本文将探讨如何通过调整配置参数和优化算法逻辑来提高MapReduce任务的效率。
676 0
|
6月前
|
分布式计算 Hadoop Java
Hadoop MapReduce编程
该教程指导编写Hadoop MapReduce程序处理天气数据。任务包括计算每个城市ID的最高、最低气温、气温出现次数和平均气温。在读取数据时需忽略表头,且数据应为整数。教程中提供了环境变量设置、Java编译、jar包创建及MapReduce执行的步骤说明,但假设读者已具备基础操作技能。此外,还提到一个扩展练习,通过分区功能将具有相同尾数的数字分组到不同文件。
68 1

相关实验场景

更多