Apache Zeppelin項(xiàng)目結(jié)構(gòu)及代碼分析

前言

本文基于Apache Zeppelin 0.72版本對(duì)Zeppelin的源代碼進(jìn)行分析。

什么是Zeppelin

Apache Zeppelin是一款大數(shù)據(jù)分析和可視化工具慰毅,可以讓數(shù)據(jù)分析師在一個(gè)基于Web頁面的筆記本中窃祝,使用不同的語言,對(duì)不同數(shù)據(jù)源中的數(shù)據(jù)進(jìn)行交互式分析迈着,并對(duì)分析結(jié)果進(jìn)行可視化的工具。
簡(jiǎn)單來說,Zeppelin的核心功能就是:通過不同的解釋器支持多種語言的repl鳖藕,并對(duì)返回結(jié)果進(jìn)行可視化展示。

Zeppelin的項(xiàng)目結(jié)構(gòu)

Zeppelin一個(gè)Web項(xiàng)目只锭,主要使用Java開發(fā)著恩,Maven構(gòu)建。它的語言構(gòu)成如下:

Zeppelin語言構(gòu)成.png

Zeppelin的maven項(xiàng)目由多個(gè)module組成,分為框架核心module和其他解釋器module喉誊。其中核心的module有8個(gè)邀摆,分別為:

  • zeppelin-server
    項(xiàng)目入口,通過Jetty內(nèi)嵌服務(wù)器提供WebSocekt服務(wù)和RESTful服務(wù)伍茄,并且提供了基本的權(quán)限驗(yàn)證服務(wù)栋盹。使用java編寫。
  • zeppelin-zengine
    實(shí)現(xiàn)Notebook的持久化和檢索服務(wù)敷矫,使用java編寫
  • zeppelin-interpreter
    抽象了interpreter接口例获,規(guī)定了解釋器的功能。并且提供了與zeppelin-zengine使用Thrift進(jìn)行通信的協(xié)議沪饺。使用java編寫躏敢。
  • zeppelin-web
    使用AngluarJS框架開發(fā)的前端。
  • zeppelin-display
    實(shí)現(xiàn)前臺(tái)Angular元素綁定后臺(tái)數(shù)據(jù)整葡。
  • zeppelin-spark-dependencies
    此module中沒有代碼件余,具體作用是使用戶可以使用zeppelin內(nèi)嵌的Spark。不過由于Zeppelin支持了太多的解釋器遭居,package size過大啼器,已經(jīng)有人提議在未來的版本中移除此模塊,詳情見Zeppelin的JIRA:https://issues.apache.org/jira/browse/ZEPPELIN-1332
  • zeppelin-distribution
    此模塊主要是為了Zeppelin打包使用
  • helium-dev
    這是在Zeppelin-0.7以后新加入的模塊俱萍,使interpreter端壳、storage等模塊可以在運(yùn)行時(shí)(Zeppelin不需要重啟)加入到Zeppelin中。不過目前helium相關(guān)的很多功能還處于Experimental階段枪蘑,因此不太建議在生產(chǎn)環(huán)境中使用损谦。

解釋器相關(guān)的module眾多,根據(jù)module的名字可以很容易看出解釋器的用途岳颇,在此不再贅述照捡。

Zeppelin用到的技術(shù)

前端

Zeppelin的前端主要使用AngularJS框架開發(fā),使用Node.js進(jìn)行包的構(gòu)建话侧。使用Jupyter Notebook實(shí)現(xiàn)記事本功能栗精,并且使用了Highlight.js和Bootstrap。

后端

Zeppelin使用了Jetty作為內(nèi)嵌服務(wù)器瞻鹏,通信方式除了WebSocket悲立,還使用Jersey框架提供了Restful服務(wù)。
由于Zeppelin的解釋器(Interpreter)是獨(dú)立的JVM進(jìn)程新博,因此Zeppelin使用Apache Commons Exec框架來使主進(jìn)程可以啟動(dòng)解釋器進(jìn)程薪夕,并且使用Thrift框架在主進(jìn)程與解釋器進(jìn)程間進(jìn)行通信。
Zeppelin還提供了Apache Shiro進(jìn)行權(quán)限控制叭披,使用Apache Lucence對(duì)Note進(jìn)行全文檢索寥殖。

Zeppelin源碼

解釋器模塊

Interpreter模塊是Zeppelin項(xiàng)目的核心模塊玩讳,以下為主要的類:

  • Interpreter
    Interpreter是一個(gè)抽象類,規(guī)定了所有解釋器必須實(shí)現(xiàn)的功能嚼贡。所有解釋器都要繼承這個(gè)抽象類熏纯,通過不同的具體實(shí)現(xiàn),來完成不同語言的解釋執(zhí)行粤策。

  • RemoteInterpreterService
    此類由Thrift自動(dòng)生成樟澜,定義了主進(jìn)程與獨(dú)立JVM解釋器進(jìn)程間的通信協(xié)議。

  • InterpreterGroup
    一組Interpreter叮盘,用于啟動(dòng)啟動(dòng)和停止解釋器JVM的最小單元秩贰。

  • RemoteInterpreterProcess
    采用獨(dú)立JVM啟動(dòng)interpreter的具體執(zhí)行類

  • RemoteInterpreter
    遠(yuǎn)程interpreter的本地代理

  • InterpreterSetting
    維護(hù)interpreter相關(guān)元信息,維護(hù)note與interpreterGroup的關(guān)系

  • InterpreterOption
    決定Zeppelin創(chuàng)建interpreter進(jìn)程時(shí)的處理方式柔吼。

  • InterpreterFactory
    負(fù)責(zé)創(chuàng)建interpreter實(shí)例毒费,interpreter配置文件的加載與持久化,interpreterSetting的管理愈魏。

記事本模塊

  • Note
    由paragraph組成觅玻,權(quán)限控制、共享和持久化的最小單位培漏。

  • Paragraph
    代碼執(zhí)行的最小單位溪厘,負(fù)責(zé)獲取代碼文本,執(zhí)行過程控制及返回結(jié)果獲取牌柄。

  • Notebook
    Note的manager類畸悬,負(fù)責(zé)Note的CURD,復(fù)制珊佣、導(dǎo)入導(dǎo)出蹋宦;Note和相關(guān)Interpreter配
    置和運(yùn)行時(shí)映射關(guān)系的維護(hù)。

  • NotebookServer
    主要是將其他類封裝咒锻,提供WebSocket等通信服務(wù)妆档。

解釋器執(zhí)行調(diào)度器模塊

此處為“生產(chǎn)者——消費(fèi)者”模型,Note和RemoteInterpreterServer為生產(chǎn)者虫碉,Scheduler為消費(fèi)者,緩沖區(qū)為Scheduler內(nèi)部的Job隊(duì)列胸梆。產(chǎn)品為org.apache.zeppelin.scheduler.Job類敦捧。

  • SchedulerFactory
    負(fù)責(zé)創(chuàng)建所有Scheduler,單例模式碰镜。

  • Scheduler
    調(diào)度器接口兢卵,規(guī)定了所有調(diào)度器必須實(shí)現(xiàn)的方法。

  • FIFOScheduler
    先進(jìn)先出調(diào)度器绪颖,不支持并發(fā)執(zhí)行

  • ParallelScheduler
    并發(fā)調(diào)度器秽荤,支持并發(fā)執(zhí)行

  • RemoteScheduler
    遠(yuǎn)程interpreter的代理甜奄。

記事本存儲(chǔ)模塊

  • NotebookRepo
    持久化層頂層接口,規(guī)定了持久化層的基本操作窃款。
  • AzureNotebookRepo
    數(shù)據(jù)存入Azure云的實(shí)現(xiàn)课兄。
  • S3NotebookRepo
    數(shù)據(jù)存入Amazon S3文件系統(tǒng)的實(shí)現(xiàn)。
  • VFSNotebookRepo
    數(shù)據(jù)存入文件系統(tǒng)的實(shí)現(xiàn)
  • GitNotebookRepo
    使用Git對(duì)Note進(jìn)行版本管理的實(shí)現(xiàn)
  • NotebookRepoSync
    使note在本地系統(tǒng)與遠(yuǎn)程系統(tǒng)之間同步的實(shí)現(xiàn)類晨继。
  • ZeppelinHubRepo
    存入ZeppelinHub的實(shí)現(xiàn)類烟阐。

搜索服務(wù)

  • SearchService
    搜索服務(wù)接口,目前只有一個(gè)實(shí)現(xiàn)類LucenceSearch
  • LucenceSearch
    對(duì)Note進(jìn)行全文索引紊扬,方便提供搜索服務(wù)蜒茄。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市餐屎,隨后出現(xiàn)的幾起案子檀葛,更是在濱河造成了極大的恐慌,老刑警劉巖腹缩,帶你破解...
    沈念sama閱讀 206,378評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件屿聋,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡庆聘,警方通過查閱死者的電腦和手機(jī)胜臊,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,356評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來伙判,“玉大人象对,你說我怎么就攤上這事⊙绺В” “怎么了勒魔?”我有些...
    開封第一講書人閱讀 152,702評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)菇曲。 經(jīng)常有香客問我冠绢,道長(zhǎng),這世上最難降的妖魔是什么常潮? 我笑而不...
    開封第一講書人閱讀 55,259評(píng)論 1 279
  • 正文 為了忘掉前任弟胀,我火速辦了婚禮,結(jié)果婚禮上喊式,老公的妹妹穿的比我還像新娘孵户。我一直安慰自己,他們只是感情好岔留,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,263評(píng)論 5 371
  • 文/花漫 我一把揭開白布夏哭。 她就那樣靜靜地躺著,像睡著了一般献联。 火紅的嫁衣襯著肌膚如雪竖配。 梳的紋絲不亂的頭發(fā)上何址,一...
    開封第一講書人閱讀 49,036評(píng)論 1 285
  • 那天,我揣著相機(jī)與錄音进胯,去河邊找鬼用爪。 笑死盲再,一個(gè)胖子當(dāng)著我的面吹牛绸栅,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播丈秩,決...
    沈念sama閱讀 38,349評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼希停,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼烁巫!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起宠能,我...
    開封第一講書人閱讀 36,979評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤亚隙,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后违崇,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體阿弃,經(jīng)...
    沈念sama閱讀 43,469評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,938評(píng)論 2 323
  • 正文 我和宋清朗相戀三年羞延,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了渣淳。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,059評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡伴箩,死狀恐怖入愧,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情嗤谚,我是刑警寧澤棺蛛,帶...
    沈念sama閱讀 33,703評(píng)論 4 323
  • 正文 年R本政府宣布,位于F島的核電站巩步,受9級(jí)特大地震影響旁赊,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜椅野,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,257評(píng)論 3 307
  • 文/蒙蒙 一终畅、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧竟闪,春花似錦声离、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,262評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽本刽。三九已至鲸湃,卻和暖如春赠涮,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背暗挑。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評(píng)論 1 262
  • 我被黑心中介騙來泰國(guó)打工笋除, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人炸裆。 一個(gè)月前我還...
    沈念sama閱讀 45,501評(píng)論 2 354
  • 正文 我出身青樓垃它,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親烹看。 傳聞我的和親對(duì)象是個(gè)殘疾皇子国拇,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,792評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容