2018-07-18期 Hadoop HDFS NameNode体系结构
在HDFS中有两种节点,分别是NameNode和DataNode。NameNode负责集群中与存储相关的调度,DataNode负责具体的存储任务。一、NameNode(元数据节点功能)
NameNode维护了整个文件系统的元数据信息,这些信息以两种形式的文件存储,一种是镜像文件(image文件),另一种是编辑日志(edit log)。NameNode会在文件系统启动时,动态地加载这些文件到内存中以响应客户端的读写请求。Namenode是中心服务器,单一节点(简化系统的设计和实现),负责管理文件系统的名称空间(namespace)以及客户端对文件的访问。文件操作,Namenode负责文件元数据的操作,DataNode负责处理文件内容的读写请求,跟文件内容相关的数据流不会经过Namenode,只会询问它跟那个DataNode联系,否则Namenode会成为系统的瓶颈。
副本存放在哪些DataNode上由Namenode来控制,根据全局情况作出块放置决定,读取文件时Namenode尽量让用户先读取最近的副本,降低带块消耗和读取延时。Namenode全权管理数据块的复制,它周期性地从集群中的每个Datanode接收心跳信号和块状态报告。接收到心跳信号意味着该Datanode节点工作正常。块状态报告包含了一个该Datanode上所有数据块的列表。Namenode是主节点,存储文件的元数据如文件名,文件目录结构,文件属性(生成时间,副本数,文件权限)以及每个文件的块列表,以及块所在的DataNode等等。
NameNode具体功能主要包括如下几个方面:
1、NameNode是HDFS中最重要的节点,负责维护HDFS,是HDFS中的主节点
2、NameNode负责接收客户端端发起的操作请求,包括HDFS 文件上传、下载、目录创建、浏览等
3、维护HDFS 元数据信息(fsimage),定期将HDFS内存中不常用的信息刷到磁盘上(fsimage文件中)
4、实时维护操作日志edits,保存HDFS的最新状态
5、负责管理文件系统的名称空间(namespace)
二、元数据文件(fsimage)
1、fsimage功能:
(1)FSImage文件是HDFS中名字节点NameNode上文件/目录元数据在特定某一时刻的持久化存储文件。它的作用不言而喻,在HA出现之前,NameNode因为各种原因宕机后,若要恢复或在其他机器上重启NameNode,重新组织元数据,就需要加载对应的FSImage文件、FSEditLog文件,并在内存中重做FSEditLog文件中的事务条目。
(2)hfsimage记录了HDFS文件系统元数据检查点,记录了HDFS最后一次检查点之前系统中所有目录和文件的序列化信息。
2、fsimage的保存目录:
$HADOOP_HOME/tmp/dfs/name/current
# ll fsimage_*
-rw-r--r--. 1 root root 58891 Jul 15 06:48 fsimage_0000000000000019746
-rw-r--r--. 1 root root 62 Jul 15 06:48 fsimage_0000000000000019746.md5
-rw-r--r--. 1 root root 58891 Jul 15 21:55 fsimage_0000000000000019747
-rw-r--r--. 1 root root 62 Jul 15 21:55 fsimage_0000000000000019747.md5
fsiamge由于是二进制文件,不可用直接查看,因此可以使用hdfs特定工具查看,下面在HDFS上上传一个文件来查看fsimage信息。
步骤1:创建目录并上传一个文件
# hadoop fs -mkdir -p /fsimage/test
# hadoop fs -put /root/hadoop-2.4.1.tar.gz /fsimage/test
步骤2:生成的fsimage可读文件
# ll fsimage_*
-rw-r--r--. 1 root root 58891 Jul 15 21:55 fsimage_0000000000000019747
-rw-r--r--. 1 root root 62 Jul 15 21:55 fsimage_0000000000000019747.md5
-rw-r--r--. 1 root root 58891 Jul 15 22:05 fsimage_0000000000000019749
-rw-r--r--. 1 root root 62 Jul 15 22:05 fsimage_0000000000000019749.md5
#hdfs oiv -i fsimage_0000000000000019749 -o ~/fsimage/fsimage_0000000000000019749.txt
或者生产xml文件
# hdfs oiv -i fsimage_0000000000000019749 -o ~/fsimage/fsimage_0000000000000019749.xml -p XML
步骤3:查看fsimage信息
100035090107374431719747
2058116385DIRECTORY1531142641775root:supergroup:rwxr-xr-x9223372036854775807-1
16386FILEhadoop-2.4.1.tar.gz115293727674711529372766100134217728root:supergroup:rw-r--r--10737418251001134217728
107374182610024439028
.....
这个一个可读的xml文件,里面记录了每个文件的相信信息。
三、Edits文件(操作日志文件)
edits文件保存了HDFS最新状态,即保留了最后一次检查点之后的所有操作。
保存目录:$HADOOP_HOME/tmp/dfs/name/current
# ll edits_*
-rw-r--r--. 1 root root 1048576 Jul 10 01:47 edits_0000000000000019744-0000000000000019746
-rw-r--r--. 1 root root 1048576 Jul 15 06:48 edits_0000000000000019747-0000000000000019747
-rw-r--r--. 1 root root 42 Jul 15 22:05 edits_0000000000000019748-0000000000000019749
-rw-r--r--. 1 root root 1048576 Jul 15 22:06 edits_0000000000000019750-0000000000000019761
-rw-r--r--. 1 root root 42 Jul 15 22:25 edits_0000000000000019762-0000000000000019763
-rw-r--r--. 1 root root 1048576 Jul 15 22:25 edits_inprogress_0000000000000019764
edits文件同样为二进制文件,如果要查看文件内容需要利用hdfs工具对其进行转换
#hdfs oev -i edits_inprogress_0000000000000019764 -o /root/edits/edits_inprogress_0000000000000019764.xml
# more /root/edits/edits_inprogress_0000000000000019764.xml
-56
OP_START_LOG_SEGMENT
19764
OP_MKDIR
19765
0
20585
/20180716
1531718723942
root
supergroup
493
比如该文件中记录的操作为创建了/20180716目录
页:
[1]