浅析Hadoop MapReduce架构

1概述

1.1目的

初步了解hadoop,初步掌握hadoop环境的部署方法。

1.2基本概念

hadoop的核心主要包含:HDFS和MapReduce

HDFS是分布式文件系统,用于分布式存储海量数据。

MapReduce是分布式数据处理模型,本质是并行处理

2基本概念

2.1HDFS

http://blog.csdn.net/lfsf802/article/details/8978260

2.1.1HDFS是什么?

HADOOP DISTRIBUTED FILE SYSTEM,简称HDFS,是一个分布式文件系统。它是谷歌的GFS提出之后出现的另外一种文件系统。它有一定高度的容错性,而且提供了高吞吐量的数据访问,非常适合大规模数据集上的应用。HDFS 提供了一个高度容错性和高吞吐量的海量数据存储解决方案。

在最初,HADOOP是作为Apache Nutch搜索引擎项目的基础架构而开发的,后来由于它独有的特性,让它成为HADOOP CORE项目的一部分。

2.1.2HDFS的设计思路?

是什么提供它高吞吐量的数据访问和适合大规模数据集的应用的特性呢,这就要说一下它的设计思路。

首先HDFS的设计之初就是针对超大文件的存储的,小文件不会提高访问和存储速度,反而会降低;其次它采用了最高效的访问模式,也就是经常所说的流式数据访问,特点就是一次写入多次读取;再有就是它运行在普通的硬件之上的,即使硬件故障,也就通过容错来保证数据的高可用。

2.1.3HDFS的一些概念

Block:大文件的存储会被分割为多个block进行存储。默认为64MB,每一个blok会在多个datanode上存储多份副本,默认为3份。[这些设置都能够通过配置文件进行更改]

Namenode:主要负责存储一些metadata信息,主要包括文件目录、block和文件对应关系,以及block和datanote的对应关系

Datanode:负责存储数据,上面我们所说的高度的容错性大部分在datanode上实现的[还有一部分容错性是体现在namenode和secondname,还有jobtracker的容错等]。

2.1.4HDFS的基础架构图

HDFS的基础架构图

2.1.5解析HDFS带来的好处

高吞吐量访问:HDFS的每个block分布在不同的rack上,在用户访问时,HDFS会计算使用最近和访问量最小的服务器给用户提供。由于block在不同的rack上都有备份,所以不再是单数据访问,所以速度和效率是非常快的。另外HDFS可以并行从服务器集群中读写,增加了文件读写的访问带宽。

高容错性:上面简单的介绍了一下高度容错。系统故障是不可避免的,如何做到故障之后的数据恢复和容错处理是至关重要的。HDFS通过多方面保证数据的可靠性,多分复制并且分布到物理位置的不同服务器上,数据校验功能、后台的连续自检数据一致性功能,都为高容错提供了可能。

容量扩充:因为HDFS的block信息存放到namenode上,文件的block分布到datanode上,当扩充的时候,仅仅添加datanode数量,系统可以在不停止服务的情况下做扩充,不需要人工干预。

2.2MapReduce

从它名字上来看就大致可以看出个缘由,两个动词Map和Reduce。

Map(展开)就是将一个任务分解成为多个任务,Reduce就是将分解后多任务处理的结果汇总起来,得出最后的分析结果。

2.2.1MapReduce原理

在Hadoop中,每个MapReduce任务都被初始化为一个Job,每个Job又可以分为两种阶段:map阶段和reduce阶段。这两个阶段分别用两个函数表示,即map函数和reduce函数。map函数接收一个形式的输入,然后同样产生一个形式的中间输出,Hadoop函数接收一个如形式的输入,然后对这个value集合进行处理,每个reduce产生0或1个输出,reduce的输出也是形式的。

2.2.2Map的过程

MapRunnable从input split中读取一个个的record,然后依次调用Mapper的map函数,将结果输出。map的输出并不是直接写入硬盘,而是将其写入缓存memory buffer。当buffer中数据的到达一定的大小,一个背景线程将数据开始写入硬盘。在写入硬盘之前,内存中的数据通过partitioner分成多个partition。在同一个partition中,背景线程会将数据按照key在内存中排序。每次从内存向硬盘flush数据,都生成一个新的spill文件。

2.2.3Reduce的过程

当map task结束后,其通知TaskTracker,TaskTracker通知JobTracker。对于一个job,JobTracker知道TaskTracer和map输出的对应关系。reducer中一个线程周期性的向JobTracker请求map输出的位置,直到其取得了所有的map输出。reduce task需要其对应的partition的所有的map输出。reduce task中的copy过程即当每个map task结束的时候就开始拷贝输出,因为不同的map task完成时间不同。reduce task中有多个copy线程,可以并行拷贝map输出。当很多map输出拷贝到reduce task后,一个背景线程将其合并为一个大的排好序的文件。当所有的map输出都拷贝到reduce task后,进入sort过程,将所有的map输出合并为大的排好序的文件。最后进入reduce过程,调用reducer的reduce函数,处理排好序的输出的每个key,最后的结果写入HDFS。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180726A1OGTY00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码关注腾讯云开发者

领取腾讯云代金券