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.xml
vi a.xml
 

<RECORD>标签中就是一条条操作的记录,操作的行为是创建文件夹(<OPCODE>OP_MKDIR</OPCODE>),创建的目录是tools(<PATH>/tools</PATH>)
如果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文件,继续进行下载操作。
合并发生的时机?
 当HDFS发出 检查点( checkpoint ) 的时候,触发进行合并。
 默认∶(1)每隔60分钟,参数: fs.check.peroid
 (2)当edits文件达到64M,参数: fs.check.size
补充一点:检查点
 (1)HDFS:触发日志的合并
 (2)Oracle:会以最高优先级唤醒数据库的写进程,写脏数据
 (3)Spark和Flink:容错机制
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激活另外的主节点。



















