1. 程式人生 > >簡書 深入淺出的Hadoop基礎原理

簡書 深入淺出的Hadoop基礎原理

一般我們所說的Hadoop 其實是指 Hadoop 體系,它包括 Hadoop MapReduce、HDFS、HBase,還有其他更多的技術

工作原理

先用一種有助於理解的方式描述 MapReduce 和 HDFS 是如何工作的。假如有1000G 的多個文字檔案,內容是英文網頁,需要統計詞頻,也就是哪些單詞出現過,各出現過多少次,有 1000 臺計算機可供使用,要求速度越快越好。

最直接的想法是,把 1000G 的檔案分成 1000 份,每臺機器處理 1G 資料。處理完之後,其他 999 臺機器將處理結果傳送到一臺固定的機器上,由這臺機器進行合併然後輸出結果。

Hadoop 將這個過程進行自動化的處理。首先看如何儲存這1000G 的文字檔案。HDFS在這1000臺機器上建立分散式檔案系統,將 1000G 的檔案切分成若干個固定大小的檔案塊,每個塊一般是 64M 大小,分散儲存在這 1000 臺機器上。這麼多機器,在執行的時候難免會出現有幾臺突然宕機或者掛掉的情況,這導致上面儲存的檔案塊丟失,會導致計算出錯。為避免這種情況,HDFS 對每個檔案塊都做複製,複製成 3~5 個相同的塊,放到不同的機器上,這樣宕機的檔案塊在其他機器上仍然可以找得到,不影響計算。

MapReduce 其實是兩部分,先是 Map 過程,然後是 Reduce 過程。從詞頻計算來說,假設某個檔案塊裡的一行文”字是“ This is a small cat. That is a small dog.”,那麼,Map 過程會對這一行進行處理,將每個單詞從句子解析出來,依次生成形如<“this”, 1>, <”is”, 1>, <”a”, 1>, <”small”, 1>, <”cat”, 1>, <”that”, 1>, <”is”, 1>, <”a”, 1>, <”small”, 1>,<”dog”, 1>的鍵值對,<”this”, 1> “ 表示 this”這個單詞出現了 1次,在每個鍵值對裡,單詞出現的次數都是 1 次,允許有相同的鍵值對多次出現,比如<”is”,1>這個鍵值對出現了 2 次。Reduce 過程就是合併同類項,將上述產生的相同的鍵值對合並起來,將這些單詞出現的次數累加起來,計算結果就是<“this”, 1>, <”is”, 2>, <”a”, 2>, <”small”, 2>,<”cat”, 1>, <”that”, 1>, <”dog”, 1>。

這種方式很簡潔,並且可以進行多種形式的優化。比如說,在一個機器上,對本地儲存的 1G 的檔案塊先 Map,然後再 Reduce,那麼就得到了這 1G 的詞頻統計結果,然後再將這個結果傳送到遠端機器,跟其他 999 臺機器的統計結果再次進行 Reduce,就得到 1000G 檔案的全部詞頻統計結果。如果檔案沒有那麼大,只有三四個G,就不需要在本地進行Reduce 了,每次 Map 之後直接將結果傳送到遠端機器做 Reduce。

具體地,如果用Hadoop 來做詞頻統計,流程是這樣的:

1) 先用HDFS的命令列工具,將1000G 的檔案複製到 HDFS 上;

2) 用Java 寫MapReduce 程式碼,寫完後除錯編譯,然後打包成 Jar 包;

3) 執行Hadoop 命令,用這個 Jar 包在 Hadoop 叢集上處理 1000G 的檔案,然後將結果檔案存放到指定的目錄。

4) 用HDFS的命令列工具檢視處理結果檔案。

HDFS檔案系統

Hadoop分散式檔案系統,全稱Hadoop Distributed File System,也就是HDFS。

Hadoop 借鑑了VFS,也引入了虛擬檔案系統機制。HDFS 是 Hadoop 虛擬檔案系統的一個具體實現。除了HDFS 檔案系統之外,Hadoop 還實現很多其他檔案系統,諸如本地檔案系統,支援 HTTP 的 HFTP 檔案系統,支援 Amazon的 S3 檔案系統等等。

HDFS 從設計上來說,主要考慮以下的特徵:超大檔案,最大能支援 PB 級別的資料;流式資料訪問,一次寫入,多次讀取;在不可靠的檔案,故障率高的商用硬體上能執行。Hadoop 的不利之處,是不適應低時間延遲的資料訪問,不適應大量的小檔案,也不適應多使用者寫入任意修改檔案的情況。

假設有一個 HDFS 叢集,那麼這個叢集有且僅有一臺計算機做名位元組點 NameNode,有且僅有一臺計算機做第二名 字 節 點 SecondaryNameNode , 其 他 機 器 都 是 數 據 節 點 DataNode 。 在 偽 分 布 式 的 運 行 方 式 下 ,NameNode,SecodaryNameNode,DataNode 都由同一臺機器擔任。

NameNode 是 HDFS 的管理者。SecondaryNameNode 是 NameNode 的輔助者,幫助 NameNode 處理一些合併事宜,注意,它不是 NameNode 的熱備份,它的功能跟 NameNode 是不同的。DataNode 以資料塊的方式分散儲存 HDFS 的檔案。HDFS 將大檔案分割成資料塊,每個資料塊是 64M,也可以設定成 128M或者 256M,然後將這些資料塊以普通檔案的形式存放到資料節點上,為了防止 DataNode 意外失效,HDFS 會將每個資料塊複製若干份放到不同的資料節點。

執行“ hadoop fs -help”可以看到 HDFS的命令列工具和用法。

HDFS 提供了 HttpFS 服務,用以通過 HTTP 方式訪問 HDFS 服務的功能。預設的,你可以通過 http://[master namenode host]:50070/ 訪問這個功能。

總的來說,HDFS 主要包含了 6 個服務,它們主要的功能如下:

NameNode:負責管理檔案系統的 namespace 以及客戶端對檔案的訪問;

DataNode:用於管理它所在節點上的儲存;

FailoverController:故障切換控制器,負責監控與切換 Namenode 服務;

JournalNode:用於儲存 EditLog;

Balancer:用於平衡叢集之間各節點的磁碟利用率;

HttpFS:提供 HTTP 方式訪問 HDFS 的功能。

通常而言,在關注 HDFS 架構時,總是關注 Namenode 和 Datanode 的架構,因為它們是 HDFS 的核心,也是客戶端操作資料需要依賴的兩個服務
作者:Kemr
連結:https://www.jianshu.com/p/dac675062536
來源:簡書
簡書著作權歸作者所有,任何形式的轉載都請聯絡作者獲得授權並註明出處。