Hadoop理论之MapReduce

1 环境概要

要学一门新的东西,对于不通的人可能会有不通的出发点。就学习方法而言,也是多样的。我前面写的文章主要是搭建环境,并且客观的说我也不知道Hadoop能干什么。但是我认为系统环境的搭建就如同打仗的后勤一样。所谓兵马未动,粮草先行吧。接下来我们来看看Hadoop的具体理论吧。看如下图是Hadoop的组成部分。分别是HDFS以及Map Reduce。HDFS(Hadoop Distributed FileSystem) 分布式文件系统。 Map Reduce则是任务处理的框架。

关于Hadoop能干什么,或者接下来的学习,可以使用一个项目来完成。

当我们安装Hadoop之后,我么会使用jps命令来观察运行的Java进程:

[root@gosaint ~]# jps
5152 SecondaryNameNode
4995 DataNode
18147 Jps
4875 NameNode
15916 ResourceManager
3950 WrapperSimpleApp
[root@gosaint ~]#

关于WrapperSimpleApp是一个将Java程序转化为一个服务的应用,暂且不理会。因此上述的Hadoop的架构发生了变化。因为我上面给出的架构是基于老版本的Hadoop而言的。

接下来我要介绍上述的参数:

HDFS

NameNode:是Master节点,有点类似Linux里的根目录。管理数据块映射;处理客户端的读写请求;配置副本策略;管理HDFS的名称空间;

SecondaryNameNode:保存着NameNode的部分信息(不是全部信息NameNode宕掉之后恢复数据用),是NameNode的冷备份;合并fsimage和edits然后再发给namenode。(防止edits过大的一种解决方案)

DataNode:负责存储client发来的数据块block;执行数据块的读写操作。是NameNode的小弟。

热备份:b是a的热备份,如果a坏掉。那么b马上运行代替a的工作。

冷备份:b是a的冷备份,如果a坏掉。那么b不能马上代替a工作。但是b上存储a的一些信息,减少a坏掉之后的损失。

fsimage:元数据镜像文件(文件系统的目录树。)

edits:元数据的操作日志(针对文件系统做的修改操作记录)

namenode**内存中存储的是=fsimage+edits。

Map Reduce

ResourceManager 是基于应用程序对资源的需求进行调度的 ; 每一个应用程序需要不同类型的资源因此就需要不同的容器。
ResourceManager 是一个中心的服务,它做的事情是调度、启动每一个 Job 所属的 ApplicationMaster、另外监控 ApplicationMaster 的存在情况。

NodeManager 是每一台机器框架的代理,是执行应用程序的容器,监控应用程序的资源使用情况 (CPU,内存,硬盘,网络 ) 并且向调度器(ResourceManager )汇报。

ApplicationMaster 的职责有:向调度器索要适当的资源容器,运行任务,跟踪应用程序的状态和监控它们的进程,处理任务的失败原因。

2 Hadoop能干什么

​ 在《Hadoop权威指南》中说了一个例子:在之前如果要下载1024M的东西,假设网速是2M/s.那么大概需要500s左右。但是随着数据量的增大,你如果要下载1T的资源,假设此时网速为10M/s。那么你需要多个时间呢。答案是很可怕的。也就是说现在随着数据量的增大,你读取数据的事件仍然没有可观的增长。仅仅读取数据就这么消耗时间,那么对于写入数据就更加的糟糕啦。但是试想,我们存在100个硬盘呢。每一个硬盘上面保存1%的数据,那么读取是不是很快,到最后合并读取结果不就Ok了嘛。但是问题来了:

问题1:硬件故障

假设100个硬盘,其中一个坏了怎么办呢?最常见的做法就是系统保存数据的副本,一旦这个坏了,将数据放在其它硬盘上。HDFS就可以干这个事情,它是分布式文件处理系统,只不过它的实现方式稍微有点差别。

问题2:并行处理数据,逻辑如何一致

我们并行读取数据,最终我们希望我们的数据是一个可靠的,并且符合原始数据模型的数据。Ma Reduce就是实现了并行计算。这个和Java中的Join/Fork框架很相似。或者是二者的思想基本一致。分而治之!

简而言之,Hadoop为我们提供了一个可靠的而且易于扩展的存储和分析平台。

3 MapReduce

Mapreduce是一中用于数据处理的编程模型,思想就是分而治之。map就是分,reduce就是合。

运行流程分析:

1 客户端提交作业到ResourceManage

2 ResourceManage找到一个NodeManage来启动ApplicationMaster.

3 ApplicationMaster向ResourceManage申请资源,并且启动其余的NodeManage

4 NodeManage启动map或者reduce任务来处理数据

5 最终得到分片信息

整个MapReduce的过程大致分为 Map–>Shuffle(排序)–>Combine(组合)–>Reduce

4 单词计数案例分析

1)将文件拆分成splits(片),并将每个split按行分割形成<key,value>对,如图所示。这一步由MapReduce框架自动完成,其中偏移量即key值

将分割好的<key,value>对交给用户定义的map方法进行处理,生成新的<key,value>对,如下图所示。

得到map方法输出的<key,value>对后,Mapper会将它们按照key值进行Shuffle(排序),并执行Combine过程,将key至相同value值累加,得到Mapper的最终输出结果。如下图所示。

Reducer先对从Mapper接收的数据进行排序,再交由用户自定义的reduce方法进行处理,得到新的<key,value>对,并作为WordCount的输出结果,如下图所示。

这是最终的排序结果 。我们通过流程分析和Java代码的输出一致。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值