Hadoop是一個比較好用的分布式系統基礎架構了,下面我們來到各位介紹Hadoop更換du命令降低datanode磁盤IO例子,希望對各位帶來幫助.
背景介紹:近期,不少datanode節點的磁盤IO比較高,主要原因還是由于job數量的增多,以及規模的增大.
但任何可以降低磁盤IO消耗的手段,我們都可以嘗試一下,比如,我們經常可以看到hdfs用戶在執行"du -sk"命令:
- [root@idc1-server2 ~]# ps -ef| grep "du -sk"
- hdfs 17119 10336 1 00:57 ? 00:00:04 du -sk /data1/dfs/dn/current/BP-1281416642-10.100.1.2-1407274717062
- hdfs 17142 10336 1 00:57 ? 00:00:03 du -sk /data5/dfs/dn/current/BP-1281416642-10.100.1.2-1407274717062
- hdfs 17151 10336 1 00:57 ? 00:00:05 du -sk /data6/dfs/dn/current/BP-1281416642-10.100.1.2-1407274717062
- ... //Vevb.com
隨著datanode上的數據不斷增加,這樣頻繁的du操作,會耗時比較長,在CPU和磁盤IO很閑的時候,每次也都會耗時5秒左右,而在服務器負載比較高的時候,這樣的操作就會耗時很長時間.
于是,我們便考慮通過將原有的du命令替換,并基于df命令來編寫一個新的du命令來取而代之,代碼如下:
- [root@idc1-server2 ~]# mv /usr/bin/du /usr/bin/du.orig
- [root@idc1-server2 ~]# vim /usr/bin/du
- #!/bin/sh
- mydf=$(df -Pk $2 | grep -vE '^Filesystem|tmpfs|cdrom' | awk '{ print $3 }')
- echo -e "$mydft$2"
- [root@idc1-server2 ~]# chmod +x /usr/bin/du
不過這樣的話,統計出來的結果不就不準確了嗎?
但具體情況具體應對,一般來說,Hadoop的datanode都會采用不同的磁盤并劃分分區來存儲數據,那么使用df統計出來的結果,誤差應該是很小的.
新聞熱點
疑難解答