dfs.namenode.name.dir 和dfs.datanode.data.dir分别是什么目录?
dfs.namenode.name.dir 和dfs.datanode.data.dir分别是什么目录?有何作用?我们可以在本地文件系统中找到HDFS文件系统中文件或目录的位置吗?
我们可以在本地文件系统的以上两个目录中找到HDFS文件系统中某个具体的文件或目录的位置吗?是否存在一一映射的关系?
dfs.namenode.name.dir是保存FsImage镜像的目录,作用是存放hadoop的名称节点namenode里的metadata;dfs.datanode.data.dir是存放HDFS文件系统数据文件的目录,作用是存放hadoop的数据节点datanode里的多个数据块。
根据hdfs-site.xml中的配置,在本地文件系统中,dfs.namenode.name.dir对应目录是file:/usr/local/hadoop/tmp/dfs/name,dfs.datanode.data.dir对应目录是file:/usr/local/hadoop/tmp/dfs/data。
HDFS文件系统中的文件或目录与本地Linux系统中的文件或目录不存在一一对
dfs.name.dir
Determines where on the local filesystem the DFS name node should store the name table(fsimage). If this is a comma-delimited list of directories then the name table is replicated in all of the directories, for redundancy.
这个参数用于确定将HDFS文件系统的元信息保存在什么目录下。
如果这个参数设置为多个目录,那么这些目录下都保存着元信息的多个备份。
如:
<property>
<name>dfs.name.dir</name>
<value>/pvdata/hadoopdata/name/,/opt/hadoopdata/name/</value>
</property>
dfs.data.dir
Determines where on the local filesystem an DFS data node should store its blocks. If this is a comma-delimited list of directories, then data will be stored in all named directories, typically on different devices. Directories that do not exist are ignored.
这个参数用于确定将HDFS文件系统的数据保存在什么目录下。
我们可以将这个参数设置为多个分区上目录,即可将HDFS建立在不同分区上。
如:
<property>
<name>dfs.data.dir</name>
<value>/dev/sda3/hadoopdata/,/dev/sda1/hadoopdata/</value>
</property>
如何处理多次格式化文件系统后,datanode,namenode无法启动的问题
一、问题描述
当我多次格式化文件系统时,如
root@localhost:/usr/local/hadoop-1.0.2# bin/hadoop namenode -format
会出现datanode无法启动,查看日志,发现错误为:
2012-04-20 20:39:46,501 ERROR org.apache.hadoop.hdfs.server.datanode.DataNode: java.io.IOException: Incompatible namespaceIDs in /home/gqy/hadoop/data: namenode namespaceID = 155319143; datanode namespaceID = 1036135033
二、问题产生原因
当我们执行文件系统格式化时,会在namenode数据文件夹(即配置文件中dfs.name.dir在本地系统的路径)中保存一个current/VERSION文件,记录namespaceID,标识了所格式化的 namenode的版本。如果我们频繁的格式化namenode,那么datanode中保存(即配置文件中dfs.data.dir在本地系统的路径)的current/VERSION文件只是你第一次格式化时保存的namenode的ID,因此就会造成datanode与namenode之间的id不一致。
三、解决办法
把配置文件中dfs.datadir在本地系统的路径下的current/VERSION中的namespaceID改为与namenode一样