每個(gè)磁盤都有默認(rèn)的數(shù)據(jù)塊大小,這是磁盤進(jìn)行數(shù)據(jù)讀/寫的最小單位撒穷。而構(gòu)建于單個(gè)磁盤之上的文件系統(tǒng)(linux文件系統(tǒng))通過磁盤塊來管理該文件系統(tǒng)中的塊聋丝,該文件系統(tǒng)中的文件大小是磁盤塊的整數(shù)倍蒲犬。磁盤塊的大小一般為512字節(jié)陨收,其讀寫的最小單位是磁盤塊的最小單位.文件占用的塊由inode進(jìn)行管理,記錄該文件存放數(shù)據(jù)的N個(gè)block的物理地址没佑。
HDFS同樣也有塊的概念,HDFS文件系統(tǒng)中的塊指的是linux文件毕贼,分布式文件就是有多個(gè)linux文件(塊)組成。其最小塊單位就是一個(gè)Linux文件的大小蛤奢,默認(rèn)為64MB鬼癣,其分片成的linux文件的文件名有HDFS的namenode管理,該節(jié)點(diǎn)還管理了linux文件對應(yīng)datanode節(jié)點(diǎn)的映射關(guān)系啤贩。
假設(shè)有一個(gè)1G的大文件待秃,在linux文件系統(tǒng)上就是一個(gè)文件,由1G/512b的block組成痹屹;在HDFS上需要1024MB/64MB=16塊章郁,即16個(gè)linux文件組成,所以相當(dāng)于一個(gè)普通1G的文件分成了16個(gè)小文件志衍,在HDFS上的namenode會(huì)記錄1G文件名對應(yīng)16個(gè)文件名映射關(guān)系和16個(gè)文件名在對應(yīng)datanote節(jié)點(diǎn)上的映射關(guān)系(備份除外)暖庄。datanote節(jié)點(diǎn)上的16個(gè)小文件就是linux文件聊替,在各自datanote節(jié)點(diǎn)上的inode里記錄了16個(gè)文件對應(yīng)物理磁盤的映射關(guān)系。簡而言之:1G的分布式文件轉(zhuǎn)換成16個(gè)linux文件培廓,HDFS就是實(shí)現(xiàn)了拆分文件功能惹悄,當(dāng)然由于考慮單點(diǎn)故障原因,它把每個(gè)文件復(fù)制了3份(默認(rèn)),不管哪個(gè)節(jié)點(diǎn)出故障可以合成完整的一個(gè)1G文件肩钠。