在配置hbase集群將 hdfs 掛接到其它鏡像盤(pán)時(shí),有不少困惑的地方,結(jié)合以前的資料再次學(xué)習(xí); 大數(shù)據(jù)底層技術(shù)的三大基石起源于Google在2006年之前的三篇論文GFS、Map-Reduce、 Bigtable,其中GFS、Map-Reduce技術(shù)直接支持了ApacheHadoop項(xiàng)目的誕生,Bigtable催生了NoSQL這個(gè)嶄新的數(shù)據(jù)庫(kù)領(lǐng)域,由于map-Reduce處理框架高延時(shí)的缺陷, Google在2009年后推出的Dremel促使了實(shí)時(shí)計(jì)算系統(tǒng)的興起,以此引發(fā)大數(shù)據(jù)第二波技術(shù)浪潮,一些大數(shù)據(jù)公司紛紛推出自己的大數(shù)據(jù)查詢(xún)分析產(chǎn)品,如: Cloudera 開(kāi)源了大數(shù)據(jù)查詢(xún)分析引擎 Impala 、 Hortonworks 開(kāi)源了 Stinger、 Fackbook 開(kāi)源了 Presto 、UC Berkeley AMPLAB實(shí)驗(yàn)室開(kāi)發(fā)了 Spark 計(jì)算框架,所有這些技術(shù)的數(shù)據(jù)來(lái)源均基于hdsf, 對(duì)于 hdsf 最基本的不外乎就是其讀寫(xiě)操作
目錄:
hdfs 名詞解釋
hdsf 架構(gòu)
NameNode(NN)
Secondary NN
hdfs 寫(xiě)文件
hdfs 讀文件
block持續(xù)化結(jié)構(gòu)
HDFS名詞解釋?zhuān)?/p>
Block: 在HDFS中,每個(gè)文件都是采用的分塊的方式存儲(chǔ),每個(gè)block放在不同的datanode上,每個(gè)block的標(biāo)識(shí)是一個(gè)三元組( block id, numBytes,generationStamp ),其中block id是具有唯一性,具體分配是由namenode節(jié)點(diǎn)設(shè)置,然后再由datanode上建立block文件,同時(shí)建立對(duì)應(yīng)block meta文件
Packet: 在DFSclient與DataNode之間通信的過(guò)程中,發(fā)送和接受數(shù)據(jù)過(guò)程都是以一個(gè)packet為基礎(chǔ) 的方式進(jìn)行
Chunk: 中文名字也可以稱(chēng)為塊,但是為了與block區(qū)分,還是稱(chēng)之為chunk。在DFSClient與DataNode之間通信的過(guò)程中,由于文件采用的是基于塊的方式來(lái)進(jìn)行的,但是在發(fā)送數(shù)據(jù)的過(guò)程中是以packet的方式來(lái)進(jìn)行的, 每個(gè)packet包含了多個(gè)chunk ,同時(shí)對(duì)于每個(gè)chunk進(jìn)行checksum計(jì)算,生成checksum bytes
小結(jié):
Packet結(jié)構(gòu)與定義: Packet分為兩類(lèi),一類(lèi)是實(shí)際數(shù)據(jù)包,另一類(lèi)是heatbeat包。一個(gè)Packet數(shù)據(jù)包的組成結(jié)構(gòu),如圖所示

上圖中,一個(gè)Packet是由Header和Data兩部分組成,其中Header部分包含了一個(gè)Packet的概要屬性信息,如下表所示:

Data部分是一個(gè)Packet的實(shí)際數(shù)據(jù)部分,主要包括一個(gè)4字節(jié)校驗(yàn)和(Checksum)與一個(gè)Chunk部分,Chunk部分最大為512字節(jié)
在構(gòu)建一個(gè)Packet的過(guò)程中,首先將字節(jié)流數(shù)據(jù)寫(xiě)入一個(gè)buffer緩沖區(qū)中,也就是從偏移量為25的位置(checksumStart)開(kāi)始寫(xiě)Packet數(shù)據(jù)Chunk的Checksum部分,從偏移量為533的位置(dataStart)開(kāi)始寫(xiě)Packet數(shù)據(jù)的Chunk Data部分,直到一個(gè)Packet創(chuàng)建完成為止。
當(dāng)寫(xiě)一個(gè)文件的最后一個(gè)Block的最后一個(gè)Packet時(shí),如果一個(gè)Packet的大小未能達(dá)到最大長(zhǎng)度,也就是上圖對(duì)應(yīng)的緩沖區(qū)中,Checksum與Chunk Data之間還保留了一段未被寫(xiě)過(guò)的緩沖區(qū)位置,在發(fā)送這個(gè)Packet之前,會(huì)檢查Chunksum與Chunk Data之間的緩沖區(qū)是否為空白緩沖區(qū)(gap),如果有則將Chunk Data部分向前移動(dòng),使得Chunk Data 1與Chunk Checksum N相鄰,然后才會(huì)被發(fā)送到DataNode節(jié)點(diǎn)
hdsf架構(gòu):
hdfs的構(gòu)架圖網(wǎng)上一堆,抓了一張表述比較清楚的圖如下, 主要包含因類(lèi)角色:Client、NameNode、SecondayNameNode、DataNode

HDFS Client: 系統(tǒng)使用者,調(diào)用HDFS API操作文件;與 NN交互獲取文件元數(shù)據(jù) ;與DN交互進(jìn)行數(shù)據(jù)讀寫(xiě), 注意: 寫(xiě)數(shù)據(jù)時(shí)文件 切分由Client完成
Namenode: Master節(jié)點(diǎn)(也稱(chēng)元數(shù)據(jù)節(jié)點(diǎn)),是系統(tǒng)唯一的管理者。負(fù)責(zé)元數(shù)據(jù)的管理( 名稱(chēng)空間和數(shù)據(jù)塊映射信息 );配置 副本策略 ;處理客戶(hù)端請(qǐng)求
Datanode: 數(shù)據(jù)存儲(chǔ)節(jié)點(diǎn)(也稱(chēng)Slave節(jié)點(diǎn)), 存儲(chǔ)實(shí)際的數(shù)據(jù);執(zhí)行 數(shù)據(jù)塊的讀寫(xiě);匯報(bào)存儲(chǔ)信息給NN
Secondary NameNode: 小弟角色,分擔(dān)大哥namenode的工作量;是NameNode的冷備份; 合并fsimage和fsedits然后再發(fā)給namenode, 注意: 在hadoop 2.x 版本,當(dāng)啟用 hdfs ha 時(shí),將沒(méi)有這一角色。(詳見(jiàn)第二單)
解釋說(shuō)明:
hdfs構(gòu)架原則:
NameNode:
NameNode是整個(gè)文件系統(tǒng)的管理節(jié)點(diǎn),也是HDFS中最復(fù)雜的一個(gè)實(shí)體,它維護(hù)著HDFS文件系統(tǒng)中最重要的兩個(gè)關(guān)系: