一.Hadoop概述
Hadoop處理的問題和關(guān)系型數(shù)據(jù)庫的對比:

一個MapReduce作業(yè)包含了輸入數(shù)據(jù),MapReduce程序和配置信息,由map任務和reduce任務兩類任務構(gòu)成。Hadoop為每個分片(split,默認128MB)創(chuàng)建一個map任務,來處理分片中的每條記錄。Hadoop優(yōu)先在有HDFS數(shù)據(jù)的節(jié)點上運行map任務,可以節(jié)省寬帶,獲得最佳性能,其次在同一機架上的節(jié)點運行。

注意:map任務的輸出結(jié)果是保存到本地磁盤,而不是HDFS,當作業(yè)完成后,map的輸出結(jié)果即可刪除.

二、YARN
YARN在在Hadoop框架中的位置

YARN的核心服務有資源管理器(Resource Manager)和節(jié)點管理器(Node Manager)構(gòu)成

步驟說明:
1.用 戶 向 YARN 中 提 交 應 用 程 序( Application Master 程 序、 啟 動Application Master 的命令、用戶程序等);
2.ResourceManager 為該應用程序分配第一個 Container,并與對應的 NodeManager 通信,要求它在這個 Container 中啟動應用程序的 ApplicationMaster;
3.ApplicationMaster 首 先 向 ResourceManager 注 冊, 這 樣 用 戶 可 以 直 接 通 過ResourceManager 查看應用程序的運行狀態(tài),然后它將為各個任務申請資源,并監(jiān)控它的運行狀態(tài),直到運行結(jié)束,即重復步驟 4~7;
4.ApplicationMaster 采用輪詢的方式通過 RPC 協(xié)議向ResourceManager 申請和領取資源;
5.一旦 ApplicationMaster 申請到資源后,便與對應的 NodeManager 通信,要求它啟動任務;
6.NodeManager 為任務設置好運行環(huán)境(包括環(huán)境變量、JAR 包、二進制程序等)后,將任務啟動命令寫到一個腳本中,并通過運行該腳本啟動任務;
7.各個任務通過某個 RPC 協(xié)議向 ApplicationMaster 匯報自己的狀態(tài)和進度,以讓 ApplicationMaster 隨時掌握各個任務的運行狀態(tài),從而可以在任務失敗時重新啟動任務;在應用程序運行過程中,用戶可隨時通過 RPC 向 ApplicationMaster 查詢應用程序的當前運行狀態(tài)。
8.應用程序運行完成后,ApplicationMaster 向 ResourceManager 注銷并關(guān)閉自己。

三、Hadoop RPC
RPC Server主要使用了線程池、事件驅(qū)動和Reactor設計模式等提高并發(fā)處理能力的技術(shù)。
clipboard.png

說明:
1.整個Server只有一個Listener線程,統(tǒng)一負責監(jiān)聽來自客戶端的連接請求,當監(jiān)聽到新的客戶端請求到達后,Server采用輪詢的方式從線程池(Reader Pool)中選擇一個Reader線程進行處理,Reader來接收客戶端連接的RPC請求;
2.考慮到某些函數(shù)調(diào)用返回結(jié)果很大或者網(wǎng)絡速度過慢,可能難以將結(jié)果一次性發(fā)送到客戶端,此時 Handler 將嘗試著將后續(xù)發(fā)送任務交給 Responder 線程。
Hadoop RPC的主要參數(shù):
1.Reader 線程數(shù)目。 默認為1,可通過ipc.server.read.threadpool.size配置;
2.每個 Handler 線程對應的最大 Call 數(shù)目。ipc.server.handler.queue.size配置,默認值是100,如果 Handler 數(shù)目為 10,則整個 Call 隊列(即共享隊列 callQueue)最大長度為:100×10=1000;
3.Handler 線程數(shù)目。的 Handler 數(shù)目分別由參數(shù) yarn.resourcemanager.resource-tracker.client.thread-count 和 dfs.namenode.service.handler.count 指定,默認值分別為 50 和 10,當集群規(guī)模較大時,這兩個參數(shù)值會大大影響系統(tǒng)性能。
4.客戶端最大重試次數(shù)。數(shù)由參數(shù) ipc.client.connect.max.retries 指定,默認值為 10,也就是會連續(xù)嘗試 10 次(每兩次之間相隔 1 秒)。
YARN application用到的3個RPC協(xié)議,ApplicationClientProtocol,ApplicationMasterProtocol和ContainerManagementProtocol

四、ResourceManager
主要職責:
1.與客戶端交互,處理來自客戶端的請求;
2.啟動和管理ApplicationMaster,并在失敗的時候重啟它;
3.管理NodeManger,接收來自NodeManager的心跳信息,并向NodeManager下達管理命令;
4.資源管理和調(diào)度,接收來自ApplicationMaster的資源請求,并分配資源。
ResourceManager的內(nèi)部架構(gòu):

五、Hadoop HA基本框架:
Hadoop HA采用共享存儲的HA解決方案,即Active節(jié)點不斷地將信息寫入到共享存儲系統(tǒng),而StandBy節(jié)點不斷地讀取這些信息,從而保持二者的內(nèi)存信息同步。HA的主備切換分為手動模式和自動模式。
1.手動模式框架:

2.自動模式框架:

說明:
ZKFailoverCOntroller是基于Zookeeper實現(xiàn)切換控制,ActiveStandbyElector負責與Zookeeper集群交互,通過嘗試獲取全局鎖,以判斷所管理的Master是進入Active還是進入Standby狀態(tài),HealthMonitor負責監(jiān)控各個Master的狀態(tài),以根據(jù)它們狀態(tài)進行切換。Zookeeper是通過維護一把全局鎖控制整個集群有且僅有一個Active Master,避免腦裂。
六、YARN資源調(diào)度
YARN采用了雙層資源調(diào)度模型
第一層:ResourceManager中的資源調(diào)度器將資源分配給各個ApplicationMaster·;
第二層:ApplicationMaster再進一步將資源分配給內(nèi)部的各個task。

YARN有三種調(diào)度器可用:FIFO調(diào)度器(First IN First Out Scheduler)、容量調(diào)度器(Capacity Scheduler)、公平調(diào)度器(Fair Scheduler)




七、NodeManager
NodeManager的主要功能是管理Hadoop集群中的單個計算節(jié)點,包括與ResourceManager保持通信、管理COntainer的生命周期、監(jiān)控每個Container的資源使用情況,追蹤節(jié)點健康狀況、管理日志等。

1.分布式緩存機制
Hadoop 將文件緩存到各個NodeManager節(jié)點的本地磁盤上、當NodeManager收到啟動任務請求后,如果文件已經(jīng)在本地磁盤上,則可以直接運行任務,否則等待文件緩存到本地磁盤后再啟動。NodeManager采用LRU算法定期清理過期的緩存文件。
八、Container的生命周期
Container的三個階段:
1.資源本地化:主要工作是初始化各種服務組件、創(chuàng)建工作目錄、從HDFS下載所需的各種資源(文本文件,JAR、可執(zhí)行文件)等,即主要是前面完成的分布式緩存機制完成的工作。


2.Container啟動:即ContainersLauncher服務調(diào)用插拔式組件ContainerExecutor;

3.資源清理:即階段1的逆過程,由ResourceLocalizationService負責。
