0. 说明
HDFS 文件概念 && HDFS 启动过程分析
1. HDFS 文件概念
【1.1 NameNode 职能】
存储文件类型、大小、权限、路径等等元数据
通过 edits(编辑日志) 和 fsimage(镜像文件) 进行存储
查看编辑日志命令
# 查看当前目录 [centos@s101 current]$ pwd /home/centos/ha/dfs/name1/current # 查看编辑日志文件并输出到指定目录 [centos@s101 current]$ hdfs oev -i edits_0000000000000000508-0000000000000000508 -o ~/testdata/edits.xml -p xml
编辑日志文件分析
<RECORD> <!-- OP_ADD是添加文件 --> <OPCODE>OP_ADD</OPCODE> <DATA> <TXID>10</TXID> // <!-- 事务id --> <LENGTH>0</LENGTH> // 长度为0 <INODEID>16386</INODEID> //文件id <PATH>/1.sh._COPYING_</PATH> //复制中文件 <REPLICATION>3</REPLICATION> <MTIME>1532249632886</MTIME> <ATIME>1532249632886</ATIME> <BLOCKSIZE>134217728</BLOCKSIZE> <CLIENT_NAME>DFSClient_NONMAPREDUCE_300367892_1</CLIENT_NAME> <CLIENT_MACHINE>192.168.23.101</CLIENT_MACHINE> <OVERWRITE>true</OVERWRITE> <PERMISSION_STATUS> <USERNAME>centos</USERNAME> <GROUPNAME>supergroup</GROUPNAME> <MODE>420</MODE> </PERMISSION_STATUS> <RPC_CLIENTID>afd88564-d970-4754-81fe-0b427f52d389</RPC_CLIENTID> <RPC_CALLID>3</RPC_CALLID> </DATA> </RECORD>
编辑日志中,存放的是操作步骤,包括用户写操作和系统内部写操作
eg:在写操作过程中,整个流程分为以下阶段
- 创建copying文件
- 在copying文件中写入数据
- 重命名文件
查看镜像文件,镜像文件中,存放所有文件和文件夹的源信息的树形结构
# 查看当前所在目录 [centos@s101 current]$ pwd /home/centos/ha/dfs/name1/current # 查看镜像文件并保存到指定目录 [centos@s101 current]$ hdfs oiv -i fsimage_0000000000000000817 -o ~/testdata/fsimage.xml -p XML
【1.2 DataNode 职能】
存储真实数据,通过blk(块)方式存储
真实数据存储目录(/home/centos/hadoop 为 HDFS 工作目录)如下:
/home/centos/hadoop/dfs/data1/current
【1.3 副本概念】
文件备份数,通过 hdfs-site.xml 指定副本数
【1.4 块】
HDFS 文件在存储时,是以块为单位进行存储,块大小即文件块的最大值
块大小为 128M
【1.5 HDFS 配置文件 hdfs-site.xml】
除了以下还可以设置 副本数 [dfs.replication] 、块大小 [dfs.blocksize]
<configuration> <!-- value标签需要写本机ip --> <property> <name>fs.defaultFS</name> <value>hdfs://s101</value> <description>指定文件系统</description> </property> <property> <name>hadoop.tmp.dir</name> <value>/home/centos/hadoop</value> <description>指定工作目录</description> </property> </configuration>
2. HDFS 启动过程分析
【2.1 启动 NameNode】
0. NameNode 先进入安全模式,在此模式下,文件均处于只读状态
1. NameNode 将 fsimage 文件加载到内存
2. 将 edits_inprogress 实例化为 edits 文件
3. NameNode 将 edits 文件加载到内存
4. 将 fsimage 文件与 edits 文件进行融合,通过旧的 fsimage 文件重现 edits 文件的操作步骤,生成新的 fsimage 文件
5. 退出安全模式,文件可写
【2.2 安全模式 Safemode】
安全模式,在此模式下,文件均处于只读状态
# 进入安全模式 hdfs dfsadmin -safemode enter # 离开安全模式 hdfs dfsadmin -safemode leave # 得到当前的状态 hdfs dfsadmin -safemode get # 等待 hdfs dfsadmin -safemode wait
【2.3 edits_inprogress 文件说明】
edits_inprogress 文件为 Hadoop 从开始到停止过程中做的操作
【2.4 手动滚动镜像文件 && 编辑日志】
# 编辑日志滚动 hdfs dfsadmin -rollEdits # 先进入安全模式,然后手动滚动镜像文件 hdfs dfsadmin -safemode enter hdfs dfsadmin -saveNamespace