环境说明

9个节点,7个DataNode,每个DataNode有3块硬盘,两块是后来加的,挂载在系统所在文件系统。

hdfs-site.xml配置


<property>
<name>dfs.datanode.data.dir</name>
<value>
/home/hadoop/develop/hadoop/hdfs/data,
/home/hadoop/develop/data/data1/hdfs,
/home/hadoop/develop/data/data2/hdfs
</value>
</property>


结果

这样hdfs在写数据的时候就会三个目录中轮询,一般这些目录是不同的块设备,不存在的目录会被忽略掉。

建议

如果有多个磁盘不建议做raid,因为做raid会有性能损失,还会导致一个磁盘坏了,整个硬盘也不能用了,而hadoop可以规避这个问题。

遇到的问题

第一次将挂载硬盘的目录直接作为HDFS的data目录,start-all.sh之后,所有的DataNode没有启动,看日志发现是对data1和data2目录没有权限(data1和data2分别挂载着一块硬盘),但是已经将data1和data2的目录权限改成777了。

查找发现原因:data1和data2所挂载的硬盘的根目录下有lost+found这个文件夹,而这个文件的权限是root,导致在hadoop用户下启动的hadoop在扫描配置文件中配置的data目录时,发现有文件hadoop用户没有写权限,就报错,DataNode进程也没启动。

解决方法:在data1和data2目录下分别建立hdfs文件夹,将hadoop的dfs.datanode.data.dir指向hdfs文件夹。