Namenode中主要存储fsimage和editlog文件,Datanode中主要存储数据块blk文件。下面分别介绍Namenode和Datanode中的文件存储结构。
文章目录
1 Namenode
1.1 文件所在位置
文件所在位置由hdfs-site.xml中的配置项dfs.namenode.name.dir配置。这些文件都存于${dfs.namenode.name.dir}/current文件夹下,在dfs.namenode.name.dir配置项中可以配置多个目录,各个目录存储的文件结构和内容都完全一样,配置多个目录只是起到冗余备份的作用。
<property>
<name>dfs.namenode.name.dir</name>
<value>file://${hadoop.tmp.dir}/dfs/name</value>
</property>
dfs.namenode.name.dir在hdfs-site.xml中定义的默认值为file://$
{hadoop.tmp.dir}/dfs/name,其中hadoop.tmp.dir是core-site.xml中的配置项,hadoop.tmp.dir的默认值为/tmp/hadoop-$
{user.name}。因此文件默认都是存放在/tmp/hadoop-$
{user.name}/dfs/name/current路径下的。
<property>
<name>hadoop.tmp.dir</name>
<value>/tmp/hadoop-${user.name}</value>
<description>A base for other temporary directories.</description>
</property>
具体到我的服务器,dfs.namenode.name.dir用了配置的/cloud/data/hadoop/dfs/nn,因此我的服务器上的文件的路径就直接为:/cloud/data/hadoop/dfs/nn/current。
<property>
<name>dfs.namenode.name.dir</name>
<value>/cloud/data/hadoop/dfs/nn/</value>
</property>
1.2 文件目录结构
nn文件夹下的内容有(之所以从nn文件夹而不是current文件夹下开始是因为要讲解和current同级的in_user.lock文件):
nn
├── current
│ ├── edits_0000000001362702459-0000000001363401818
│ ├── edits_0000000001363401819-0000000001363931603
│ ├── edits_0000000001363931604-0000000001364566627
│ ├── edits_0000000001364566628-0000000001365069009
│ ├── edits_0000000001365069010-0000000001365209404
│ ├── edits_0000000001365209405-0000000001365211445
│ ├── edits_0000000001365211446-0000000001365211447
│ ├── edits_0000000001365211448-0000000001365211451
│ ├── edits_0000000001365211452-0000000001365211453
│ ├── edits_0000000001365211454-0000000001365211625
│ ├── edits_0000000001365211626-0000000001365213635
│ ├── edits_inprogress_0000000001365213636
│ ├── fsimage_0000000001365431029
│ ├── fsimage_0000000001365431029.md5
│ ├── fsimage_0000000001365431090
│ ├── fsimage_0000000001365431090.md5
│ ├── seen_txid
│ └── VERSION
└── in_use.lock
1.3 文件目录解析
从上面的目录树中可以发现,主要有6类文件:
1.3.1 VERSION文件
VERSION是java属性文件,内容大致如下:
namespaceID=644097999
clusterID=CID-da027b7b-4e9f-4287-be7a-03735d895bc2
cTi