hadoop的分布式文件系统HDFS的存储方式是,将数据分红block,分布式存储在整个hadoop集群的datanode中,每一个block默认的大小是64M,这些block文件的具体存储位置是在hadoop的配置文件中定义的,进入/home/hadoop2/hadoop2/etc/hadoop的配置文件目录(hadoop版本为社区版2.2.0):html
vi /home/hadoop2/hadoop2/etc/hadoop/hdfs-site.xml <configuration> <property> <name>dfs.namenode.secondary.http-address</name> <value>master:9001</value> </property> <property> <name>dfs.namenode.name.dir</name> <value>file:/home/hadoop2/dfs/name</value> </property> <property> <name>dfs.datanode.data.dir</name> <value>file:/home/hadoop2/dfs/data</value> </property> <property> <name>dfs.replication</name> <value>2</value> </property> <property> <name>dfs.webhdfs.enabled</name> <value>true</value> </property> </configuration>
其中,标黄色的属性dfs.datanode.data.dir为block存储路径的设置选项。node
正常状况下,咱们如上图中的设置本身设定的路径就能够了;可是,随着hdfs中的数据量愈来愈大,会出现datanode上block存储路径所在的挂载点空间不足的状况,本文中的状况就是 /home 挂载点的剩余空间即将不足了,可是在该datanode主机上,/ 挂载点还有很是多的剩余空间,咱们但愿将数据存储到 / 挂载点的目录下,防止 /home 挂载点被塞满。web
这样咱们首先须要切换到root管理员用户下,由于 / 挂载点的拥有者是root,咱们的hadoop2用户对该目录没有足够的权限。接着咱们在该目录下建立一个存储block的文件目录:负载均衡
su -mkdir /hdfs/data
这样还不能直接设置路径,因为咱们是用root用户建立的目录,该目录的拥有者和组群都是root,hadoop2用户没有足够权限,若是设置为datanode的block存储路径,将会抛出异常,致使datanode进程关闭,hadoop集群没法正常启动。咱们须要更改/hdfs目录及其子目录的拥有者和组群为hadoop2,以下:分布式
cd /
chown hadoop2:hadoop2 -R /hdfs
chown命令用于修改全部者,其中,hadoop2:hadoop2为拥有者和组群,-R为迭代修改全部子目录和文件。oop
这样咱们就能够修改hdfs-site.xml文件的datanode的属性为多个路径:spa
<property> <name>dfs.datanode.data.dir</name> <value>file:///home/hadoop2/dfs/data,/hdfs/data</value> </property>
路径之间只需用逗号 “ , ”分隔就能够了。code
这样设置后,从新启动集群的dfs,bin/start-dfs.sh,经过jps命令查看集群的相关进程是否都正常启动:xml
jps 6935 HQuorumPeer 6115 SecondaryNameNode 6423 NodeManager 6317 ResourceManager 18005 Bootstrap 5837 NameNode 5956 DataNode 7143 HRegionServer 7005 HMaster 2351 Jps
标黄色的为启动dfs后必须存在的进程,其余的进程为Hbase相关进程。这样设置启动之后,再往HDFS中写入数据时,产生的block数据块就会分别写入两个不一样的目录中,均匀分布,不会出现一个路径的挂载空间不足的状况,若是再次占满,能够再次挂载新的磁盘,继续添加路径。htm
另外,不一样的datanode中,block的路径属性能够设置为不相同,不影响集群的正常运行。