20170831202928457.png
每個磁盤都有默認的數據塊大小,這是磁盤進行數據讀/寫的最小單位。而構建于單個磁盤之上的文件系統(linux文件系統)通過磁盤塊來管理該文件系統中的塊,該文件系統中的文件大小是磁盤塊的整數倍。磁盤塊的大小一般為512字節,其讀寫的最小單位是磁盤塊的最小單位.文件占用的塊由inode進行管理,記錄該文件存放數據的N個block的物理地址。
HDFS同樣也有塊的概念,HDFS文件系統中的塊指的是linux文件,分布式文件就是有多個linux文件(塊)組成。其最小塊單位就是一個Linux文件的大小,默認為64MB,其分片成的linux文件的文件名有HDFS的namenode管理,該節點還管理了linux文件對應datanode節點的映射關系。
假設有一個1G的大文件,在linux文件系統上就是一個文件,由1G/512b的block組成;在HDFS上需要1024MB/64MB=16塊,即16個linux文件組成,所以相當于一個普通1G的文件分成了16個小文件,在HDFS上的namenode會記錄1G文件名對應16個文件名映射關系和16個文件名在對應datanote節點上的映射關系(備份除外)。datanote節點上的16個小文件就是linux文件,在各自datanote節點上的inode里記錄了16個文件對應物理磁盤的映射關系。簡而言之:1G的分布式文件轉換成16個linux文件,HDFS就是實現了拆分文件功能,當然由于考慮單點故障原因,它把每個文件復制了3份(默認),不管哪個節點出故障可以合成完整的一個1G文件。