1. 程式人生 > >yarn/zookeeper/solr/elasticsearch概況總結

yarn/zookeeper/solr/elasticsearch概況總結

一、Yarn簡單概況

Yarn為Hadoop資源管理系統;核心是將MapReduce V2 中的JobTracker分離,建立一個全域性的ResourceManager和若干個針對應用程式的ApplicationMaster。其中ResourceManager負責整個系統的資源管理和分配,而ApplicationMaster負責單個應用程式的管理。基本架構如下所示:

1)Yarn構成:主要由ResourceManager、NodeManager、container以及ApplicationMaster等組成;其中

ResourceManager控制整個叢集並管理應用程式向基礎計算資源的分配;

作用:處理客戶端請求;啟動和監控ApplicationMaster;監控NodeManager;資源的分配和排程。

NodeManager管理Yarn叢集中的每個節點;

作用:管理單個節點上的資源;處理來自ResourceManager的命令;處理來自ApplicationMaster的命令。

ApplicaitonMaster管理Yarn內執行的每個應用程式例項;

作用:負責資料的切分;為應用程式申請資源並分配給內部的任務;任務的監控和容錯。

Container是Yarn中的資源抽象;

作用:對任務執行環境進行抽象,封裝CPU,記憶體等多維度的資源以及環境變數,啟動命令等任務執行相關的資訊。

2)Yarn工作流:當用戶向Yarn提交一個應用程式後,

第一個階段是啟動ApplicationMaster;

第二個階段是由ApplicationMaster建立應用程式,為它申請資源,並控制它的整個執行過程,直到執行完成為止。

3)Yarn執行步驟:

  1. 使用者向Yarn中提交應用程式(包括ApplicationMaster程式,啟動ApplicationMaster的命令,使用者程式等);
  2. ResourceManager為該應用程式分配第一個container,並與對應的Node-Manager通訊,要求Container啟動應用程式ApplicationMaster;
  3. ApplicationMaster向ResourceManager註冊,使用者可以直接通過ResourceManager檢視應用程式的執行狀態,然後它將為各個任務申請資源並監控它的執行狀態,直到結束;
  4. ApplicationManager採用輪詢的方式通過RPC協議向ResourceManager註冊和申請資源;
  5. 一旦ApplicationMaster申請到資源後,便與NodeManager通訊,要求它啟動任務;
  6. NodeManager為任務設定好執行環境(環境變數、jar包、二進位制程式等),將任務啟動命令寫到一個指令碼中,並通過執行該指令碼啟動任務;
  7. 各個任務通過某一個RPC協議向ApplicationMaster彙報自己的狀態和進度,以讓ApplicationMaster隨時掌握各個任務的執行狀態,從而可以在任務失敗時重新啟動任務;
  8. 應用程式執行完成後,ApplicationMaster向ResourceManager登出並關閉自己。

二、ZooKeeper簡單介紹

 ZooKeeper是一種高可用、高效能且一致的開源協調服務,核心服務(分散式鎖服務),還包括其他服務(配置維護、組服務、分散式訊息佇列、分散式通知/協調等),採用的協議是Zab協議。

實現方式:資料結構(Znode)+原語(對資料結構的操作)+watch機制(通知機制)。

1、Zookeeper資料模型Znode:

              a)引用方式:Znode通過路徑引用(同時是絕對路徑);

              b)Znode結構:兼具檔案和目錄兩種特點。即像檔案一樣維護著資料、元資訊、ACL、時間戳等資料結構,又像目錄一樣可作為路徑標識的一部分,每個Znode包括三部分;stat:為狀態資訊,描述該Znode的版本,許可權等資訊;data:與該Znode關聯的資料;children:該Znode下的子節點。

             c)資料訪問:每個節點儲存的資料要被原子性的操作(即讀操作將獲取與節點相關的所有資料,寫操作也將替換節點的所有資料);

             d)節點型別:分為臨時節點與永久節點。節點的型別在建立時即被確定,同時不能改變;

            e)順序節點:當建立Znode時,使用者可以請求Zookeeper的路徑末尾新增一個遞增的計數。這個計數對於此節點的父節點來說時唯一的;

            f)觀察:客戶端在節點上設定watch(監視器),當節點狀態發生改變時將會觸發watch所對應的操作。

2、Zookeeper的特點:

             a)最終一致性:為客戶端展示同一個檢視;

             b)可靠性:若訊息被一臺伺服器接受,那麼它將被所有的伺服器接受;

           c)實時性:Zookeeper不能保證兩個客戶端同時得到剛更新的資料,若要更新足心資料,應該在讀資料之前呼叫sync()介面;

           d)等待無關:慢的或者失效的client不可干預快速的client的請求;

           e)原子性:更新只能成功或者失敗,沒有中間狀態;

            f)順序性:所有的server,同一個訊息釋出順序一致。

三、Zookeeper基本架構

  1. 每個server的記憶體中儲存了一份資料;
  2. Zookeeper啟動時,將從例項中選舉一個leader(Paxios協議);
  3. Leader負責處理資料更新等操作(zab協議);
  4. 一個更新操作成功,當且僅當大多數server在記憶體中成功修改資料。

三、solr簡單介紹

Solr是一個獨立的企業級搜尋應用伺服器,提供型別與webservice的API介面,使用者可以通過http請求,向搜尋引擎伺服器提交一定格式的XML檔案,生成索引,也可以通過http get操作提出查詢請求,並得到XML的返回結果。

Solr對外提供標準的http介面來實現對資料的索引的增加、刪除、修改、查詢。在solr中,使用者通過向部署在servlet容器中的solr web應用程式傳送http請求來啟動索引和搜尋。Solr接受請求,確定要使用的適當solrRequestHandler,然後處理請求,通過HTTP以同樣的方式返回響應。預設配置返回solr的標準XML響應,也可以配置Solr的備用響應格式。

Solr索引向servlet傳遞四個不同的索引請求:

Add/update允許向solr新增文件或更新文件。直到提交後才能搜尋到這些新增和更新;

Commit告訴solr,應該使得上次提交以來所做的所有更改都可以搜尋到;

Optimize重構Lucene的檔案以改進搜尋效能,索引完成後執行一下優化較好;

Delete可以通過id或者查詢來指定。按id刪除或刪除具有指定id的文件,按查詢刪除將刪除查詢返回的所有文件。

四、Elasticsearch簡單介紹:

Elasticsearch是一個基於lucene的搜尋伺服器,它提供一個分散式多使用者能力的全文搜尋引擎,基於Restful web介面,採用倒排序索引方式。

Elasticsearch是一個分散式可擴充套件的實時搜尋和分析引擎。它時一個建立在全文索引引擎apache lucene基礎上的搜尋引擎,不僅包括了全文搜尋功能,還可以

分散式實時檔案儲存,並將每一個欄位都編入索引,使其可以被索引;

實時分析的分散式搜尋引擎;

可以擴充套件到上百臺伺服器,處理PB級別的結構化或非結構化資料。

以上關於hadoop相關的內容,是我在初步學習hadoop相關概念時,把網上相關資料整合在一起,方便自己理解。如果有什麼問題,歡迎大家可以討論指正!