Hadoop框架詳解

 

閱讀正文:node

Hadoop框架詳解


Hadoop項目主要包括如下四個模塊

◆ Hadoop Common: 
爲其餘Hadoop模塊提供基礎設施 
◆ Hadoop HDFS: 
一個高可靠、高吞吐量的分佈式文件系統 
◆ Hadoop MapReduce: 
一個分佈式的離線並行計算框架 
◆ Hadoop YARN: 
一個新的MapReduce框架,任務調度與資源管理
apache

Apache Hadoop起源

◆Apache Lucene 
開源的高性能全文檢索工具包 
◆Apache Nutch 
開源的Web搜索引擎 
◆Google三大論文 
MapReduce/GFS/BigTable 
◆Apache Hadoop 
大規模數據處理
緩存

一張圖瞭解分佈式的好處(數據量達到500G就能夠考慮使用大數據處理了)

這裏寫圖片描述

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上全部數據塊的列表。
app

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上讀取一份數據 ;
◆ 僅適合離線批處理 
具備很好的容錯性和擴展性 ;
適合簡單的批處理任務 ;
◆ 缺點明顯: 
啓動開銷大,過多使用磁盤致使效率低下等;

map tasks的個數只要是看splitSize,一個文件根據splitSize分紅多少份就有多少個map tasks。

該slave節點上有多少個MapTask運行,取決於該slave節點分配到了多少塊(通常默認128M);

slave的cpu是幾核的會影響MapTask是單線程仍是多線程,及其運行效率;

若是它出現問題,掛掉,會將沒運行完的塊交給其它slave節點從新運算;

 測試一測試二測試三測試四測試五測試六測試小結

 大數據學習交流羣:217770236 讓我咱們一塊兒學習大數據

【測試中若是遇到沒有輸出結果,只有輸出目錄的狀況;那麼極可能是犯了小錯誤;好比:Mapper中的輸入鍵值必須是LongWriteable和Text;outKey和outValue的類型不對,或者沒有初始化;Driver類中Job任務沒提交;還有就是讀取的文件中的數據在map中字段沒有正確對應;數據中有的字段是髒數據,須要處理;致使匹配不成功,從而輸出失敗。 】

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中描述的資源。 
◆ 功能

  • 對任務運行環境的抽象
  • 描述一系列信息
  • 任務啓動命令
  • 任務運行環境

 客戶端連接yarn集羣進行分佈式計算(都是經過端口RPC連接運行):
----------------------------------
一、client---->master(申請運行job,連接的是RM進程)
二、master---->client(返回jobId和資源地址:提交的jar文件存放地址,配置信息conf地址,每一個副本的spilt分配信息)
三、client---->slave03(根據資源地址連接slave節點,上傳資源--job.jar/job.conf/job.spilt)
四、client---->master(反饋上傳資源完成)
五、master---->slave03(讀取以前上傳的資源信息,根據資源信息生成job對象,並將job對象放入job隊列--master緩存區(job1,job2....))
------資源分配過程
六、slave01--->master(slave主動連接master去領取本身的job,之間用NodeManage==ResourceManage進程)
七、slave01--->slave03(根據領取的jobId,從資源地址下載job資源信息到本地(尤爲是job.jar))
八、slave01--->master(反饋資源下載完成,全部slave都要反饋)
--------master啓動MapReduce進程
九、master在slave中尋找負載悠閒的節點(例slave02),並在其上啓動MRAPPMaster進程,同時slave02上會出現MapReduce進程
十、slave02---->master(申請運行MapReduce進程)
---------master今後開始等待跟蹤Task的運行過程
十一、master---->slave02(返回Task(一個job有多個Task,一個Task就是一個進程)與地址的映射表--告知哪些節點運行MapTask,哪些運行ReduceTask)
十二、slave02--->slave03(連接相應的slave並在其上啓動相應的Task)
--------Task進程跑完會將YarnChild進程結束信息反饋給master
1三、Task----->master(反饋Task進程(名字叫:YarnChild)運行完畢,全部進程都要反饋)
-------都反饋完畢
1四、slave02--->master(反饋job運行完成)
--------master關閉MapReduce進程
1五、master--->client(反饋job運行結束--一、環節出錯,job運行失敗,二、成功運行結束)

YARN資源管理

資源調度和資源隔離是YARN做爲一個資源管理系統,最重要和最基礎的兩個功能。資源調度由ResourceManager完成,而資源隔離由各個NM實現。 
◆ ResourceManager將某個NodeManager上資源分配給任務(這就是所謂的「資源調度」)後,NodeManager需按照要求爲任務提供相應的資源,甚至保證這些資源應具備獨佔性,爲任務運行提供基礎的保證,這就是所謂的資源隔離。 
◆ 當談及到資源時,咱們一般指內存,CPU和IO三種資源。Hadoop YARN同時支持內存和CPU兩種資源的調度。 
◆ 內存資源的多少會會決定任務的生死,若是內存不夠,任務可能會運行失敗;相比之下,CPU資源則不一樣,它只會決定任務運行的快慢,不會對生死產生影響。


參考文章:

一、http://blog.csdn.net/mobanchengshuang/article/details/78786652

 




做者:淼淼之森歡迎任何形式的轉載,但請務必註明出處。若是你以爲本文還能夠,那就點擊一下推薦,讓更多人看到吧!限於本人水平,若是文章和代碼有表述不當之處,還請不吝賜教。

相關文章
相關標籤/搜索