Hadoop學習(一)——總體學習
參考文獻:
[1]Jure Leskovec,Anand Rajaraman,Jeffrey David Ullman.大數據互聯網大規模數據挖掘與分佈式處理(第2版) [M]北京:人民郵電出版社,2015.7;
目錄:
1、分佈式文件系統:
2、Hadoop基本架構:
3、HDFS分佈式文件系統的體系:
4、MapReduce體系的兩個後臺進程:
5、Master和Slave:
1、分佈式文件系統:
(1)使用場景:
①文件非常大,比如TB級的文件。
②文件極少更新,而只是作爲某些計算的數據讀入,並且不時有額外的數據追加到文件尾部。
(2)在DFS中,文件被分成文件塊(chunk),文件塊的大小通常爲64MB。文件塊會被複制多個副本放在多個不同的計算節點上。另外,存放同一文件塊不同副本的節點應分佈在不同機架上,這樣在某個機架發生故障時就不至於丟失所有副本。通常來講,文件塊的大小和複製的次數可以由用戶指定。
(3)主節點(master node)和名稱節點(name node):
爲尋找某個文件的文件塊,使用主節點或名稱節點爲該文件所用。主節點本身可以有多個副本,文件系統的總目錄可以用於尋找主節點的副本,總目錄本身也可以有多個副本,所有使用DFS的用戶都知道這些目錄副本所在的位置。
參考文獻:《大數據互聯網大規模數據挖掘與分佈式處理(第2版)》 P18
2、Hadoop基本架構:
圖2.1 Hadoop基本架構1
(1)Hadoop Common:
Hadoop體系最底層模塊,爲Hadoop各子項目提供各種工具,如配置文件和日誌操作等。
(2)MapReduce:
依賴磁盤IO的批處理計算模型,通過一個JobTracker主節點和多個TaskTracker從節點,分Map階段和Reduce階段執行任務。
(3)HDFS:
①Hadoop Distributed File System,分佈式文件系統,提供高吞吐量的應用程序數據訪問,負責數據的分佈式存儲。
②HDFS結構是基於一組特定的節點構建的,包括一個在HDFS內部提供元數據服務的NameNode主節點和多個提供存儲塊的DataNode從節點。
附註:
分佈式存儲:數據分散在很多的機器上進行存儲。
分佈式計算:數據分散在很多的機器上進行計算。
(4)Yarn:
①資源管理平臺,負責作業調度與集羣的管理,只有一個ResourceManager主節點和多個NodeManager從節點。
②ResourceManager負責集羣資源的分配與調度,MapReduce、Storm、Spark等應用,必須實現ApplicationMaster接口,才能被RM管理。
③NodeManager負責單節點資源的管理。
(5)Pig:
Pig是一個並行計算的高級的數據流語言和執行框架,是在MapReduce上構建的一種高級查詢語言,輕量級腳本語言,使用shell命令方式來輸入數據處理、數據分析的命令,然後系統會自動將這些命令轉換爲Map和Reduce的形式,進行MapReduce的工作,然後把結果返回給用戶。相當於用戶和MapReduce之間的轉換器。
(6)Hive:
相當於Sql語言到MapReduce的映射器。將Sql轉換爲MapReduce分佈式任務,在各節點運行,再將結果返回給用戶。
(7)Hbase:
面向數據分析,基於列式存儲模型,支持大量結構化數據存儲的數據庫,提高響應速度,減少IO量。
(8)ZooKeeper:
負責服務器節點以及進程之間的通訊,通訊的協調工具。提供配置維護、名字服務、分佈式同步、組服務等功能。
(9)Chukwa:
管理大型分佈式系統的數據採集系統。
(10)Mahout:
可擴展的機器學習和數據挖掘的library庫。
圖2.2 Hadoop基本架構2
3、HDFS分佈式文件系統的體系:
(1)NameNode:名稱節點
①接收用戶請求,是用戶操作的入口;
②是HDFS的守護程序,是它的核心程序,起到分佈式系統的總控的作用;
③維護文件系統的目錄結構,記錄所有的元數據,記錄文件是如何分割成數據塊的,以及這些數據塊被存儲到哪些節點上;
④對內存和I/O進行集中管理
⑤是個單點,發生故障將使集羣崩潰。
(2)Secondary NameNode:輔助名稱節點
①監控HDFS狀態的輔助後臺程序;
②每個集羣都有一個;
③作爲NameNode的後備,可以把NameNode裏面的元數據信息再重新保存多一份副本,NameNode會自動跟名稱輔助節點通訊,不斷把名稱輔助節點中的元數據往裏面放;
④當NameNode故障可以作爲備用NameNode使用;
⑤也是個單點。
(3)DataNode:數據節點
①每臺從服務器都運行一個;
②負責把HDFS數據塊讀寫到本地文件系統,用於存儲文件。
圖3.1 分佈式文件系統體系
如圖所示,Hadoop集羣是部署在真正的服務器上的,服務器是放在機架(Rack)上面的,每一個機架都有一個交換機(Switch),然後這些交換機通過一個大的交換機連接起來,用戶是直接通過交換機來進行請求的。
4、MapReduce體系的兩個後臺進程:
圖4.1 MapReduce體系的兩個後臺進程
(1)JobTracker:作業跟蹤器
運行在主節點上的後臺進程,起到對MapReduce體系的總調度作用。
①用於處理用戶提交後的作業;
②決定有哪些文件參與作業處理,然後把Job切割爲一個個小Task,並把這些Task分配到數據節點中,Hadoop的原則是就近運行,就是程序要和數據在同一個物理節點裏面;
③監控Task,重啓失敗的Task,釋放它所佔用的資源;
④每個集羣只有唯一一個JobTracker,和NameNode一樣,是個單點,位於Master節點。
(2)TaskTracker:任務跟蹤器
①位於Slave節點上,與DataNode結合(代碼與數據一起的原則);
②管理各自節點上的Task(由JobTracker分配);
③每個節點只有一個TaskTracker,但一個TaskTracker可以啓動多個JVM,用於並行執行Map或Reduce任務;
④與JobTracker交互。
5、Master和Slave:
(1)Master:NameNode、Secondary NameNode、JobTracker的節點的機器。
(2)Slave:TaskTracker、DataNode的機器
(3)Master不是唯一的。通常把NameNode和JobTracker放在同一臺機器,把Secondary NameNode放在另一臺機器。