1. 程式人生 > >Python海量資料處理之_Hadoop(二)概念和原理

Python海量資料處理之_Hadoop(二)概念和原理

1. 說明

 Hadoop是個分散式的架構,它將海量資料處理工作分配到叢集中的多個機器上執行。前篇介紹了Hadoop的安裝,在安裝過程中會產生一些疑問,比如NameNode是什麼東西?本篇就以問題&解答的方式介紹Hadoop的相關概念及其原理。

2. NameNode,DataNode,以及Secondary NameNode

 把Hadoop分為HDFS和MapReduce。HDFS為資料提供了儲存,MapReduce為資料提供了計算。
 NameNode,DataNode以及Secondary NameNode都是屬於儲存部分,NameNode主要負責管理元資訊,如檔名,目錄結構,屬性,資料塊儲存位置等等。DataNode負責資料塊的具體存取。SecondaryNameNode是NameNode的輔助工具,有兩個作用,一是映象備份,二是日誌與映象的定期合併,注意:它並不是NameNode的備份。

3. ResourceManager與NodeManager

 ResourceManager和NodeManager屬於計算部分,ResourceManager負責叢集中所有算力的統一管理和分配,NodeManager是每臺機器上的代理,負責容器管理,並監控它們的資源使用情況,以及向ResourceManager提供資源使用報告。

4. MapReduce與YARN

 Hadoop將MapReduce框架升級到YARN(也叫MapRecudeV2)。原來MapReduce分為JobTracker和NodeTracker,分別用於分配叢集中所有任務和管理單機任務;而YARN改為ResourceManager和NodeManager,也分別針對主按和單機,但YARN對每個應用都建立了ApplicationMaster,它可以分佈在ResourceManager以外的機器上,從而緩解了主控的壓力。

5. Master與slave

 Master和salve指的是叢集中各臺主機主控或從屬的特性,即它們在hadoop中扮演的角色(每臺主機就好比一個人),一個叢集中只有一個master(領導小組),它可以分佈在一臺或多臺機器上(好比主管儲存的領導和主管計算的領導可以同一個人,也可以是不同的人),
 Salve(群眾)可以有很多,slave機器上主要部署NodeManager和DataNode(作為群眾幹具體活,一個群眾可以幹一樣或多樣工作,全部工作由群眾分擔),而在Master上部署NameNode和ResourceManager(作為領導分配任務),master如有多餘算力,也可部署NodeManager和DataNode(領導也可以乾點具體活)。
 如果只有一臺機器,可以把所有功能都讓它實現,這就是偽分散式,如果機器多負荷大,可以把每種工作分配給專門的機器。需要注意的是管理的角色NameNode和ResourceManager只能各有一個。就好像一樣事兒好幾個領導同時管就亂了。

6. 叢集中多臺伺服器如何配置

 無論是master還是slave都需要安裝JDK和Hadoop,以及配置ssh及環境變數,但配置檔案和啟動方式不同;並且只在master上做格式化。

7. 程式如何讀取資料

 分散式檔案系統,算力和儲存都分佈在多個機器上。NameNode為資料儲存提供統一的介面以便讀寫,具體在core-site.xml中設定。
 在程式層面,通過Hadoop的資料流(streaming)進行流式處理,它有點像linux的管道機制,程式從標準輸入stdin讀入,寫入標準輸出stdout(在處理過程中請儘量保持流式,不要一次load太多到記憶體)。相對來說它更適合處理像字串一樣的流式資料,而非大規律資料的統計。除了直接讀資料流,Python還提供封裝工具,如mrjob,dumbo,hadoopy,pydoop等等,使讀寫更加方便。

8. 程式如何切分運算量

 Map可以開一個到多個,reduce也可以開一個到多個,具體根據業務邏輯分配。

9. 資料探勘可否分佈計算

 Mahout是Hadoop家族中的成員,是基於一個Hadoop的機器學習和資料探勘的分散式計算框架。

10. Hadoop與Spark

 Hadoop是分散式資料處理的低層次抽象,通用,強壯,且保守,它使用HDFS儲存,支援複雜的大規模資料。
 Spark是一個新興的大資料處理的引擎,是分散式大資料處理的高層次抽象。提供了除map和reduce之外更多的運算子,這些操作是通過一個稱作彈性分散式資料集(resilient distributed datasets, RDDs)的分散式資料框架進行的。它主要使用記憶體儲存,用於快速處理。
 Hadoop的YARN還可與Spark結合使用。

11. Hadoop與Zookeeper

 在叢集的管理中Zookeeper負責分散式系統的協調工作。不僅適用於Hadoop叢集,在其他的叢集中也常被用到,比如此前介紹過的實現礦機叢集的Zookeeper&Kafka。Zookeeper主要解決處理分散式應用的“部分失敗”問題(比如某個關鏈節點宕機了),使叢集更加穩定地工作。