我們的HDFS集群中有11個(gè)DataNode,初始時(shí)每臺(tái)機(jī)器僅上了一塊2.4T大的SAS盤/dev/sda,數(shù)據(jù)分區(qū)1.8T。上線運(yùn)行4個(gè)月,集群存儲(chǔ)總使用量超過(guò)了70%,無(wú)法滿足日益增長(zhǎng)的存儲(chǔ)需求,需要改進(jìn)。
之前我們的HDFS一直采用默認(rèn)的塊副本數(shù)3?,F(xiàn)在來(lái)看,有兩個(gè)節(jié)點(diǎn)同時(shí)出現(xiàn)問(wèn)題的概率非常小,可以降低為2,釋放一些空間。
另外,加盤也是十分有必要的。HDFS自帶冗余機(jī)制,所以數(shù)據(jù)盤都不用做RAID。每臺(tái)機(jī)器上面還有3個(gè)空閑盤位,直接插滿。
修改副本數(shù)
在CM的HDFS配置中找到dfs.replication項(xiàng),修改為2,重啟HDFS。
但這樣只能保證新寫入的塊副本數(shù)變?yōu)?,原有塊仍然是3副本,因此還需要執(zhí)行命令hdfs dfs -setrep 2 -R -w /dw。其中/dw是指定的路徑,-R參數(shù)則表示包含子目錄。
通過(guò)執(zhí)行hdfs fsck /dw命令,觀察“Average block replication”一項(xiàng),可以看出副本調(diào)整的過(guò)程是否已經(jīng)完成。
存儲(chǔ)擴(kuò)容
每個(gè)節(jié)點(diǎn)各加一塊1.2T的盤/dev/sdb,以及兩塊2.4T的盤/dev/sdc、/dev/sdd。然后將這些盤配置到HDFS中作為數(shù)據(jù)盤來(lái)使用。
由于每塊盤的處理流程都相同,因此僅以/dev/sdb為例來(lái)描述。
- 創(chuàng)建ext4文件系統(tǒng)
執(zhí)行:mkfs -t ext4 /dev/sdb。如果沒(méi)有創(chuàng)建文件系統(tǒng),mount時(shí)會(huì)報(bào)錯(cuò):Unknown filesystem type '(null)'。
因?yàn)橛猛揪褪羌僅DFS存儲(chǔ),無(wú)需分區(qū),所以直接省略了fdisk的步驟。在Linux中,磁盤不分區(qū)也是可以用的。 - 創(chuàng)建數(shù)據(jù)目錄,并更改其權(quán)限和所有者
執(zhí)行:
mkdir -p /dfs_local/sdb
chmod -R 777 /dfs_local/sdb
chown -R hdfs:hadoop /dfs_local/sdb
hdfs-site.xml中默認(rèn)指定的權(quán)限是755,但可以通過(guò)dfs.datanode.data.dir.perm配置項(xiàng)來(lái)更改。 - 掛載
簡(jiǎn)單地執(zhí)行mount命令就可以掛載。但穩(wěn)妥起見(jiàn),應(yīng)該配置成開(kāi)機(jī)自動(dòng)掛載。
修改/etc/fstab文件,加入如下一行:
/dev/sdb /dfs_local/sdb ext4 defaults 0 0
普通數(shù)據(jù)盤既不需要備份也不需要fsck檢查,因此dump和pass都設(shè)為0。
保存后,執(zhí)行mount -a命令,使其立即生效。使用df -h可以查看是否成功掛載。 - 加入HDFS
進(jìn)入CM界面,找到HDFS數(shù)據(jù)目錄的配置項(xiàng)dfs.data.dir,加入上面設(shè)定的掛載路徑,刷新配置即可,無(wú)需重啟服務(wù)。