Zeppelin原理簡介



    Zeppelin是一個基於Web的notebook,提供交互數據分析和可視化。后台支持接入多種數據處理引擎,如spark,hive等。支持多種語言: Scala(Apache Spark)、Python(Apache Spark)、SparkSQL、 Hive、 Markdown、Shell等。本文主要介紹Zeppelin中Interpreter和SparkInterpreter的實現原理。

轉載請注明

http://www.cnblogs.com/shenh062326/p/6195064.html

安裝與使用
    參考http://blog.csdn.net/jasonding1354/article/details/46822391

原理簡介

Interpreter
    Zeppelin中最核心的概念是Interpreter,interpreter是一個插件允許用戶使用一個指定的語言或數據處理器。每一個Interpreter都屬於換一個InterpreterGroup,同一個InterpreterGroup的Interpreters可以相互引用,例如SparkSqlInterpreter 可以引用 SparkInterpreter 以獲取 SparkContext,因為他們屬於同一個InterpreterGroup。當前已經實現的Interpreter有spark解釋器,python解釋器,SparkSQL解釋器,JDBC,Markdown和shell等。下圖是Zeppelin官網中介紹Interpreter的原理圖。

 

    Interpreter接口中最重要的方法是open,close,interpert三個方法,另外還有cancel,gerProgress,completion等方法。

Open 是初始化部分,只會調用一次。
Close 是關閉釋放資源的接口,只會調用一次。
Interpret 會運行一段代碼並返回結果,同步執行方式。
Cancel可選的接口,用於結束interpret方法
getPregress 方法獲取interpret的百分比進度
completion 基於游標位置獲取結束列表,實現這個接口可以實現自動結束

 

SparkInterpreter


    Open方法中,會初始化SparkContext,SQLContext,ZeppelinContext;當前支持的模式有:

  • local[*] in local mode

  • spark://master:7077 in standalone cluster

  • yarn-client in Yarn client mode

  • mesos://host:5050 in Mesos cluster

    其中Yarn集群只支持client模式。

if (isYarnMode()) {
  conf.set("master", "yarn");
  conf.set("spark.submit.deployMode", "client");
}

    Interpret方法中會執行一行代碼(以\n分割),其實會調用spark 的SparkILoop一行一行的執行(類似於spark shell的實現),這里的一行是邏輯行,如果下一行代碼中以“.”開頭(非“..”,“./”),也會和本行一起執行。關鍵代碼如下:

scala.tools.nsc.interpreter.Results.Result res = null;
try {
  res = interpret(incomplete + s);
} catch (Exception e) {
  sc.clearJobGroup();
  out.setInterpreterOutput(null);
  logger.info("Interpreter exception", e);
  return new InterpreterResult(Code.ERROR, InterpreterUtils.getMostRelevantMessage(e));
}
r = getResultCode(res);

   sparkInterpret的關鍵方法:

    close 方法會停止SparkContext
    cancel 方法直接調用SparkContext的cancel方法。sc.cancelJobGroup(getJobGroup(context)
    getProgress 通過SparkContext獲取所有stage的總的task和已經結束的task,結束的tasks除以總的task得到的比例就是進度。

  問題1,是否可以存在多個SparkContext?

    Interpreter支持'shared', 'scoped', 'isolated'三種選項,在scopde模式下,spark interpreter為每個notebook創建編譯器但只有一個SparkContext;isolated模式下會為每個notebook創建一個單獨的SparkContext。
  問題2,isolated模式下,多個SparkContext是否在同一個進程中?
    一個服務端啟動多個spark Interpreter后,會啟動多個SparkContext。不過可以用另外一個jvm啟動spark Interpreter。

 

Zeppelin優缺點小結

優點
  1.提供restful和webSocket兩種接口。
  2.使用spark解釋器,用戶按照spark提供的接口編程即可,用戶可以自己操作SparkContext,不過用戶3.不能自己去stop SparkContext;SparkContext可以常駐。
  4.包含更多的解釋器,擴展性也很好,可以方便增加自己的解釋器。
  5.提供了多個數據可視化模塊,數據展示方便。

缺點
  1.沒有提供jar包的方式運行spark任務。
  2.只有同步的方式運行,客戶端可能需要等待較長時間。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM