深入剖析阿里巴巴雲梯YARN叢集

NO IMAGE
摘要:阿里巴巴是國內使用Hadoop最早的公司之一,已開啟了Apache Hadoop 2.0時代。本文將詳細介紹阿里巴巴如何充分利用YARN的新特性來構建和完善其多功能分散式叢集——雲梯YARN叢集。
阿里巴巴作為國內使用Hadoop最早的公司之一,已開啟了Apache Hadoop 2.0時代。阿里巴巴的Hadoop叢集,即雲梯叢集,分為儲存與計算兩個模組,計算模組既有MRv1,也有YARN叢集,它們共享一個儲存HDFS集 群。雲梯YARN叢集上既支援MapReduce,也支援Spark、MPI、RHive、RHadoop等計算模型。本文將詳細介紹雲梯YARN叢集的 技術實現與發展狀況。

MRv1與YARN叢集共享HDFS儲存的技術實現

以服務化為起點,雲梯叢集已將Hadoop分為儲存(HDFS)服務與計算(MRv1和YARN)服務。兩個計算叢集共享著這個HDFS儲存叢集,這是怎麼做到的呢?

在引入YARN之前,雲梯的Hadoop是一個基於Apache Hadoop 0.19.1-dc版本,並增加許多新功能的版本。另外還相容了Apache Hadoop 0.19、0.20、CDH3版本的客戶端。為了保持對客戶端友好,雲梯服務端升級總會保持對原有客戶端的相容性。另外,為了訪問資料的便捷性,阿里的存 儲叢集是一個單一的大叢集,引入YARN不應迫使HDFS叢集拆分,但YARN是基於社群0.23系列版本,它無法直接訪問雲梯HDFS叢集。因此實現 YARN叢集訪問雲梯的HDFS叢集是引入YARN後第一個需要解決的技術問題。

Hadoop程式碼主要分為Common、HDFS、Mapred三個包。

  • Common部分包括公共類,如I/O、通訊等類。
  • HDFS部分包括HDFS相關類,依賴Common包。
  • Mapred部分包括MapReduce相關程式碼,依賴Common包和HDFS包。

為了儘量減少對雲梯HDFS的修改,開發人員主要做了以下工作。

  • 使用雲梯的HDFS客戶端程式碼替換0.23中HDFS,形成新的HDFS包。
  • 對0.23新的HDFS包做了少量的修改使其可以執行在0.23的Common包上。
  • 對0.23新的HDFS包做了少量修改使0.23的Mapred包能執行在新的HDFS包。
  • 對雲梯的Common包的通訊部分做了hack,使其相容0.23的Common。

圖1 雲梯Hadoop程式碼架構

新的雲梯程式碼結構如圖1所示,相應闡述如下。

服務端

  • 儲存部分使用原有的HDFS。
  • MRv1計算叢集中提供原MRv1服務。
  • YARN叢集提供更豐富的應用服務。

客戶端

  • 雲梯現有的客戶端不做任何修改,繼續使用原有的服務。
  • 使用YARN的服務需要使用新客戶端。

雲梯MR服務切換為YARN要經過三個階段

  • 服務端只有MRv1, 客戶端只有老版本客戶端。
  • 服務端MRv1和YARN共存(MRv1資源逐漸轉移到YARN上), 客戶端若需使用MRv1服務則保持客戶端不變;若需使用YARN服務則需使用新版客戶端。
  • 服務端只剩下YARN,客戶端只有新版本客戶端。

通過上述修改,雲梯開發人員以較小的修改實現了YARN對雲梯HDFS的訪問。

Spark on YARN的實現

雲梯版YARN叢集已實現對MRv2、Hive、Spark、MPI、RHive、RHadoop等應用的支援。雲梯叢集當前結構如圖2所示。

圖2 雲梯架構圖

其中,Spark已成為YARN叢集上除MapReduce應用外另一個重要的應用。

Spark是一個分散式資料快速分析專案。它的核心技術是彈性分散式資料集(Resilient Distributed Datasets),提供了比MapReduce豐富的模型,可以快速在記憶體中對資料集進行多次迭代,來支援複雜的資料探勘演算法和圖形計算演算法。

Spark 的計算排程方式,從Mesos到Standalone,即自建Spark計算叢集。雖然Standalone方式效能與穩定性都得到了提升,但自建叢集畢 竟資源較少,並需要從雲梯叢集複製資料,不能滿足資料探勘與計算團隊業務需求。而Spark on YARN能讓Spark計算模型在雲梯YARN叢集上執行,直接讀取雲梯上的資料,並充分享受雲梯YARN叢集豐富的計算資源。

Spark on YARN功能理論上從Spark 0.6.0版本開始支援,但實際上還遠未成熟,經過資料探勘與計算團隊長時間的壓力測試,修復了一些相對關鍵的Bug,保證Spark on YARN的穩定性和正確性。

圖3展示了Spark on YARN的作業執行機制。

圖3 Spark on YARN框架

基於YARN的Spark作業首先由客戶端生成作業資訊,提交給ResourceManager,ResourceManager在某一 NodeManager彙報時把AppMaster分配給NodeManager,NodeManager啟動 SparkAppMaster,SparkAppMaster啟動後初始化作業,然後向ResourceManager申請資源,申請到相應資源後 SparkAppMaster通過RPC讓NodeManager啟動相應的SparkExecutor,SparkExecutor向 SparkAppMaster彙報並完成相應的任務。此外,SparkClient會通過AppMaster獲取作業執行狀態。

目前,資料探勘與計算團隊通過Spark on YARN已實現MLR、PageRank和JMeans演算法,其中MLR已作為生產作業執行。

雲梯YARN叢集維護經驗分享

雲梯YARN的維護過程中遇到許多問題,這些問題在維護YARN叢集中很有可能會遇到,這裡分享兩個較典型的問題與其解決方法。

  • 問題1

問題描述:社群的CPU隔離與排程功能,需要在每個NodeManager所在的機器建立使用者賬戶對應的Linux賬戶。但阿里雲梯叢集有5000多個賬 戶,是否需要在每個NodeManager機器建立這麼多Linux賬戶;另外每次建立或刪除一個Hadoop使用者,也應該在每臺NodeManager 機器上建立或刪除相應的Linux賬戶,這將大大增加運維的負擔。

問題分析:我們發現,CPU的隔離是不依賴於Linux賬戶的,意味著即 使同一個賬戶建立兩個程序,也可通過Cgroup進行CPU隔離,但為什麼社群要在每臺NodeManager機器上建立賬戶呢?原來這是為了讓每個 Container都以提交Application的賬戶執行,防止Container所屬的Linux賬戶許可權過大,保證安全。但云梯叢集很早前就已分 賬戶,啟動Container的Linux賬戶統一為一個普通賬戶,此賬戶許可權較小,並且使用者都為公司內部員工,安全性已能滿足需求。

解決方案:通過修改container-executor.c檔案,防止其修改Container的啟動賬戶,並使用一個統一的普通Linux賬戶(無sudo許可權)執行Container。這既能保證安全,又能減少運維的工作量。

  • 問題2

問題描述:MRApplicationMaster初始化慢,某些作業的MRApplicationMaster啟動耗時超過一分鐘。

問 題分析:通過檢查MRApplication-Master的日誌,發現一分鐘的初始化時間都消耗在解析Rack上。從程式碼上分 析,MRApplicationMaster啟動時需要初始化TaskAttempt,這時需要解析split資訊中的Host,生成對應的Rack信 息。雲梯當前解析Host的方法是通過呼叫外部一個Python指令碼解析,每次呼叫需要20ms左右,而由於雲梯HDFS叢集非常大,有4500多臺機 器,假如輸入資料分佈在每個Datanode上,則解析Host需要花費4500×20ms=90s;如果一個作業的輸入資料較大,且檔案的備份數為3,
那麼輸入資料將很有可能分佈在叢集的大多Datanode上。

解決方案:開發人員通過在Node-Manager上增加一個配置檔案,包含所有Datanode的Rack資訊,MRApp-licationMaster啟動後載入此檔案,防止頻繁呼叫外部指令碼解析。這大大加快了MRApplicationMaster的初始化速度。

此外,雲梯開發人員還解決了一些會使ResourceManager不工作的Bug,並貢獻給Apache Hadoop社群。

在搭建與維護雲梯YARN叢集期間,雲梯開發人員遇到並解決了許多問題,分析和解決這些問題首先需要熟悉程式碼,但程式碼量巨大,我們如何能快速熟悉它們呢?這 需要團隊的配合,團隊中每個人負責不同模組,閱讀後輪流分享,這能加快程式碼熟悉速度。另外,Hadoop的優勢在於可以利用社群的力量,當遇到一個問題 時,首先可以到社群尋找答案,因為很多問題在社群已得到了解決,充分利用社群,可以大大提高工作效率。

雲梯YARN叢集的優勢與未來之路

當前雲梯YARN叢集已經試執行,並有MRv2、Hive、Spark、RHive和RHadoop等應用。雲梯YARN叢集的優勢在於:

  • 支援更豐富的計算模型;
  • 共享雲梯最大的儲存叢集,訪問便捷、快速;
  • AppHistory資訊儲存在HDFS上,各種應用的作業歷史都能方便檢視;
  • 相對於MRv1叢集,雲梯YARN能支援更大規模的叢集;
  •  相對於MRv1叢集,雲梯YARN叢集支援記憶體和CPU排程,資源利用將更加合理。

未來,雲梯將會把大多業務遷移到雲梯YARN叢集。針對YARN版本,雲梯將增加資源隔離與排程,增加對Storm、Tez等計算模型的支援,並優化YARN的效能。

作者沈洪,花名俞靈,就職於阿里巴巴集團資料平臺事業部海量資料部門,目前從事YARN、MapReduce的研究、開發與叢集的維護。

Ref: http://www.csdn.net/article/2013-12-04/2817706–YARN