Zeppelin原始碼

哥不是小蘿莉發表於2017-10-15

1.概述

  在大資料應用場景中,處理資料分析方面,由於開發者的水平不一樣,使用的程式語言也不盡相同,可能會涉及到R、Python、Java、Scala等,資料計算模型也估計不一樣,可能涉及的有Spark、Hive、Flink、Kylin等等。本篇部落格筆者給大家介紹的內容並不是告訴大家如何去使用。在《Zeppelin使用心得》中有介紹如何使用,這裡就不多做贅述了,今天主要是給大家剖析Zeppelin的原始碼模組。

2.內容

  目前Zeppelin官方已經發布版本為0.7.3,原始碼帶託管在Github上,大家可以先將Zeppelin的原始碼在Github上下載下來。Zeppelin的專案結構是以Maven的形式存在的,由多個Module構成,分為框架核心Module和其他Interpreter Module,原始碼結構如下圖所示:

  從截圖中可以看出,其實Zeppelin到目前為止,整合了很多外掛,比如Beam、HBase、ES、Flink、Kylin、Pig等,這些都是平時大資料場景下常用的。

2.1 模組分析

  Zeppelin的入口是ZeppelinServer(在zeppelin-server模組下)這個類下的Main函式,通過Jetty內嵌伺服器提供WebSocket服務和Restful服務,還基於Shiro提供了許可權認證和使用者校驗功能,都是使用Java程式語言實現的。在zeppelin-zengine模組下,實現Notebook的持久化和檢索功能,同樣使用Java語言實現。在zeppelin-interpreter模組下,通過呼叫zeppelin-zengine中的Thrift服務,來實現直譯器的互動功能。在zeppelin-web模組下,用於指令碼語言編寫以及資料的視覺化,使用AngularJS前端框架實現。其他模組詳見下表。

名稱 說明 實現語言
zeppelin-server 整個系統入口,提供伺服器功能、許可權認證以及使用者校驗等功能 Java
zeppelin-zengine 實現Zeppelin中Notebook的持久化和檢索功能 Java
zeppelin-interpreter 執行直譯器 Java
zeppelin-web 業務指令碼語言編寫、資料分析介面、資料視覺化與結果匯出 AngularJS
zeppelin-display 讓前端的AngularJS元素與後臺資料進行繫結,進行資料互動 Scala
zeppelin-distribution 用於存放編譯後的二進位制安裝包    
zeppelin-examples 示例程式碼,用於測試  
helium-dev 新特性,讓直譯器,儲存外掛加入到Zeppelin中時,不需要重啟Zeppelin服務 Java

  Zeppelin專案運用了許多程式語言和框架,屬於一個混合專案。

3.原始碼除錯

  明白Zeppelin各個模組的功能和作用後,我們可以嘗試去除錯一下Zeppelin的原始碼,這裡我們將Zeppelin的原始碼匯入到 IDEA 編輯器,然後找到ZeppelinServer啟動,如下圖所示:

  然後選擇“Run 'ZeppelinServer.main()'”命令即可,等待服務啟動完成,啟動成功後,會在編輯器控制檯列印日誌,如下圖所示:

  這裡,在啟動埠預設是8080,在ZeppelinConfiguration類下可以進行編輯,如下圖所示:

  然後,我們可以到瀏覽器預覽除錯結果,如下圖所示:

  一般在二次開發完成Zeppelin的功能後,我們會將原始碼重新編譯打包,可以使用Maven打包命令,如下所示:

mvn clean package -Pbuild-distr -Dcheckstyle.skip=true -DskipTests

  打包完成後,會在zeppelin-distribution的target目錄下生成一個二進位制的軟體安裝包。

4.關係圖

  這裡筆者給大家整理了Zeppelin-0.7.3的各個Module之間的關係圖,如下所示:

5.結束語

  這篇部落格就和大家分享到這裡,如果大家在研究學習的過程當中有什麼問題,可以加群進行討論或傳送郵件給我,我會盡我所能為您解答,與君共勉。

相關文章