⑴ hdfs適合存儲多大的單個文件
首先hdfs是建立在多個機器文件系統上的一個邏輯上的文件系統。它的底層數據以數據塊方式存儲,塊大小可進行調整。
假如你設置一個數據塊大小為256M,上傳一個1G的文件,它底層會將這個文件分成4塊存儲,每個塊256M。你在hdfs上看到的是一個完整的文件,隨時可對這個文件進行操作,無需關注它的存儲。就像你在操作系統上操作文件一樣,無需關注它存在那個磁碟哪個扇區
⑵ Hadoop中怎麼查看文件的block size
因為對控制文件的分片數目,進而控制文件的map個數非常感興趣,因此有查找如下資料的需求。下面來看看我總結的吧:)
當向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,有一份。
⑶ 怎麼查看hdfs 某個文件夾的文件塊
這種情況比較復雜!如果文件小於64MB,存儲按該文件的塊大小等於該文件的大小。
讀取時是根據存在namenode上面的映射表來讀取的。
按實際存儲的大小來讀取,不是從硬碟上面讀取的,是從HDFS
上面讀取的。
另外,在文件上傳時,就會根據塊的大小將各個塊分布到各個
datanode節點上面的。如果文件已經上傳,需要修改默認塊的大小,
那麼需要執行一條語句將HDFS上面的原有文件重新分塊並存儲。