Hadoop原理简介

Hadoop

Hadoop其实是一个较大的概念,它像是一个巨大的框架,里面由多个组件去构架而成。我想从三个部分,也是我认为Hadoop最重要的三个组件hdfs、yarn、Hbase来介绍我所了解的Hadoop 。下文我将介绍这三个组件的构架以及基本的运作原理,

HDFS 

Hdfs架构

这个图是从hdfs官网摘下来的,这个图很好的演示了hdfs的架构和数据读写原理。

下面将简述一下hdfs的写原理:

  1. 客户端会将数据切分成数据块block(默认128M),然后发送写请求给NameNode

  2. NameNode接受请求,记录数据块信息,告诉客户端可用的DataNode

  3. 客户端向DataNode传送数据,这里涉及一个机架感知功能( Hadoop默认采取三副本的形式,第一个副本假设在DataNodeA中,那第二个副本则会备份在相同机架上的DataNodeB中,剩下一个副本存放在另外的机架中,这样有效的提高了集群数据的容错性,当DataNodeA故障或者DataNodeB故障时,通过相同的机架去获取数据能有效的减少带宽通信,如果整个机架损坏了可以从另外一个机架去获取数据 )

hdfs的读原理:

  1. 客户端向NameNode发送读请求

  2. 客户端查看meta表返回匹配的block所在datanode

  3. 去匹配的dataNode查数据

关于hdsf的元数据文件fismage(元数据文件)和editslog(元数据操作日志文件),对hdfs进行操作时会生成这两个文件,相关的操作记录会写在editslog中,然后定期由secondaryNameNode去合并旧的fsimage和editslog生成新的fsimage

Yarn

Yarn架构

ResourceManager

控制整个集群并管理应用程序向基础计算资源的分配,将各个资源部分(计算、内存、带宽等)精心安排给基础NodeManager(Yarn的每个节点)。它主要由两个组件构成:调度器(scheduler)和应用管理器。(Applications Manager),其中调度器(可插拔,后文再做补充)仅根据各个应用程序的资源需求进行资源分配,剩余的交给ASM来做,如监控跟踪应用程序执行状态等。它的一些功能:

A:处理客户端请求B:启动或监控ApplicationMasterC:监控NodeManagerD:资源的分配与调度。

ApplicationMaster

管理一个在Yarn内运行的应用程序的每个实例。负责协调来自ResourceManager的资源,并通过NodeManager监视容器的执行和资源使用(CPU、内存的资源分配)。它的一些功能:A:负责数据的切分B:为应用程序申请资源并分配给内部的任务C:任务的监控与容错

NodeManager

A:管理yarn中每一个节点,从监督对一个容器的终生管理到监视资源和跟踪节点健康B:管理单个节点的资源C:处理来自ResourceManager的命令D:处理来自NodeManager的命令

Container

A:是Yarn中的资源抽象,可信息以理解为该任务所占用的资源B:对任务运行环境进行抽象,封装CPU、内存等多维度的资源以及环境变量、启动命令等任务运行相关的

Yarn的工作原理

  1. 用户向Yarn提交任务,其中包括ApplicationMaster程序,ResourceManager就会为这个任务申请一个Container,并交给对应的NodeManager管理,保证这个任务在这个Container中启动。

  2. 而后ApplicationMaster可以以轮询的方式通过RPC协议向ResourceManager注册,申请需求的资源,使得用户可以通过ResourcrManager去监控它,直到任务结束。

  3. ApplicationMaster申请到资源后,就会与对应的NodeManager通信,要求它启动任务,NodeManager就会为任务设置好任务运行环境,将任务写到一个脚本中,并启动它。

  4. 各个任务都会通过RPC协议向ApplicationMaster回报自己的状态和进度,使得ApplicationMaster可以掌握各个任务的状态,从而可以在任务失败的时候重新启动任务,用户也可以随时通过RPC去查询应用程序的状态。

  5. 最后任务结束,ApplicationMaster会向ResourceManager注销自己。

Hbase

Hbase架构

首先得介绍一下上图出现的几个部件:

Zookeeper:一个节点管理的组件,它用来保证集群的Hbase-master仅有一个,并且监控Hbase的健康状态,贮存着meta表信息

HMaster:负责管理RegionServer、实现负载均衡,处理来自客户端的请求

HRegionServer: 负责数据的存储,下面介绍一下RegionServer的结构

​ ①正常情况下在集群中一台机器会启动一个RegionServer

​ ②一个RegionServer中会存在多个Region(每个region达到一定阈值后还会实现分裂)

​ ③一个Region由一个HLog(其中记录了写入数据的归属信息,除了table和region名字外,还同时包括sequence number和timestamp)以及多个HStore组成

​ ④而每一个HStore则会由一个memory store以及多个StoreFile组成,而StoreFile则以Hfile的格式保存在hdfs上

Hbase数据写入

Hbase读写

⒈客户端与zk通信,获取meta表信息,告知客户端数据应该存储在哪些RegionServer中

⒉而后发送请求到匹配的RegionServer中,数据将先写入WAL文件中,用作容灾备份

⒊数据继而写入memoryStore中,当数据量达到128M时就会被flush成HFile文件存储在hdfs上

Hbase读取数据

⒈客户端与zk通信,获取meta表信息,告知客户端数据应该存储在哪些RegionServer中

⒉根据zk所返回的RegionServer信息,客户端会将该元数据表加载到本地并进行缓存。然后在表中确定待检索rowkey所在的RegionServer信息。

⒊根据数据所在RegionServer的访问信息,客户端会向该RegionServer发送真正的数据读取请求。

 


作者:蛋挞

日期:2018-11-12

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章