汪磊(網易雲音樂數據平臺組)html
音樂自2013發佈以來,已經走過6個多年頭,累計用戶量突破8億,天天光用戶的行爲日誌就已經突破了千億,咱們經歷了杭研猛獁平臺從無到有
的整個發展階段,在早期猛獁還很是不成熟的狀況下,Zeppelin能夠說是伴隨這咱們音樂數據分析師、數據開發團隊發展壯大的一個重要工具, 雲音樂是如何使用Zeppelin., 咱們對Zeppelin作了哪些工做?前端
Zeppelin是一個基於Web的能夠作交互式數據查詢、數據分析、數據可視化且可多人協做的NoteBook工具,支持NoteBook的權限控制、動態表單、以及調度執行git
目前是Apache的頂級開源項目 github.com/apache/zepp…github
Zeppelin的主要用戶有三類web
Zepplelin自己採用了一個很是好的可插拔的架docker
主應用ZeppelinServer,而後分別有三個可擴展模塊,NoteBook存儲、解釋器、以及可視化模塊,每一個模塊都是可擴展的,這裏我着重講一下解釋器數據庫
Spark插件自己就是一個常駐的Spark任務,在Spark的Driver端啓動一個Thirft Server,而後經過Thirft和Zeppelin Server進行通訊,接受執行SQL、Scala、Python等任務、反饋執行進度等;這種架構的問題很明顯,當用戶不少,解釋器的數量不少時,單機很塊就會成爲性能瓶頸,這塊最新的版本已經能夠把Thirft Server包裝到Docker環境中,和K8S集羣對接解決這個問題,這塊的代碼是咱們杭研的同窗提供的解決方案,仍是比較給力的;Interpreter更多的介紹能夠參考What is Apache Zeppelin Interpreterapache
可視化擴展:參考:Helium後端
存儲擴展:參考:zeppelin.apache.org/docs/0.8.1/…緩存
雲音樂從16年開始大規模使用Zeppelin做爲咱們主力的分析查詢工具,截止當前以及有NoteBook3000+,天天Adhoc執行次數300+次左右,調度任務數200+;用戶數:60+,主要是咱們的數據開發和分析師同窗,在三年多的時間裏咱們對Zeppelin也作過不少的修改,下面給你們介紹一些可見的比較典型的部分:
簡單解釋下:以Spark插件爲例,Globally表示全部的人的任務都由一個Spark任務執行,PerNote表每一個Note一個Spark任務,PerUser表示一個用戶一個Spark任務,初期爲了防止定時任務和AdHoc任務相互干擾,影響體驗,咱們對這塊作了一些修改,對於定時任務我採用一個Note一個任務,Adhoc任務採用每一個Note一個任務;可是隨着用戶慢慢的增多,定時任務愈來愈多,單機的瓶頸漸漸展示,Zeppelin自己的穩定性以及Spark任務的穩定性都常常出現問題;爲了解決這個問題,保證定時任務的穩定性;咱們決定將zeppelin整合到咱們音樂搭建不久數據平臺體系當中,用咱們的一些基礎服務替換zeppelin原有一些模塊,廢話少說直接看圖:
簡答介紹下咱們數據平臺的各個組件:
其中zeppelin是咱們今天要講的主角
執行服務:數據平臺的公共服務負責任務執行,執行類型組件可插拔熱部署,目前支持spark、zp、數據傳輸、tf、ps等等不少不一樣類型的任務,Pandora上全部的任務執行都是走的執行服務
調度服務、報警服務、元數據中心,這家你們看名字應該都能明白,這些都是公共基礎服務,共同支持Pandora上相應的功能模塊。
咱們總體的思路是將定時任務和AdHoc任務分開,AdHoc查詢任務仍是走zepplin自己服務執行,定時任務由於不須要中間進度的反饋,並且應該都是寫任務,只讀的調度任務也沒有什麼調度的必要,因此首先咱們咱們參考了Zeppelin自己Spark插件的實現,開發了一個ZP插件集成在咱們執行服務上,它的做用是接收Note的內容,將Note直接包裝成一個Spark任務提交,執行結束之後再把結果反饋回來;而後作了一些組件打通的工做,最終流程是:用戶在Zeppelin配置調度任務或者修改調度任務時Zeppelin會同步任務到Pandora上,此時Pandora上在相同的帳戶下會出現一個zeppelin類型的任務,全部調度任務都會在Pandora上經過執行服務執行,同時藉助Pandora完善的運維能力,這些調度任務也擁有了完善的監控、報警、回跑、重跑的能力
任務回跑
結果反饋
這樣就算Zeppelin自己服務掛了,也不會影響調度任務的正常執行,由於Pandora、調度、執行這些服務都是高可用、分佈式、可擴展的,因此也不會有單機瓶頸;作完這些改造Zeppelin只須要承擔Adhoc查詢就行了,固然隨着用戶量增加單機瓶頸仍是可能出現,可是問題的嚴重性好了不少,Adhoc任務失敗也不是什麼特別大的問題,固然咱們也有後續的計劃完全解決這個問題,如
a. 繼續改造zp,使用咱們的執行服務完成adhoc查詢操做
b. 使用現有docker方案
數據傳輸集成:
雲音樂有一套自研的基於Spark的異構數據源之間數據傳輸方案,對目前網易的存儲中間件:如DDB、HBase、Redis、NOS等都作過定製化的改造。目前這套方案已經貢獻給了杭研,不出之外的話,你們在10月份就能在猛獁上看到它的身影;在這個數據傳輸之上咱們還開發了一個SQL的版本集成在了Zeppelin當中,實現了數據傳輸、不一樣數據源之間的聯邦查詢等功能
寫入數據庫到Oracle
這塊的能夠講的東西不少,咱們也作了不少看不見的工做,如小文件自動merge,簡單的broadcast操做;精力有限就不在這裏作太多介紹,後面有機會再單獨開一篇來說。
1.音樂本身的規劃:繼續改造zeppelin和咱們平臺服務作更多的整合工做,目前分析師須要Pandora、zeppelin兩套系統中操做很是不方便,zepplein自己的服務的端的代碼寫的也不是很好特別是在多線程處理方面,
還須要一些時間打磨,後面咱們會考慮直接將zeppelin的功能集成到咱們的Pandora當中,只維護一套系統
2. zeppelin社區規劃:
分佈式:解決單機性能問題 https://issues.apache.org/jira/browse/ZEPPELIN-4104
容器化:Interpreter的Docker容器化支持,解決單機性能問題https://issues.apache.org/jira/browse/ZEPPELIN-3471
其它應該還有,工做太忙沒有太多時間關注了