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:在写操作过程中,整个流程分为以下阶段

  1. 创建copying文件
  2. 在copying文件中写入数据
  3. 重命名文件

 

  查看镜像文件,镜像文件中,存放所有文件和文件夹的源信息的树形结构



# 查看当前所在目录
[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 从开始到停止过程中做的操作

  

CDH hdfs NFS Gateway启动失败 hdfs启动过程_centos

   【2.4 手动滚动镜像文件 && 编辑日志】



# 编辑日志滚动
hdfs dfsadmin -rollEdits

# 先进入安全模式,然后手动滚动镜像文件
hdfs dfsadmin -safemode enter
hdfs dfsadmin -saveNamespace