Zeppelin原理簡介


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

轉載請註明python

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

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

原理簡介編程

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

 

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

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

 

SparkInterpreteroop


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

  • local[*] in local mode.net

  • 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.只有同步的方式運行,客戶端可能須要等待較長時間。

相關文章
相關標籤/搜索