Hadoop三大组件剖析【精】

概述
在这里插入图片描述该篇文章主要解释Hadoop2.0三大组件HDFS+MapReduce+Yarn.其中HDFS负责存储,MapRduce负责计算,Yarn负责资源管理。

HDFS
HDFS架构图
在这里插入图片描述

  1. namenode,名字节点,最主要管理HDFS的元数据信息
  2. datanode,数据节点,存储文件块、
  3. replication,文件块的副本,目的是确保数据存储的可靠性
  4. rack机器
  5. Client客户端。凡是通过指令或代码操作的一端都是客户端。
  6. Client的Read(从HDFS下载文件到本地)
  7. Client的Write(上传文件到HDFS上)
    HDFS读取文件过程
    在这里插入图片描述1.客户端向namenode发起Open File。目的是获取要下载的文件的输入流。
    2.客户端在发起Open File的同时,还会调用GetBlockLocation.当第一步的检查通过以后namenode会将文件的块信息(元数据信息)封装到输入流,交给客户端。
    3,4客户端用输入流,根据元数据信息,去指定的datanode读取文件块(按blockid顺序读取)
    5.文件下载完后关闭。

BlockSender介绍

  1. 当用户向HDFS读取某一个文件时,客户端会根据数据所在的位置转向到具体的DataNode节点请求对应数据块的数据,此时DataNode节点会用BlockSender向该客户端发送数据;
  2. 当NameNode节点发现某个Block的副本不足时,它会要求某一个存储了该Block的DataNode节点向其他DataNode节点复制该Block,当然此时仍然会采用流水线的复制方式,只不过数据来源变成 了一个DataNode节点;
  3. HDFS开了一个调节DataNode负责均衡的工具Balancer,当它发现某一个DataNode节点存储的Block过多时,就会让这个DataNode节点转移一部分Blocks到新添加到集群的DataNode节点或者存储负载轻的DataNode节点上;
    sh start-balancer.sh -t %10
    百分数时磁盘使用变差率,一般调节的范围在10%~20%间。
  4. DataNode会定义利用BlockSender来检查一个Block的节点数据是否损坏。

HDFS写的过程
在这里插入图片描述
1.客户端发去CreeteFile,目的时获取HDFS文件的输出流,namenode收到请求后会检测路径的合法性,以及权限。原生Hadoop的权限管理不是很完善,工作中用的是CDH(商业版Hadoop)
如果检测通过,namenode会为这个文件生成块的元数据信息(比如:1为文件切块2分配块id3分配每个块存在那个datanode上),然后将原属信息封装到输出流中,返回给客户端。
2.3Client拿出输出流之后,采用PipeLine(数据流管道)机制做数据的上传发送,这样设计的目的在于利用每台服务的带宽,最小化推送数据的延时。
packet是一个64Kb大小的数据包,即客户端在发送文件块时,会在文件块变成一个一个的数据发送。
4.5. 每台datanode收到packet,会向上游datanode做ack确认,如果接受失败,会进行重发
6. 当一个文件上传完后,关流。
HDFS删文件流程

  1. 当客户端发起一个删除指令:Hadoop fs -rm /park01/.txt,这个指令会传给namenoe
  2. 当namenode收到指令后,做路径和权限检测,如果检测都通过,会将对应的文件信息从内存里删除,此时,文件数据并不是马上就从集群上被删除。
  3. datanode向namenode发送心跳时(默认时3s周期),会领取删除指令,然后从磁盘上将文件删除。

MapReduce
概述
MapReduce是一个分布式的计算框架(编程模型)。
MapReduce框架的节点组成结构
ResourceManager:任务调度者,管理多个
ResourceManager是hadoop2.0版本之后引入了yarn,有yarn来管理Hadoop.
NodeManager:任务执行者

在这里插入图片描述MapReudce计算框架抽象出两个任务阶段,Map任务阶段和Reduce任务阶段。
由于集群工作过程中,需要用到RPC操作,所以MR处理的对象必须可以进行序列化/反序列操作。Hadoop利用的是avro实现的序列化和反序列化,并且在其基础上提供了便捷的API,要序列化对象必须实现相关的接口:Writable接口-WritableComparable。
partitioner分区操作
1.Hadoop默认的reduce数量是一个,即默认的分区是1个
2.假设有多个分区,Hadoop默认是用简单哈希散列算法,计算Mapper输出的key值,然后进行分区。这样能够确保同一个Key落到同一个分区。
3.有几个分区,就会有几个结果文件
4.先分区,然后再按key合并。

shuffle
其实说MR阶段最核心的也就是shuffle过程
在这里插入图片描述
流程详解

上面的流程是整个mapreduce最全工作流程

1)maptask收集我们的map()方法输出的kv对,放到内存缓冲区中

2)从内存缓冲区不断溢出本地磁盘文件,可能会溢出多个文件

3)多个溢出文件会被合并成大的溢出文件

4)在溢出过程中,及合并的过程中,都要调用partitoner进行分组和针对key进行排序

5)reducetask根据自己的分区号,去各个maptask机器上取相应的结果分区数据

6)reducetask会取到同一个分区的来自不同maptask的结果文件,reducetask会将这些文件再进行合并(归并排序)

7)合并成大文件后,shuffle的过程也就结束了,后面进入reducetask的逻辑运算过程(从文件中取出一个一个的键值对group,调用用户自定义的reduce()方法)

在这里插入图片描述
1,Map Task的输出k v,一开始会进入溢写缓冲区中,对数据做处理,比如分区、排序等操作。2、有几个Map Task,就有几个对应的溢写缓冲区。3、溢写缓冲区默认是100MB,溢写阈值:0.8.(都可通过配置文件调节)4、溢写缓冲区中的数据达到溢写阈值时,会发生Spill溢写过程,把内存中数据溢写到磁盘的文件上。在这里插入图片描述

在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述
Yarn
yarn是一种新的Hadoop资源管理器,它是一个通用管理原理系统,可为上层应用提供统一的资源管理和调度,它的引入为集群在资源利用率、资源同意管理和数据共享等方面带来的巨大的好处。
YARN的基本思想是将jobTracker的两个主要功能(资源管理和作业调度/监控)分离。

要了解yarn首先要了解yarn的核心思想
a.一个全局的资源管理器ResourceManager
b.ResourceManager的每个节点代理NodeManager
c.表示每个应用的ApplicationMaster
d.每一个ApplicationMaster拥有多个Container在NodeManager上运行。

yarn架构图
在这里插入图片描述要想明白yarn架构可以通过执行MapReduce job来看Shared FileSystem(文件共享系统)以及ResouceManager、NodeManager、ApplicationMaster之间的关系。

1、 客户端通过提交MR的job.ResouceManager会会收集Job环境信息,比如输入路径、输出结果路径等信息,如果有错误就会抛出异常,并终止job的后续提交。
2、ResouceManager确认无误后会给Job返回一个new application。
3、4、job得到application的资源信息,会copy到共享文件系统,并且提交给ResourceManager。
5、 然后ResourceManager会开启一个资源容器告诉NodeManager,然后ResourceManager会开启一个资源容器通知到NodeManager,
6 、7 、8、 NodeManager询问applicationMaster这个job执行需要多少资源,ApplicationMaster初始化任务,向SharedFileSystem(文件共享系统)询问这个job所拥有的资源,并且得到的资源信息告诉nodeManager和ResouceManager。
9、10 、11、 NodeManager收到ApplicationMaster的资源信息后后开启一个子进程,根据共享文件系统给的资源执行对应的MapTask任务。

猜你喜欢

转载自blog.csdn.net/weixin_42644102/article/details/85063012
今日推荐