项目使用的hadoop已经存放了3000W+的文件,
为了节省成本,当时抢建平台时,使用了组装服务器+普通硬盘
hadoop每次做du操作都非常耗时,于是把hadoop代码改了一个
使用一个bash脚本替代原来du操作。
bash:
#/bin/sh
mydf=$(df $2 | grep -vE ‘^Filesystem|tmpfs|cdrom’ | awk ‘{ print $3 }’)
echo -e “$mydf\t$2”
java:hadoop\src\core\org\apache\hadoop\fs\DU.java:168行的toString()及getExecString()方法
public String toString() {
return
“mydu -sk ” + dirPath +”\n” +
used + “\t” + dirPath;
}protected String[] getExecString() {
return new String[] {“mydu”, “-sk”, dirPath};
}
改造后,原来的du操作其他不耗时。
只是存在统计不准确的问题,不过并不影响hadoop运作。