Thursday, October 19, 2017

Big Data(五):HDFS

Big Data(五):HDFS

2017/10/19

前言:

HDFS 系統很複雜,但使用上,還是跟傳統的檔案系統類似,可以採用命令列進行。自動備份的功能,系統都幫你做好了。

Summary:

本文整理了英文 [1]-[7]、簡體中文 [8]-[14]、與繁體中文 [15]-[20],有關 Hadoop Distributed File System (HDFS) 的相關資料。

-----

Outline

1. 分散式架構
2.1 HDFS 的沿革
2.2 HDFS 的特點
2.3 HDFS 的架構
2.4 HDFS 的讀寫
2.5 HDFS 命令集
3. FAQ

-----

1. 分散式架構

Hadoop 屬分散式架構。參考圖1,下層是分散式儲存,也就是 HDFS。上層是分散式運算,MapReduce。

這可以用選舉開票為例。選票儲存在各地的開票所(HDFS),中選會派人到各開票所計票後,再統一彙整(MapReduce)[19]。

本次討論 HDFS。


Fig. 1. MapReduce and HDFS [19].

-----

2.1 HDFS 的沿革

「Hadoop 目前是 Apache 基金會所維護的一個分散式運算的架構,最早是由 Doug Cutting 所開發。一開始 Doug Cutting 是在 Nutch 時發現無法將此搜尋引擎的效能再提升,剛好看到 Google 所提出的 MapReduce 與 GFS 概念,之後就將此概念加入 Nutch 中。後來又將此功能獨立出來成為一個新的專案,就稱之為 Hadoop。」[20]

-----

2.2 HDFS 的特點

「It provides fault tolerance while running on inexpensive commodity hardware, and it delivers high aggregate performance to a large number of clients.」[5]

以上這段英文出自 GFS 的摘要 [5]。重點在於 fault tolerance 與 inexpensive commodity hardware。也就是說,由於有很好的容錯機制,所以資料不用存放在高階的伺服器,使用一般市售的中低階伺服器,即可有很高的效能。

HDFS 的特點主要有 [20], [18], [12], [8]:

A. 容許硬體錯誤。
B. 串流資料存取。
C. 大規模的資料集。
D. 簡單的資料一致性模型。
E. 移動計算比移動資料更有效率。
F. 可移植性。
  
A. 容許硬體錯誤:HDFS 的基本思維是使用一般伺服器,所以硬體錯誤被視為常態。由於資料有幾個備份,所以如果硬體故障導致資料存取有誤,只要換掉伺服器就好了,系統會自動再把資料補上。

B. 串流資料存取:基本上 HDFS 是被設計為儲存超大的資料檔,適合批次處理。所以傳輸量優先於存取資料的反應時間。

C. 大規模的資料集:單一大檔被切成眾多的小檔,分散到伺服器的叢集上。HDFS 要能正確控管這些小檔。

D. 簡單的資料一致性模型:一次寫入,多次讀取。副本的資料同步就變得比較簡單,也可享有較高的資料傳輸量。

E. 移動計算比移動資料更有效率:電腦系統的瓶頸是硬碟,而不是記憶體與 CPU。所以資料不動,運算的程式搬到資料所在地運算,就跟選舉開票一樣。

F. 可移植性:與硬體關連度小,適用範圍廣。

-----

2.3 HDFS 的架構

圖2a跟2b其實描述同一件事。乍看之下圖2a好像比較厲害,其實標準是圖2b,而且圖2b多了一條虛線比較清楚。

首先還是看到圖1,伺服器群的伺服器分為兩種:Master 節點與 Worker 節點。Master 節點上有 NameNode 與 DataNode,一堆的 Worker 節點只放 DataNode。

HDFS,既然是一種 File System,那還是用 FAT 的架構來理解比較容易 [21]。

NameNode,好比 FAT,存放檔案(以及每個檔案分片)的位置。DataNode,則是存放實際每個檔案分片的位置。NameNode 好比硬碟最前面的 FAT,眾多 DataNode 組成的伺服器叢集則好比是 FAT 後面實際的硬碟磁區。

「SecondaryNameNode 會周期性的將 EditLog 中記錄的對 HDFS 的操作合併到一個 checkpoint中,然後清空 EditLog。所以 NameNode的 重啟就會 Load 最新的一個 checkpoint,並 replay EditLog中 記錄的 hdfs 操作,由於 EditLog 中記錄的是從上一次checkpoint 以後到現在的操作列表,所以就會比較小。如果沒有 snn 的這個週期性的合併過程,那麼當每次重啟 NameNode 的時候,就會花費很長的時間。而這樣週期性的合併就能減少重啟的時間。同時也能保證 HDFS 系統的完整性。這就是 SecondaryNameNode 所做的事情。」[18]

數據塊 (Block) :「HDFS 默認的基本存儲單位是 64MB 的數據塊。」[18]

Rack 是機櫃。圖2b 可以看到 Rack 1 與 Rack 2,表示上面的 DataNode 放在不同的 Rack [22]。這張是簡單的讀寫示意圖。圖5是更詳細的流程圖。



Fig. 2a. HDFS architecture [1].



Fig. 2b. HDFS architecture [2].


Fig. 2c. Rack[22]。

-----

Data Replication

「NameNode 控制所有區塊的複製動作。它會周期性的收到來自各台 DataNode 的 Heatbeat 與 Blockreport。Heatbeat是表示該 DataNode 還在正常的運行中,而 Blockreport 則是列出該 DataNode 上的所有區塊檔案。 」[20]

圖3可以看到兩個檔案:part-0 跟 part-1。
part-0 有共有兩個副本。part-1 共有三個副本。
part-0 由 1 跟 3 組成。part-1 由 2 跟 4 跟 5 組成。


Fig. 3. Block replication [4].

-----

圖4a可以看到兩個檔案:myFile 跟 someData.gzip。
myFile 有共有兩個副本。someData.gzip 共有三個副本。
myFile 由 1 跟 3 組成。someData.gzip 由 2 跟 4 跟 5 組成。

圖4b,D7 掛掉之後,NameNode 會發現 3 跟 5 各少一塊,會去找 block 數較少的 DataNode 複製 3 跟 5 過去 [20]。



Fig. 4a. Block replication [20].



Fig. 4b. Block replication [20].

-----

2.4 HDFS 的讀寫

可依數字瞭解詳細的讀寫過程 [13]。



Fig. 5a. HDFS 寫文件流程 [13]。



Fig. 5b. HDFS 讀文件流程 [13]。

-----

2.5 HDFS 命令集

HDFS 是個檔案系統,命令集就跟 DOS/UNIX/Linux 類似 [11], [18] 。

-----

3. FAQ

讀過上面的敘述之後,再閱讀 FAQ [7] 就容易多了。

下面挑出52題中的三題作為參考。

20) Comparison between Secondary NameNode and Checkpoint Node in Hadoop?
47) Differentiate HDFS & HBase.
49) How to transfer data from Hive to HDFS?

-----

結論:

HDFS 是 Hadoop 的檔案系統。主要特點是分散式儲存,所以檔案可以很大,也可以很多。另外,自動的容錯處理使得運用一般的伺服器即可完成部署,不需要很高級、很貴的伺服器。

-----

References

[1] Hadoop HDFS Architecture, Assumptions, and Goals - DataFlair
http://data-flair.training/blogs/hadoop-hdfs-architecture/ 

[2] HDFS Of Hadoop _ Xiaochong Zhang
http://xiaochongzhang.me/blog/?p=268

[3] Shvachko, Konstantin, et al. "The hadoop distributed file system." Mass storage systems and technologies (MSST), 2010 IEEE 26th symposium on. IEEE, 2010.

[4] Borthakur, Dhruba. "HDFS architecture guide." Hadoop Apache Project 53 (2008).
http://archive.cloudera.com/cdh/3/hadoop-0.20.2-cdh3u6/hdfs_design.pdf 

[5] Ghemawat, Sanjay, Howard Gobioff, and Shun-Tak Leung. "The Google file system." ACM SIGOPS operating systems review. Vol. 37. No. 5. ACM, 2003.

[6] Hadoop HDFS Tutorial - HDFS Introduction, Architecture, Features & Operations - DataFlair
http://data-flair.training/blogs/hadoop-hdfs-introduction-architecture-features-operations-tutorial/ 

[7] Top 50+ HDFS Interview Questions and Answers - DataFlair
http://data-flair.training/blogs/hdfs-interview-questions-and-answers/ 

[8] Hadoop分布式文件系统:架构和设计
https://hadoop.apache.org/docs/r1.0.4/cn/hdfs_design.html 

[9] Hadoop分布式文件系统使用指南
https://hadoop.apache.org/docs/r1.0.4/cn/hdfs_user_guide.html

[10] HDFS权限管理用户指南
https://hadoop.apache.org/docs/r1.0.4/cn/hdfs_permissions_guide.html

[11] Hadoop Shell命令
https://hadoop.apache.org/docs/r1.0.4/cn/hdfs_shell.html

[12] hdfs_百度百科
https://baike.baidu.com/item/HDFS 

[13] HDFS原理分析(一)—— 基本概念 - shiweishiw019的个人空间
https://my.oschina.net/shiw019/blog/92771 

[14] HDFS原理分析(二)—— HA机制 avatarnode原理 - shiweishiw019的个人空间
https://my.oschina.net/shiw019/blog/93481

[15] ~. .'  .NET碎碎念 '.' .~  何謂雲端運算 & HDFS 補充 (雲端運算核心技術 Hadoop & MapReduce 概念班上課心得)
http://dotnetmis91.blogspot.tw/2010/04/hdfs-hadoop-mapreduce.html 

[16] 限量ㄟ蓋步  HDFS - Hadoop Distributed File System (HDFS) 介紹
http://limitedcode.blogspot.tw/2014/10/hdfs-hadoop-distributed-file-system-hdfs.html

[17] 動物園之路 -16- 大象的肚子好大!-HDFS - iT 邦幫忙 一起幫忙解決難題,拯救 IT 人的一天
http://ithelp.ithome.com.tw/articles/10132075

[18] 程式扎記  [ 深入雲計算 ] HDFS   開源的 GFS - HDFS 基礎概念與常用命令
https://puremonkey2010.blogspot.tw/2013/11/hdfs-gfs-hdfs.html

[19] 上手Hadoop不可不知的關鍵概念 _ iThome
http://www.ithome.com.tw/node/73978

[20] 天邊一朵雲-淺談雲端資料庫架構
http://www.syscom.com.tw/ePaper_Content_EPArticledetail.aspx?id=230&EPID=178&j=4&HeaderName=%E7%A0%94%E7%99%BC%E6%96%B0%E8%A6%96%E7%95%8C

[21] FAT - 維基百科,自由的百科全書
https://zh.wikipedia.org/wiki/FAT 

[22] Supermicro SuperRack® Solutions _ Products - Super Micro Computer, Inc
https://www.supermicro.com/products/rack/

No comments: