hadoop的体系架构

  • HDFS的体系架构
    • NameNode
      • edits文件(客户端的操作日志)
      • fsimage文件(元信息文件)
    • DataNode
    • Secondary NameNode
  • Yarn的体系架构
  • HBase
  • 主从架构的单点故障的问题

HDFS的体系架构

NameNode

NameNode:主节点
职责:
(1)管理HDFS
(2)接收客户端的请求:数据上传,数据下载
(3)维护HDFS:维护edits文件(客户端的操作日志)、维护fsimage文件(元信息文件)

所处路径:
$HADOOP_HOME/tmp/dfs
( /root/training/hadoop-2.7.3/tmp/dfs )

edits文件(客户端的操作日志)

所处路径:
$HADOOP_HOME/tmp/dfs/name/current
( /root/training/hadoop-2.7.3/tmp/dfs/name/current )

edits_inprogress_0000000000000000105是当前正在操作的日志,所有的edits文件都是二进制文件,使用一般的编辑器查看不了,所以可以使用下面这个命令来进行查看:

hdfs oev -i edits_inprogress_0000000000000000105 -o ~/a.xml# -i 后接输入文件(想查看的文件) -o后接输出文件

这里我们先对dfs进行一个创建目录的操作,然后这个操作也会被hdfs的日志记录下来

hdfs dfs -mkdir /tools

进行创建操作后,使用日志查看器进行查看(相当于转化成xml格式文件进行查看)

hdfs oev -i edits_inprogress_0000000000000000105 -o ~/a.xmlvi a.xml

标签中就是一条条操作的记录,操作的行为是创建文件夹(OP_MKDIR),创建的目录是tools(/tools)

如果hdfs的元信息文件损坏,我们则可以通过日志文件进行恢复。

fsimage文件(元信息文件)

记录的是数据块的位置信息,冗余信息
位置:$HADOOP_HOME/tmp/dfs/name/current

下面将jdk的压缩包进行上传,fsimage文件中则会记录数据块的位置信息和冗余度。

hdfs dfs -put jdk-8u181-linux-x64.tar.gz /tools

提供元信息查看器

hdfs oiv -i fsimage_0000000000000000104 -o ~/b.xml -p XML

DataNode

DataNode:从节点
1、职责:按照数据块来保存数据:1.x:64M 2.x:128M
2、数据块的位置
$HADOOP_HOME/tmp/dfs/data/current/BP-90413187-192.168.157.111-1582475681214/current/finalized/subdir0/subdir0

Demo:上传数据 hdfs dfs -put jdk-8u181-linux-x64.tar.gz /tools,大概204M

数据块相加起来的大小就是之前上传jdk文件的大小。

设置数据块冗余度的一般原则:冗余度跟数据节点个数一致,最大不超过3

Secondary NameNode

Secondary NameNode:第二名称节点,跟NameNode运行在一起
1、不是NameNode热备
2、职责:定期进行日志信息的合并:把edits—-> fsimage文件
3、重点:掌握日志合并的过程(为什么Secondary NameNode要和NameNode运行在一起)


(1)将NameNode的edits日志和fsimage元信息文件下载至secondaryNameNode(copy)

(2)secondaryNameNode将edits日志和fsimage元信息合并成fsimage.check文件
(3)secondaryNameNode将fsimage.check文件上传到NameNode,NameNode对fsimage.check文件再进行维护。

这也解释了为什么Secondary NameNode要和NameNode运行在一起,因为在同一机台上,可以大幅度提高下载的速度和上传速度。

在下载和上传期间,会生产新的edits文件,这个时候会先暂存在edits_inprogress中,等到其他edits上传完成,又变成新的edits文件,继续进行下载操作。

合并发生的时机” />Yarn的体系架构

1、ResourceManager:主节点
职责:
(1)接收客户端的请求:执行MapReduce任务的请求
(2)资源的分配:CPU、内存、网络
(3)任务的分配:NodeManager

2、NodeManager:从节点
职责:
(1)从ResourceManager获取任务和资源
(2)执行任务

3、Yarn调度MapReduce任务的过程


(1)客户端发起任务 hadoop jar ***
(2)JobClient.java向ResourceManager请求创建任务ID
(3)JobClient.java将任务(jar文件)上传到HDFS
(4)JobClient.java向HDFS获取元信息(数据元信息、任务元信息)
(5)JobClient.java向ResourceManager提交任务:任务ID、数据元信息、任务元信息
(6)ResourceManager对任务进行初始化(谁来执行、资源怎么分配)
(7)ResourceManager将任务分配给NodeManager
(8)启动Application Container,任务都运行在 Container中。
(9)NodeManager根据第七步分配的数据和任务的元信息,向HDFS获取数据和任务。

为什么NodeManager和DataNode在同一机台?
因为NodeManager根据ResourceManager分配的数据和任务的元信息,向HDFS的DataNode获取数据和任务,如果在同一机台,获取的速度会很快,大大提高了性能。

4、Yarn的资源分配方式

(1)FIFO Scheduler 先来先得,问题:没有考虑任务的优先级
(2)Capacity Scheduler:容器管理的调度规则,允许多个组织共享集群的资源
(3)Fair Scheduler:公平调度原则,假设:任务具有相同的优先级,平均分配系统的资源。如果加入权重,那么会根据权重的占比来进行分配。

HBase

HBase:基于HDFS之上的NoSQL数据库
1、HMaster:主节点
2、RegionServer:从节点
3、ZooKeeper:当成“数据库”

主从架构的单点故障的问题

主从架构的单点故障的问题,需要实现HA(High Availablity高可用性)


HA(高可用性)核心思想:多几个主节点,但只有一个主节点处于Active状态,其他的主节点处于StandBy,一旦处于Active的主节点损坏,那么可以借助ZooKeeper激活另外的主节点。