京東實戰案例:基於Alluxio優化大數據計算框架的容錯性和靈活性

編者按:本文是由京東大數據團隊撰寫的關於Alluxio深度應用到京東大數據平臺的實踐案例。 

京東(JD)大數據平臺是一個開放、安全、智能的平臺,它提供了可視化管理和監控系統,可以方便、快捷地定位集群問題。目前,平臺上擁有超過4萬臺服務器,每天處理超過100萬個任務,管理的數據總量超過450PB,而且以每天超過800TB的規模增長。這些規模龐大的數據及其處理內容,幫助我們在豐富的場景下實現了諸多相關的智能應用。目前,OLAP已經廣泛運用到了京東大數據平臺各個業務線,每天提供的查詢服務超過50萬次,覆蓋範圍包括從商城APP、微信、手機QQ,到離線數據分析平臺。

Alluxio作為一款容錯的可插拔的優化組件,應用於京東體系內諸多計算框架。我們利用Alluxio優秀的緩存能力為Ad Hoc和實時流計算框架提供良好的支撐,以降低集群對於網絡吞吐的消耗,為統計業務報表以及為營銷決策提供數據支撐。京東數名最優秀的研發工程師,根據業務場景和特點,基於京東大數據平臺和Alluxio搭建了國內已知最大的Presto集群。我們實現了業界第一款Presto和Alluxio相結合的大數據量企業級交互式查詢處理引擎,使Ad Hoc查詢性能提升10倍以上。JDPresto on Alluxio目前已經在京東生產環境上線400臺節點運行2年多,覆蓋從商城APP到微信手機QQ,到離線數據分析平臺,多快好省地幫助京東千萬商家和10億消費者提供更加精準的營銷和用戶體驗。另外,在大數據平臺的建設和維護過程中,京東的大數據工程師團隊也為Alluxio開源社區做出了許多貢獻。

一、京東大數據平臺的業務問題背景

京東大數據平臺擁有巨大的規模以滿足京東不斷增長的業務需求:

  • 集群規模:服務器數目超過4萬臺,其中離線集群總規模在2.5萬餘臺,服務超過1.3萬用戶;
  • 計算能力:日處理離線數據超過40PB,日運行作業數目超過100萬;
  • 存儲能力:總數據量超過650PB,日增數據量超過800TB,總存儲容量達到1EB;
  • 業務能力:覆蓋超過40個業務主題,450個數據模型。

圖1是京東大數據平臺的體系架構。我們的大數據平臺是一個開放、安全、智能的平臺。HDFS作為分佈式存儲系統是整個平臺的基礎,許多計算框架工作在Yarn上。Alluxio作為分佈式緩存系統,在計算框架和HDFS之中就像一座橋樑隔離了計算框架和底層存儲。

京東實戰案例:基於Alluxio優化大數據計算框架的容錯性和靈活性

圖1 京東大數據分佈式平臺的體系架構

二、JDPresto on Alluxio架構與特性的介紹

本小節介紹JDPresto on Alluxio的使用案例。Alluxio作為容錯可插拔的優化組件,應用於京東體系內諸多計算框架。利用Alluxio優秀的緩存能力提供對Ad Hoc和實時流計算原生的支撐,降低集群對於網絡消耗的依賴。JDPresto on Alluxio已經在我們的生產環境上線400臺節點運行2年了,帶來了10倍平均性能提升。

圖2展示了在使用Alluxio前後,Presto worker讀取數據方式的區別。如上圖左邊所示,在使用Alluxio之前,Prestoworker有大概率從遠端datanode讀取數據.由於網絡延遲,這會消耗很多時間。而上圖的右邊則顯示出在使用Alluxio之後,Presto worker可以從同一節點上的Alluxioworker讀到緩存的數據,這能夠避免或減少從HDFS的遠程讀取開銷,從而提高訪問速度。簡言之,Alluxio為Presto帶來了更多的本地性和與底層文件系統的隔離性,從而保障了查詢性能。

京東實戰案例:基於Alluxio優化大數據計算框架的容錯性和靈活性

圖2 Presto worker在使用Alluxio前後的讀取數據方式區別

圖3展示了我們修改後的JDPresto讀split的邏輯。通常情況下,Presto從Alluxio讀取數據,如果Alluxio發現沒有數據,則從HDFS讀取數據並緩存到Alluxio中,同時返回給Presto。這之後如果Presto再讀取同樣的數據,則會從Alluxio中讀到緩存的數據,直接返回給Presto。當Alluxio服務不可用時,它可以直接訪問HDFS。此外,我們還擴展了Alluxio,增強了Alluxio和HDFS之間的一致性驗證。

京東實戰案例:基於Alluxio優化大數據計算框架的容錯性和靈活性

圖3 修改後的JDPresto讀split的邏輯

三、JDPresto on Alluxio的性能評估與分析

如圖4所示,我們的性能對比測試使用的是JDPresto的client終端在兩個Presto集群,多次執行相同的SQL查詢。左邊,JDPresto直接訪問HDFS,作為參照。右邊為實驗對象,JDPresto使用Alluxio作為分佈式緩存。

京東實戰案例:基於Alluxio優化大數據計算框架的容錯性和靈活性

圖4 JDPresto和JDPrestoon Alluxio的性能結果對比

紅色矩形圈起來的數字是當次SQL耗時。很明顯,右邊的比左邊快。這是因為我們使用Alluxio緩存表格或分區文件。因此,在第一次訪問後,Alluxio可以加速查詢。圖5是另一個視角,Presto的WebUI,我們可以和終端得到相同的結果,並且查詢耗時從20秒降低到不到1秒,這是非常令人興奮的結果!

京東實戰案例:基於Alluxio優化大數據計算框架的容錯性和靈活性

圖5 Presto WebUI展示的查詢性能對比

圖6總結了本次測試的結果。本次測試一共執行了6次對比查詢。綠線代表JDPresto,黃線代表JDPresto-on-Alluxio。X軸表示查詢次數,Y軸表示查詢時間,單位是秒。我們可以看到JDPresto-on-Alluxio可以在第一次讀之後減少讀取時間,相比JDPresto集群快很多。

京東實戰案例:基於Alluxio優化大數據計算框架的容錯性和靈活性

圖6 JDPresto和JDPresto-on-Alluxio查詢6次的性能對比

四、JDPresto on Alluxio的應用總結

為了達到本節中的優化效果,我們開展大量工作,包括修改了Alluxio和JDPresto,以及開發一些測試工具。如圖7,我們還圍繞App-on-Yarn也進行了一些工作。同時,我們正在積極地調研和評估,把Alluxio應用在其它計算框架中。在應用Alluxio的過程中,我們理解到Alluxio作為分佈式緩存未必適用於所有的應用場景。大數據平臺架構師需要深入理解Alluxio的工作原理,並結合自己公司的業務特點,找到適合的應用場景。

京東實戰案例:基於Alluxio優化大數據計算框架的容錯性和靈活性

圖7 京東在Alluxio、Presto、App on YARN上關注的一些工作


分享到:


相關文章: