hadoop框架詳解
Hadoop學習隨筆(參考:http://blog.csdn.net/mobanchengshuang/article/details/78786652)
Hadoop項目主要包括以下四個模塊
◆ Hadoop Common:
為其他Hadoop模塊提供基礎設施
◆ Hadoop HDFS:
一個高可靠、高吞吐量的分布式文件系統
◆ Hadoop MapReduce:
一個分布式的離線並行計算框架
◆ Hadoop YARN:
一個新的MapReduce框架,任務調度與資源管理
Apache Hadoop起源
◆Apache Lucene
開源的高性能全文檢索工具包
◆Apache Nutch
開源的Web搜索引擎
◆Google三大論文
MapReduce/GFS/BigTable
◆Apache Hadoop
大規模數據處理
一張圖了解分布式的好處
HDFS(HDFS即Hadoop Distributed File System分布式文件系統:主要是分布式存儲數據)
——————-
HDFS服務功能
◆NameNode(NN)是主節點,存儲文件的元數據如文件名,文件目錄結構,文件屬性(生成時間,副本數,文件權限),以及每個文件的塊列表和塊所在DataNode等。
◆DataNode(DN)在本地文件系統存儲文件塊數據,以及塊數據的校驗和。
◆Secondary NameNode(SNN) 用來監控HDFS狀態的輔助後臺程序,每隔一段時間獲 取HDFS元數據的快照。
NameNode
◆Namenode 是一個中心服務器,單一節點(簡化系統的設計和實現),負責管理文件系統的名字空間(namespace)以及客戶端對文件的訪問。
◆文件操作,NameNode 負責文件元數據的操作,DataNode負責處理文件內容的讀寫請求,跟 文件內容相關的數據流不經過NameNode,只會詢問它跟那個DataNode聯系,否則 NameNode會成為系統的瓶頸。
◆副本存放在哪些DataNode上由 NameNode來控制,根據全局情況做出塊放置決定,讀取文件時NameNode盡量讓用戶先讀取最近的副本,降低帶塊消耗和讀取延時;
◆Namenode 全權管理數據塊的復制,它周期性地從集群中的每個Datanode接收心跳信號和塊狀態報告(Blockreport)。接收到心跳信號意味著該Datanode節點工作正常。塊狀態報告包含了一個該Datanode上所有數據塊的列表。
DataNode
◆一個數據塊在DataNode以文件存儲在磁盤上,包括兩個文件,一個是數據本身,一個是元數據包括數據塊的長度,塊數據的校驗和,以及時間戳 ;
◆DataNode啟動後向NameNode註冊,通過後,周期性(1小時)的向NameNode上報所有的塊信息;
◆心跳是每3秒一次,心跳返回結果帶有NameNode給該DataNode的命令如復制塊數據到另一臺機器,或刪除某個數據塊。如果超過10分鐘沒有收到某個DataNode 的心跳,則認為該節點不可用;
◆集群運行中可以安全加入和退出一些機器。
文件
◆文件切分成塊(默認大小128M),以塊為單位,每個塊有多個副本存儲在不同的機器上,副本數可在文件生成時指定(默認3,是在hdfs-site.xml中配置的
◆NameNode 是主節點,存儲文件的元數據如文件名,文件目錄結構,文件屬性(生成時間,副本數,文件權限),以及每個文件的塊列表以及塊所在的DataNode等等;
◆DataNode 在本地文件系統存儲文件塊數據,以及塊數據的校驗和。
◆可以創建、刪除、移動或重命名文件,當文件創建、寫入和關閉之後不能修改文件內容。
MapReduce計算框架(基於磁盤IO進行叠代,開銷較大)
◆將計算過程分為兩個階段:Map和Reduce
Map階段並行處理輸入數據
Reduce階段對Map結果進行匯總
◆ Shuffle鏈接Map和Reduce兩個階段(Shuffle通俗的理解就是重新洗牌,打亂原有順序)
Map Task將數據寫到本地磁盤
Reduce Task從每個Map Task上讀取一份數據
◆ 僅適合離線批處理
具有很好的容錯性和擴展性
適合簡單的批處理任務
◆ 缺點明顯:
啟動開銷大,過多使用磁盤導致效率低下等
YARN服務組件(主要是負責硬件資源的合理調用)
◆ YARN 總體上仍然是Master/Slave 結構,在整個資源管理框架中,ResourceManager 為Master,NodeManager 為Slave。
◆ ResourceManager 負責對各個NodeManager 上的資源進行統一管理和調度;
◆ 當用戶提交一個應用程序時,需要提供一個用以跟蹤和管理這個程序的ApplicationMaster(主管進程),它負責向ResourceManager 申請資源,並要求NodeManger 啟動可以占用一定資源的任務。
◆ 由於不同的ApplicationMaster 被分布到不同的節點上,因此它們之間不會相互影響。
ResourceManager
◆ 全局的資源管理器,整個集群只有一個,負責集群資源的統一管理和調度分配。
◆ 功能
- 處理客戶端請求
- 啟動/監控ApplicationMaster
- 監控NodeManager
- 資源分配與調度
NodeManager
◆ 整個集群有多個,負責單節點資源管理和使用
◆ 功能:
- 單個節點上的資源管理和任務管理
- 處理來自ResourceManager的命令 (下文簡稱RM)
- 處理來自ApplicationMaster的命令
◆ NodeManager管理抽象容器,這些容器代表著可供一個特定應用程序使用的針對每個節點的資源。
◆ 定時地向RM匯報本節點上的資源使用情況和各個Container的運行狀態
ApplicationManager
管理一個在YARN 內運行的應用程序的每個實例
◆ 功能
- 數據切分
- 為應用程序申請資源,並進一步分配給內部任務
- 任務監控與容錯
◆ 負責協調來自ResourceManager的資源,幵通過NodeManager監視容器的執行和資源使用(CPU、內存等的資源分配)。
Container(容器)
◆ YARN中的資源抽象,封裝某個節點上多維度資源,如內存、CPU、磁盤、網絡等,當AM向RM申請資源時,RM向AM返回的資源便是用Container表示的。
◆ YARN 會為每個任務分配一個Container,且該任務只能使用該Container中描述的資源。
◆ 功能
- 對任務運行環境的抽象
- 描述一系列信息
- 任務啟動命令
- 任務運行環境
----------------------------------
1、client---->master(申請運行job,鏈接的是RM進程)
2、master---->client(返回jobId和資源地址:提交的jar文件存放地址,配置信息conf地址,每個副本的spilt分配信息)
3、client---->slave03(根據資源地址鏈接slave節點,上傳資源--job.jar/job.conf/job.spilt)
4、client---->master(反饋上傳資源完成)
5、master---->slave03(讀取之前上傳的資源信息,根據資源信息生成job對象,並將job對象放入job隊列--master緩存區(job1,job2....)) ------資源分配過程
6、slave01--->master(slave主動鏈接master去領取自己的job,之間用NodeManage==ResourceManage進程)
7、slave01--->slave03(根據領取的jobId,從資源地址下載job資源信息到本地(尤其是job.jar))
8、slave01--->master(反饋資源下載完成,所有slave都要反饋) --------master啟動MapReduce進程
9、master在slave中尋找負載清閑的節點(例slave02),並在其上啟動MRAPPMaster進程,同時slave02上會出現MapReduce進程
10、slave02---->master(申請運行MapReduce進程) ---------master從此開始等待跟蹤Task的運行過程
11、master---->slave02(返回Task(一個job有多個Task,一個Task就是一個進程)與地址的映射表--告知哪些節點運行MapTask,哪些運行ReduceTask)
12、slave02--->slave03(鏈接相應的slave並在其上啟動相應的Task)
--------Task進程跑完會將YarnChild進程結束信息反饋給master
13、Task----->master(反饋Task進程(名字叫:YarnChild)運行完畢,所有進程都要反饋)
-------都反饋完畢
14、slave02--->master(反饋job運行完成)
--------master關閉MapReduce進程
15、master--->client(反饋job運行結束--1、環節出錯,job運行失敗,2、成功運行結束)
YARN資源管理
◆ 資源調度和資源隔離是YARN作為一個資源管理系統,最重要和最基礎的兩個功能。資源調度由ResourceManager完成,而資源隔離由各個NM實現。
◆ ResourceManager將某個NodeManager上資源分配給任務(這就是所謂的“資源調度”)後,NodeManager需按照要求為任務提供相應的資源,甚至保證這些資源應具有獨占性,為任務運行提供基礎的保證,這就是所謂的資源隔離。
◆ 當談及到資源時,我們通常指內存,CPU和IO三種資源。Hadoop YARN同時支持內存和CPU兩種資源的調度。
◆ 內存資源的多少會會決定任務的生死,如果內存不夠,任務可能會運行失敗;相比之下,CPU資源則不同,它只會決定任務運行的快慢,不會對生死產生影響。
hadoop框架詳解