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

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

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

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

本期内容为大家详解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最好运行在hdfs的datanode上。

4. 组成

4.1 MapReduce的split的大小

Split的最大值为:max_split

Split的最小值为:min_split

Block的大小:block

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

4.2 Mapper

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

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

4.3 Shuffle

 

Shuffle是介于mapper与reducer中间的一个步骤,hadoop一般都是移动计算而不移动数据,但是在shuffle阶段有数据的移动。首先map以K-Value键值对的形式输出,输出后写到内存缓冲区,每一个map_task都有一个内存缓冲区(默认100MB)存储着map的输出结果。当写入内存缓冲区中的数据达到了一定的阈值时,将缓冲区的数据以一个临时文件的方式存放到磁盘(split)。溢写是由单独线程来完成,不影响往缓冲区写map结果的线程(split.percent)默认是0.8,将溢写的过程中的一个个磁盘小文件进行分区,分区的目的是为了标记这些数据都是由后面的哪个reduce来处理。分区的默认规则是key的hash值%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用于调度,reduce从map端拿数据,并进行汇总,将结果输出到hdfs中。

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

本文作者:宋莹

时间: 2024-12-29 01:36:47

独家 | 一文读懂Hadoop(三):Mapreduce的相关文章

独家 | 一文读懂Hadoop(一):综述

随着全球经济的不断发展,大数据时代早已悄悄到来,而Hadoop又是大数据环境的基础,想入门大数据行业首先需要了解Hadoop的知识.2017年年初apache发行了Hadoop3.0,也意味着一直有一群人在对Hadoop不断的做优化,不仅如此,各个Hadoop的商业版本也有好多公司正在使用,这也印证了它的商业价值. 读者可以通过阅读"一文读懂Hadoop"系列文章,对Hadoop技术有个全面的了解,它涵盖了Hadoop官网的所有知识点,并且通俗易懂,英文不好的读者完全可以通过阅读此篇文

独家 | 一文读懂Hadoop(二)HDFS(上)

随着全球经济的不断发展,大数据时代早已悄悄到来,而Hadoop又是大数据环境的基础,想入门大数据行业首先需要了解Hadoop的知识.2017年年初apache发行了Hadoop3.0,也意味着一直有一群人在对Hadoop不断的做优化,不仅如此,各个Hadoop的商业版本也有好多公司正在使用,这也印证了它的商业价值. 读者可以通过阅读"一文读懂Hadoop"系列文章,对Hadoop技术有个全面的了解,它涵盖了Hadoop官网的所有知识点,并且通俗易懂,英文不好的读者完全可以通过阅读此篇文

独家 | 一文读懂Hadoop(四):YARN

随着全球经济的不断发展,大数据时代早已悄悄到来,而Hadoop又是大数据环境的基础,想入门大数据行业首先需要了解Hadoop的知识.2017年年初apache发行了Hadoop3.0,也意味着一直有一群人在对Hadoop不断的做优化,不仅如此,各个Hadoop的商业版本也有好多公司正在使用,这也印证了它的商业价值. 读者可以通过阅读"一文读懂Hadoop"系列文章,对Hadoop技术有个全面的了解,它涵盖了Hadoop官网的所有知识点,并且通俗易懂,英文不好的读者完全可以通过阅读此篇文

独家 | 一文读懂Hadoop(二)HDFS(下)

5.1 用户命令 hadoop集群用户的常用命令. 5.1.1 classpath 打印获取Hadoop jar和所需库所需的类路径.如果无参数调用,则打印由命令脚本设置的类路径,可以在类路径条目中包含通配符.其他选项在通配符扩展后打印类路径或将类路径写入jar文件的清单.后者在不能使用通配符且扩展的类路径超过支持的最大命令行长度的环境中非常有用. 5.1.2 dfs HDFS允许以文件和目录的形式组织用户数据.它提供了一个称为FS shell的命令行界面,允许用户与HDFS中的数据交互.此命令

独家 | 一文读懂大数据处理框架

前言 说起大数据处理,一切都起源于Google公司的经典论文:<MapReduce:Simplied Data Processing on Large Clusters>.在当时(2000年左右),由于网页数量急剧增加,Google公司内部平时要编写很多的程序来处理大量的原始数据:爬虫爬到的网页.网页请求日志:计算各种类型的派生数据:倒排索引.网页的各种图结构等等.这些计算在概念上很容易理解,但由于输入数据量很大,单机难以处理.所以需要利用分布式的方式完成计算,并且需要考虑如何进行并行计算.分

独家 | 一文读懂深度学习

Figure1. Deep learning导图   前言 深度学习(deep learning)的概念最早可以追溯到1940-1960年间的控制论(cybernetics),之后在1980-1990年间发展为连接主义(connectionism),第三次发展浪潮便是2006年由人工神经网络(Artificial neural network)扩展开来并发展成为今天十分火热的深度学习(Figure 2).实际上,深度学习的兴起和发展是非常自然的,人们在应用经典的机器学习方法时,需要对具体的问题或

独家 | 一文读懂自然语言处理NLP(附学习资料)

前言                                               自然语言处理是文本挖掘的研究领域之一,是人工智能和语言学领域的分支学科.在此领域中探讨如何处理及运用自然语言. 对于自然语言处理的发展历程,可以从哲学中的经验主义和理性主义说起.基于统计的自然语言处理是哲学中的经验主义,基于规则的自然语言处理是哲学中的理性主义.在哲学领域中经验主义与理性主义的斗争一直是此消彼长,这种矛盾与斗争也反映在具体科学上,如自然语言处理. 早期的自然语言处理具有鲜明的经验主义

独家 | 一文读懂推荐系统知识体系-下(评估、实战、学习资料)

本文主要阐述: 推荐系统的评估(Evaluation) 推荐系统的冷启动问题(Cold Start) 推荐系统实战(Actual Combat) 推荐系统案例(Case Study) 浏览前三章的内容请见上篇. 如何判断推荐系统的优劣?这是推荐系统评测需要解决的首要问题.一个完整的推荐系统一般存在3个参与方: 用户 物品提供者 提供推荐系统的网站 好的推荐系统设计,能够让推荐系统本身收集到高质量的用户反馈,不断完善推荐的质量,增加用户和网站的交互,提高网站的收入.因此在评测一个推荐算法时,需要同

独家 | 一文读懂社交网络分析-上(附学习资源)

本文主要阐述: 社交网络的结构特性与演化机理 社交网络群体行为形成与互动规律 社交网络信息传播与演化机理 浏览后四章的内容请见下篇(2017年9月26日二条). 前言 社交网络在维基百科的定义是"由许多节点构成的一种社会结构.节点通常是指个人或组织,而社交网络代表着各种社会关系."在互联网诞生前,社交网络分析是社会学和人类学重要的研究分支.早期的社交网络的主要指通过合作关系建立起来的职业网络,如科研合作网络.演员合作网络等. 本文所指的社交网络分析专指在线社交网络分析(Online S