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的路徑屬性能夠設置爲不相同,不影響集羣的正常運行。