當向HDFS上寫文件時,可以通過設置dfs.blocksize配置項來設置文件的block size,這導致HDFS上不同文件的block size是不同的。有時候我們需要知道HDFS上某個文件的block size,比如想知道該該文件作為job的輸入會創建幾個map等。Hadoop FS Shell提供了壹個-stat選項可以達到目的。官方文檔描述這個選項時遺漏了可選參數。-stat選項的使用格式是:
{HADOOP_HOME}/bin/hadoop fs –stat [format]
其中可選的format被官方文檔遺漏了。下面列出了format的形式:
%b:打印文件大小(目錄為0)
%n:打印文件名
%o:打印block size (我們要的值)
%r:打印備份數
%y:打印UTC日期 yyyy-MM-dd HH:mm:ss
%Y:打印自1970年1月1日以來的UTC微秒數
%F:目錄打印directory, 文件打印regular file
當使用-stat選項但不指定format時候,只打印文件創建日期,相當於%y:
[hadoop@cMaster hadoop-2.5.2]$ bin/hadoop fs -stat /filein/file_128M.txt15/03/18 09:47:26 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
2015-01-06 01:43:23
下面的例子打印文件的block size和備份個數:
[hadoop@cMaster hadoop-2.5.2]$ bin/hadoop fs -stat "%o %r" /filein/file_1024M.txt
15/03/18 09:48:25 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
134217728 1
可以看到/filein/file_1024M.txt文件的blocksize大小為128M,有壹份。