【編者按】作為國內搜尋巨頭,百度收錄全世界超過一萬億的網頁,每天響應中國網民大約幾十億次的請求。那麼,在面對如此龐大的資料處理時,百度是如何構建並優化分散式計算平臺,又如何完成一次次系統構架的演進呢?在“OneAPM 技術公開課”中,百度的基礎架構部高階技術經理朱冠胤根據自己的實踐經歷,對以上問題進行了詳細闡述。

以下為演講整理:

大家好! 我來自百度開放雲大資料團隊,2008年1月加入百度,一直在從事大資料分析和挖掘相關工作。目前我們將服務百度內部核心業務多年的Hadoop服務BMR(BaiduMapReduce)、大規模機器學習服務BML(Baidu MachineLearning)等正式對外開放。接下來我就跟大家分享一下BMR和BML為代表的百度大資料分析和挖掘平臺演進歷程以及在該領域的最新思考。

其實,如果涉及到“大資料”,不得不提百度最大的業務——搜尋。百度搜尋已經收錄全世界超過一萬億的網頁,每天響應中國網民大約幾十億次的請求。除此之外,百度還有另外20多個使用者過億的產品線,而且各個產品底層的大規模資料處理,都需要使用我們團隊維護的大資料處理平臺。

 
3417eb9bbd9017aa9beb2b
百度分散式計算平臺:離線引擎優化

關於MapReduce

3417eb9bbd9017aa9b9628
首先介紹主要的離線計算模型——MapReduce,百度從2007年開始引進Hadoop 0.15.1,隨後快速發展,2011年百度的MR單叢集規模達到5000臺,到2013年已經多達1.3萬臺,這也是截止到目前為止全世界最大的單叢集。Hadoop全叢集規模為10萬量級, 作業量達到了百萬量級,日均CPU利用率超過80%,遠超業界同行,百度開放雲(http://cloud.baidu.com)底層依賴的大規模叢集排程、資源隔離等技術能力世界領先。除了在規模方面不斷擴大,我們一直在Hadoop效能分析方面進行了大量的優化。2013年的測試結果顯示,百度內部MR實現相比於開源Hadoop效能提升30%。典型優化,例如Hadoop中的Shuffle,我們將其做成一個統一的shuffle服務,不再佔用Map或Reduce槽位。比如對關鍵熱點函式採用SSE向量化等。

3417eb9bbd9017aa9bc42a
2014年,我們繼續對計算引擎做了大幅優化, Native C++實現的DAG引擎正式上線。下圖是一個 4輪MR Job實現的典型業務流示例,DAG引擎上線後,可以優化成一個DAG作業,可以避免3次Reduce寫多副本引入的磁碟IO及網路IO,還可以規避2次Map讀HDFS的IO以及處理耗費。

 
3417eb9bbd9017aa9cc030
下圖是一個真實業務由SQL計算表示層翻譯下來的,基於MR引擎時,SQL會翻譯成25個MR JOB,如果我們把它優化成DAG,能夠避免很多次磁碟IO操作。在優化之後,執行時間直接縮減到1個小時,優化前後的差異非常顯著。

3417eb9bbd9017aa9cd231
記憶體流式Shuffle

2014年,我們對Shuffle進行重大重構,初期實習生同學完成的Demo以BaiduSort名義參與了2014年Sort BenchMark大資料排序國際大賽,並獲得冠軍(2015年百度沒再參加,國內其他公司以同樣技術通過更大規模叢集重新整理記錄)。2015年,新Shuffle技術完成全面上線。Hadoop預設Shuffle實現為基於磁碟Pull模式,計算過程顯式分成Map、Shuffle、Reduce過程;Baidu研發的新Shuffle採用記憶體流式Push模式,Map端完成部分記錄處理後直接從記憶體中將計算結果推送給下游。

3417eb9bbd9017aa9cde32
舉例來說,Map處理256MB輸入資料,在記憶體流式Shuffle模式下,處理完100條記錄以後,直接通過記憶體推送到下游,這樣就形成流水線方式處理。不再有顯式的Shuffle階段。

目前,該Shuffle元件為通用元件,正逐步推廣到其他分散式計算平臺中。

百度分散式計算平臺:系統架構演進

前面重點介紹了百度開放雲BMR服務中涉及到的規模、效能方面優化思路和效果,接下來跟大家一起分享一下,我們遇到的整體架構方面挑戰以及優化思路。

2012年系統架構中,最主要的兩個離線計算平臺,左邊是以MapReduce模型為主的批量計算平臺BMR,右邊是MPI /BSP模型為主的大規模機器學習平臺BML。從最下面可以看到,MapReduce和MPI模型底層硬體就有較大差異。Hadoop分散式檔案系統多副本以及強大的故障處理機制,使得Raid卡完全沒有必要,採用多塊超大容量SATA硬碟非常適合。

而MPI差別較大,MPI是一個訊息傳輸框架,它在設計之初就沒有考慮太多異常處理,因此它對底層系統可靠性要求非常高。百度採用了非常高配置的伺服器,例如帶Raid卡的sas硬碟,超大記憶體、萬兆互聯等。

3417eb9bbd9017aa9cec33
BMR Hadoop由大量SATA硬碟的伺服器構成,儲存系統為HDFS,資源排程層面百度有自研的排程器ARK(與社群Yarn比較類似)。而BML大規模機器學習平臺上,支援的業務樣本超過數百億計量級,特徵規模也遠超百億。我們在執行機器學習時,需要先啟動MapReduce,然後再將資料從HDFS分發到各個MPI節點,這種方式對網路頻寬的要求很高。

3417eb9bbd9017aa9cfa34
系統部同事持續改進內網頻寬的同時,BML平臺層面也在思考應該如何解決跨MR和MPI倆大叢集間的日益嚴重的網路頻寬問題。

另外還有一個需求:MPI是一種事務性排程模型,比如一個業務需要200臺機器,如果平臺此時只有199臺機器空閒,實際也很難用起來(除非修改提交引數,但涉及輸入資料重新分塊處理等比較複雜)。另外MPI計算往往顯式分為計算、傳輸、計算等階段(即BSP模型),因此資源利用波動性較大,例如CPU計算階段,網路空閒;網路傳輸或全域性同步階段,CPU空閒。為解決這個問題,我們在MPI叢集中引入IDLE計算,IDLE業務資源佔用充分可控,典型的IDLE任務如MapReduce任務,而執行MR任務又會進一步加劇MR叢集和MPI叢集間網路頻寬問題。

基於以上考慮,我們正式講MPI底層硬體替換為替換成高配置儲存型伺服器,硬碟同構,檔案系統都採用HDFS,BML演算法輸入和輸出均通過HDFS,不再是本地檔案系統。

BML機器學習執行引擎層面,我們基於MPI封裝了DVCE(Distributed VectorComputingEngine)分散式向量計算引擎,遮蔽MPI過於低層的程式設計介面,通過高層抽象自動翻譯為MPI任務,這就是百度第二代專門針對“平行計算”開發的系統框架。

3417eb9bbd9017aa9d0835
2014年,BML機器學習執行引擎遷移到ELF第三代平行計算框架, ELF採用ParameterServer架構,大幅降低機器學習演算法開發代價,對比於百度的第二代框架DVCE,在開發效率方面有大幅度的提升。離線計算方面,完成了Native C++ DAG引擎上線,百度內部叫DCE(Distributed ComputingEngine)。

2014年BMR和BML底層都採用Matrix完成資源分配與隔離,其他平臺如小批量計算系統TaskManager和毫秒級計算延遲的Dstream系統,都基於業務需求特殊性,採用獨立的資源隔離和排程系統。

2015年的架構改進,主要是將所有的計算模型均遷移到Matrix+Normandy架構。Normandy相容社群Yarn排程介面,開源社群新型興計算平臺可以很輕鬆的接入到百度的計算生態裡。

3417eb9bbd9017aa9d1536
我們已經介紹了百度大資料分析和挖掘平臺主要的底層引擎和架構,接下來談一下最新思考。

系統底層是IDC硬體,接著是Matrix,再是Normandy,然後是幾個主要的引擎。之前介紹底層架構的統一,比如在硬體、排程、儲存等方面的統一。實際上各個系統對外的結果,都有自己的介面,如果要使用MR,很多人寫MR程式都是直接呼叫Hadoop原生介面,配置涉及到的多個引數。部分業務還需要流式系統完成日誌清洗,在經過MapReduce模型批量預處理,隨後通過ELF完成機器學習模型訓練,最後再通過MapReduce模型完成模型評估,可見一個業務需要跨越多個模型,需要業務線同學同時熟悉很多模型和平臺,而每一個模型又有各自特點和介面。只有足夠了解模型的細節和介面後,才能真正的利用好該模型。

3417eb9bbd9017aa9d2337
於是我們正式立項BigFlow專案(原專案名DataFlow,圖片未來及修改),將模型的細節遮蔽。平臺自動決定選擇合適的併發度,甚至智慧選擇應該把這個翻譯到哪個計算模型。BigFlow可以支援多個不同的計算引擎(每個引擎在其適合的領域做到極致),充分發揮各引擎效能和功能。所以使用者使用同一套介面,便能對應到不同的任務。由於採用高層抽象,業務開發效率獲得大幅提升,程式碼量大幅減少,其維護成本也大幅降低。BigFlow整合常見優化手段,因此將大幅提升平臺有效資源佔用。

百度開放雲——大資料+智慧

最後,向大家簡要介紹百度開放雲。2014年,百度正式決定將服務內部業務多年的雲端計算技術正式對外提供服務,即百度開放雲,對應官網http://cloud.baidu.com。百度開放雲大資料方面,BMR已經對外開放,而更多的大資料分析和服務都還未對外開放。BMR叢集上可以做到按需部署,使用者專享,更關鍵的是完全相容開源的Hadoop/Spark平臺,開放雲客戶基於Hadoop、Spark、Hbase等已經實現的大資料業務幾乎不用修改就可以平滑遷移到雲上。多維分析服務Palo,它完全相容MySQL網路協議,因此,客戶朋友們熟悉的Mysql Client的工具均可使用。

3417eb9bbd9017aa9d3038
同時,Palo支援JDBC、ODBC的程式設計介面,如果已有程式採用的是JDBC、ODBC,那麼遷移成本幾乎為零。最後看到它與業界主流的BI工具商業分析的工具對接的,比如Tableau、Saiku、BIEE、R。

最後再介紹機器學習雲服務BML,BML中提供的深度學習技術,曾獲得2014年百度最高獎。BML提供端到端的解決方案,裡面提供的演算法均服務百度內部業務多年,典型如網頁搜尋、百度推廣(鳳巢、網盟CTR預估等)、百度地圖、百度翻譯等。

使用開放雲BMR和BML、Palo等,就可以立刻、直接享用與百度搜尋同等品質的大資料分析和挖掘服務!

3417eb9bbd9017aa9d3939
以上是本次演講的主要內容,再簡要跟大家回顧一下,首先與大家一起分享了百度分散式計算平臺和戰略引擎方面,我們所做的規模和效能方面的一些優化,之後主要探討了百度在計算的系統架構裡的演進。結合以上內容,最後簡要介紹了大資料的產品和服務,希望能夠幫助大家瞭解百度開放雲大資料分析和挖掘服務,感謝大家!

關於朱冠胤:

•2008年碩士畢業於北郵,現任百度開放雲大資料負責人,基礎架構部高階技術經理;

•2008年1月加入百度實習,作為國內首批Hadoop研發工程師之一,參與了百度Hadoop平臺從無到單叢集全球最大整個過程;

•2009年開始作為負責人開始從無到有建設百度大規模機器學習平臺,陸續參與了鳳巢CTR預估、網盟CTR預估、大搜尋PageRank、機器翻譯等核心機器學習專案。2014年8月,與其他部門聯合研發的深度學習平臺獲百度最高獎;

•2015年8年,帶領團隊完成的智慧服務排程系統-Normandy獲得百度最高獎;

•目前主要負責百度開放雲大資料產品研發和推廣,已上線國內首個雲端全託管的Hadoop/Spark服務BMR,國內首個機器學習雲服務BML等;

•關注領域主要是大資料分析和挖掘技術,包括但不限於Hadoop/Spark、深度學習等。

來源:CSDN