大數據分析期末複習

大數據分析期末複習

1. HDFS

簡述

HDFS(Hadoop Distributed File System),作爲Google File System(GFS)的實現,是Hadoop項目的核心子項目,是分佈式計算中數據存儲管理的基礎,是基於流數據模式訪問和處理超大文件的需求而開發的,可以運行於廉價的商用服務器上。它所具有的高容錯、高可靠性、高可擴展性、高獲得性、高吞吐率等特徵爲海量數據提供了不怕故障的存儲,爲超大數據集(Large Data Set)的應用處理帶來了很多便利。

適用、不適用的場景

HDFS特點:

  1. 高容錯性、可構建在廉價機器上
  2. 適合批處理
  3. 適合大數據處理
  4. 流式文件訪問

HDFS侷限:

  1. 不支持低延遲訪問
  2. 不適合小文件存儲
  3. 不支持併發寫入
  4. 不支持修改

HDFS架構

看兩張HDFS的架構圖。


 
hdfs.jpg

 
hdfs.jpg

HDFS由四部分組成,HDFS Client、NameNode、DataNode和Secondary NameNode。
HDFS是一個主/從(Mater/Slave)體系結構,HDFS集羣擁有一個NameNode和一些DataNode。NameNode管理文件系統的元數據,DataNode存儲實際的數據。

HDFS客戶端:就是客戶端。
1、提供一些命令來管理、訪問 HDFS,比如啓動或者關閉HDFS。
2、與 DataNode 交互,讀取或者寫入數據;讀取時,要與 NameNode 交互,獲取文件的位置信息;寫入 HDFS 的時候,Client 將文件切分成 一個一個的Block,然後進行存儲。

NameNode:即Master,
1、管理 HDFS 的名稱空間。
2、管理數據塊(Block)映射信息
3、配置副本策略
4、處理客戶端讀寫請求。

DataNode:就是Slave。NameNode 下達命令,DataNode 執行實際的操作。
1、存儲實際的數據塊。
2、執行數據塊的讀/寫操作。

Secondary NameNode:並非 NameNode 的熱備。當NameNode 掛掉的時候,它並不能馬上替換 NameNode 並提供服務。
1、輔助 NameNode,分擔其工作量。
2、定期合併 fsimage和fsedits,並推送給NameNode。
3、在緊急情況下,可輔助恢復 NameNode。

讀、寫文件過程

從HDFS讀取內容

1、首先調用DistributedFileSystem對象的open方法,其實獲取的是一個DistributedFileSystem的實例。
2、DistributedFileSystem通過RPC(遠程過程調用)獲得文件的第一批block的locations,同一block按照重複數會返回多個locations,這些locations按照hadoop拓撲結構排序,距離客戶端近的排在前面。
3、前兩步會返回一個FSDataInputStream對象,該對象會被封裝成 DFSInputStream 對象,DFSInputStream可以方便的管理DataNode和NameNode數據流。客戶端調用read方法,DFSInputStream就會找出離客戶端最近的DataNode並連接DataNode。
4、數據從DataNode源源不斷的流向客戶端。
5、如果第一個block塊的數據讀完了,就會關閉指向第一個block塊的DataNode連接,接着讀取下一個block塊。這些操作對客戶端來說是透明的,從客戶端的角度來看只是讀一個持續不斷的流。
6、如果第一批block都讀完了,DFSInputStream就會去NameNode拿下一批blocks的location,然後繼續讀,如果所有的block塊都讀完,這時就會關閉掉所有的流。

 
read from HDFS.jpg

向HDFS寫入內容

1.客戶端通過調用DistributedFileSystem的create方法,創建一個新的文件。
2.DistributedFileSystem通過RPC(遠程過程調用)調用NameNode,去創建一個沒有blocks關聯的新文件。創建前,NameNode會做各種校驗,比如文件是否存在,客戶端有無權限去創建等。如果校驗通過,NameNode 就會記錄下新文件,否則就會拋出IO異常。
3.前兩步結束後會返回 FSDataOutputStream 的對象,和讀文件的時候相似,FSDataOutputStream 被封裝成 DFSOutputStream,DFSOutputStream 可以協調NameNode和 DataNode。客戶端開始寫數據到DFSOutputStream,DFSOutputStream會把數據切成一個個小packet,然後排成隊列data queue。
4.DataStreamer 會去處理接受 data queue,它先問詢 NameNode 這個新的 block 最適合存儲的在哪幾個DataNode裏,比如重複數是3,那麼就找到3個最適合的DataNode,把它們排成一個 pipeline。DataStreamer 把 packet 按隊列輸出到管道的第一個 DataNode 中,第一個 DataNode又把 packet 輸出到第二個 DataNode 中,以此類推。
5.DFSOutputStream 還有一個隊列叫 ack queue,也是由 packet 組成,等待DataNode的收到響應,當pipeline中的所有DataNode都表示已經收到的時候,這時akc queue纔會把對應的packet包移除掉。
6.客戶端完成寫數據後,調用close方法關閉寫入流。
7.DataStreamer 把剩餘的包都刷到 pipeline 裏,然後等待 ack 信息,收到最後一個ack 後,通知 DataNode 把文件標示爲已完成。

 

 

 

write to HDFS.jpg

副本存放策略

一般情況下副本系數爲3,HDFS的副本放置策略是:將第一個副本放在本地節點,將第二個副本放在本地機架上的另一個節點,而第三個副本放到不同機架上的節點。
這種方式減少了機架間的寫流量,從而提高了寫的性能。機架故障的機率遠小於節點故障。這種方式並不影響數據可靠性和可用性的限制,並且它確實減少了讀操作的網絡聚合帶寬,因爲文件塊僅存在兩個不同的機架,而不是三個。
文件的副本不是均勻的分佈在機架當中,1/3的副本在同一個節點上,1/3副本在同一個機架上,另外1/3個副本均勻地分佈在其他機架上。

流水線複製
假設HDFS副本系數爲3,當本地暫時文件積累到一個數據塊大小時,client會從NameNode獲取一個列表用於存放副本。然後client開始向第一個DataNode數據傳輸,第一個DataNode一小部分一小部分地接收數據,將每一部分寫入本地倉庫,並同一時間傳輸該部分到列表中的第二個DataNode節點。第二個DataNode也是這樣,一小部分一小部分地接收數據,寫入本地倉庫,並同一時候轉發給下一個節點,數據以流水線的方式從前一個DataNode拷貝到下一個DataNode。最後,第三個DataNode接收數據並存儲到本地。因此,DataNode能流水線地從前一個節點接收數據,並同一時間轉發給下一個節點,數據以流水線的方式從前一個DataNode拷貝到下一個DataNode,並以相反的方向Ack前一個Node。

擴展:大數據存儲生態圈簡介

Hive與Hbase的數據一般都存儲在HDFS上。HDFS爲他們提供了高可靠性的底層存儲支持。
Hive
Hive不支持更改數據的操作,Hive基於數據倉庫,提供靜態數據的動態查詢。其使用類SQL語言,底層經過編譯轉爲MapReduce程序,在Hadoop上運行,數據存儲在HDFS上。

HBase
Hbase是Hadoop database,即Hadoop數據庫。它是一個適合於非結構化數據存儲的數據庫,HBase基於列的而不是基於行的模式。
HBase是Google Bigtable的開源實現,類似Google Bigtable利用GFS作爲其文件存儲系統,HBase利用HDFS作爲其文件存儲系統;Google運行MapReduce來處理Bigtable中的海量數據,HBase同樣利用Hadoop MapReduce來處理HBase中的海量數據。

擴展:GFS簡介(Google File System)

GFS、MapReduce、BigTable是Google大數據的三大理論。我們簡單描述下GFS:

  1. 文件被分爲許多固定大小的chunk,並分配一個全局唯一的64位Chunk標誌;
  2. Master-Slave結構,Master節點記錄節點及Chunk元信息;
  3. 爲了保證可靠性,每個Chunk會被複制到多個Slave節點上;
  4. HDFS保證了CAP的CP,它的一致性如何實現的可以參考文末的引用文獻。

參考文章:
https://blog.csdn.net/luoyhang003/article/details/72229121(GFS介紹)
https://blog.csdn.net/qiaojialin/article/details/71574203(GFS一致性總結)
https://blog.csdn.net/wypersist/article/details/79757242(HDFS核心技術詳解)
https://blog.csdn.net/w1573007/article/details/52966742(Google三大理論)


文章來源:https://www.jianshu.com/p/f1e785fffd4d
 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章