Apache Spark是一種快速和通用的集羣計算系統。它提供Java,Scala,Python和R中的高級API,以及支持通常執行圖的優化引擎。Zeppelin支持Apache Spark,Spark解釋器組由5個解釋器組成。html
名稱 | 類 | 描述 |
---|---|---|
%spark | SparkInterpreter | 建立一個SparkContext並提供Scala環境 |
%spark.pyspark | PySparkInterpreter | 提供Python環境 |
%spark.r | SparkRInterpreter | 提供具備SparkR支持的R環境 |
%spark.sql | SparkSQLInterpreter | 提供SQL環境 |
%spark.dep | DepInterpreter | 依賴加載器 |
Spark解釋器能夠配置爲由Zeppelin提供的屬性。您還能夠設置表中未列出的其餘Spark屬性。有關其餘屬性的列表,請參閱Spark可用屬性。python
屬性 | 默認 | 描述 |
---|---|---|
ARGS | Spark命令行參考 | |
master | local[*] | Spark master uri. 例如:spark://masterhost:7077 |
spark.app.name | Zeppelin | Spark應用的名稱。 |
spark.cores.max | 要使用的核心總數。 空值使用全部可用的核心。 |
|
spark.executor.memory | 1g | 每一個worker實例的執行程序內存。 ex)512m,32g |
zeppelin.dep.additionalRemoteRepository | spark-packages, https://dl.bintray.com/spark-packages/maven, false; |
id,remote-repository-URL,is-snapshot; 每一個遠程存儲庫的列表。 |
zeppelin.dep.localrepo | local-repo | 依賴加載器的本地存儲庫 |
zeppelin.pyspark.python | python | Python命令來運行pyspark |
zeppelin.spark.concurrentSQL | python | 若是設置爲true,則同時執行多個SQL。 |
zeppelin.spark.maxResult | 1000 | 要顯示的Spark SQL結果的最大數量。 |
zeppelin.spark.printREPLOutput | true | 打印REPL輸出 |
zeppelin.spark.useHiveContext | true | 若是它是真的,使用HiveContext而不是SQLContext。 |
zeppelin.spark.importImplicit | true | 導入含義,UDF集合和sql若是設置爲true。 |
沒有任何配置,Spark解釋器在本地模式下開箱即用。可是,若是要鏈接到Spark羣集,則須要按照如下兩個簡單步驟進行操做。web
在conf/zeppelin-env.sh,導出SPARK_HOME環境變量與您的Spark安裝路徑。sql
例如,編程
export SPARK_HOME=/usr/lib/spark |
您能夠選擇設置更多的環境變量服務器
# set hadoop conf dir export HADOOP_CONF_DIR=/usr/lib/hadoop # set options to pass spark-submit command export SPARK_SUBMIT_OPTIONS="--packages com.databricks:spark-csv_2.10:1.2.0" # extra classpath. e.g. set classpath for hive-site.xml export ZEPPELIN_INTP_CLASSPATH_OVERRIDES=/etc/hive/conf |
對於Windows,確保你winutils.exe在%HADOOP_HOME%\bin。有關詳細信息,請參閱在Windows上運行Hadoop的問題。app
啓動Zeppelin後,轉到解釋器菜單並在Spark解釋器設置中編輯主屬性。該值可能因您的Spark羣集部署類型而異。maven
例如,oop
local[*] 本地模式spark://master:7077 standalone 集羣模式yarn-client Yarn 客戶端模式mesos://host:5050 Mesos 集羣模式優化
而已。Zeppelin將使用任何版本的Spark和任何部署類型,而不用這種方式重建Zeppelin。有關Spark&Zeppelin版本兼容性的更多信息,請參閱Zeppelin下載頁面中的「可用的口譯員」部分。
請注意,不導出SPARK_HOME,它以本地模式運行,包含版本的Spark。附帶的版本可能因構建配置文件而異。
SparkContext,SQLContext和ZeppelinContext會自動建立並顯示爲變量名sc,sqlContext並z分別在Scala,Python和R環境中公開。從0.6.1起,spark當您使用Spark 2.x時,SparkSession能夠做爲變量使用。
請注意,Scala / Python / R環境共享相同的SparkContext,SQLContext和ZeppelinContext實例。
在Spark解釋器中加載外部庫有兩種方法。首先是使用解釋器設置菜單,其次是加載Spark屬性。
有關詳細信息,請參閱解釋器依賴管理。
一旦SPARK_HOME被設置conf/zeppelin-env.sh,Zeppelin使用spark-submit做爲Spark解釋賽跑者。spark-submit支持兩種方式來加載配置。第一個是命令行選項,如--master和飛艇能夠經過這些選項spark-submit經過導出SPARK_SUBMIT_OPTIONS在conf/zeppelin-env.sh。二是從中讀取配置選項SPARK_HOME/conf/spark-defaults.conf。用戶能夠設置分發庫的Spark屬性有:
火花defaults.conf | SPARK_SUBMIT_OPTIONS | 描述 |
---|---|---|
spark.jars | --jars | 包含在驅動程序和執行器類路徑上的本地jar的逗號分隔列表。 |
spark.jars.packages | --packages | 逗號分隔列表,用於包含在驅動程序和執行器類路徑上的jar的maven座標。 將搜索當地的maven repo,而後搜索maven中心和由–repositories提供的任何其餘遠程存儲庫。 座標的格式應該是groupId:artifactId:version。 |
spark.files | --files | 要放置在每一個執行器的工做目錄中的逗號分隔的文件列表。 |
如下是幾個例子:
SPARK_SUBMIT_OPTIONS 在 conf/zeppelin-env.sh
export SPARK_SUBMIT_OPTIONS="--packages com.databricks:spark-csv_2.10:1.2.0 --jars /path/mylib1.jar,/path/mylib2.jar --files /path/mylib1.py,/path/mylib2.zip,/path/mylib3.egg" |
SPARK_HOME/conf/spark-defaults.conf
spark.jars /path/mylib1.jar,/path/mylib2.jar spark.jars.packages com.databricks:spark-csv_2.10:1.2.0 spark.files /path/mylib1.py,/path/mylib2.egg,/path/mylib3.zip |
注:%spark.dep解釋負載庫%spark和%spark.pyspark而不是 %spark.sql翻譯。因此咱們建議你改用第一個選項。
當你的代碼須要外部庫,而不是下載/複製/從新啓動Zeppelin,你可使用%spark.dep解釋器輕鬆地完成如下工做。
從maven庫遞歸加載庫從本地文件系統加載庫添加額外的maven倉庫自動將庫添加到SparkCluster(能夠關閉)
解釋器利用Scala環境。因此你能夠在這裏編寫任何Scala代碼。須要注意的是%spark.dep解釋前應使用%spark,%spark.pyspark,%spark.sql。
這是用法
%spark.dep z.reset() // clean up previously added artifact and repository // add maven repository z.addRepo("RepoName").url("RepoURL") // add maven snapshot repository z.addRepo("RepoName").url("RepoURL").snapshot() // add credentials for private maven repository z.addRepo("RepoName").url("RepoURL").username("username").password("password") // add artifact from filesystem z.load("/path/to.jar") // add artifact from maven repository, with no dependency z.load("groupId:artifactId:version").excludeAll() // add artifact recursively z.load("groupId:artifactId:version") // add artifact recursively except comma separated GroupID:ArtifactId list z.load("groupId:artifactId:version").exclude("groupId:artifactId,groupId:artifactId, ...") // exclude with pattern z.load("groupId:artifactId:version").exclude(*) z.load("groupId:artifactId:version").exclude("groupId:artifactId:*") z.load("groupId:artifactId:version").exclude("groupId:*") // local() skips adding artifact to spark clusters (skipping sc.addJar()) z.load("groupId:artifactId:version").local() |
Zeppelin 在Scala / Python環境中自動注入ZeppelinContext變量z。ZeppelinContext提供了一些額外的功能和實用程序。
ZeppelinContext擴展地圖,它在Scala和Python環境之間共享。因此你能夠把Scala的一些對象從Python中讀出來,反之亦然。
Scala
// Put object from scala %spark val myObject = ... z.put("objName", myObject) // Exchanging data frames myScalaDataFrame = ... z.put("myScalaDataFrame", myScalaDataFrame) val myPythonDataFrame = z.get("myPythonDataFrame").asInstanceOf[DataFrame] |
Python 展開原碼
ZeppelinContext提供了建立表單的功能。在Scala和Python環境中,您能夠以編程方式建立表單。
Scala
%spark /* Create text input form */ z.input("formName") /* Create text input form with default value */ z.input("formName", "defaultValue") /* Create select form */ z.select("formName", Seq(("option1", "option1DisplayName"), ("option2", "option2DisplayName"))) /* Create select form with default value*/ z.select("formName", "option1", Seq(("option1", "option1DisplayName"), ("option2", "option2DisplayName"))) |
%spark.pyspark # Create text input form z.input("formName") # Create text input form with default value z.input("formName", "defaultValue") # Create select form z.select("formName", [("option1", "option1DisplayName"), ("option2", "option2DisplayName")]) # Create select form with default value z.select("formName", [("option1", "option1DisplayName"), ("option2", "option2DisplayName")], "option1") |
1 |
|
%spark.sql select * from ${table=defaultTableName} where text like '%${search}%' |
要了解有關動態表單的更多信息,請檢查Zeppelin 動態表單。
這兩個python和pyspark解釋器都內置了對內聯可視化的支持matplotlib,這是一個流行的python繪圖庫。更多細節能夠在python解釋器文檔中找到,由於matplotlib的支持是相同的。經過利用齊柏林內置的角度顯示系統,能夠經過pyspark進行更先進的交互式繪圖,以下所示:
您能夠選擇其中之一shared,scoped以及isolated配置Spark解釋器的選項。Spark解釋器爲每一個筆記本建立分離的Scala編譯器,但在scoped模式(實驗)中共享一個SparkContext。它在每一個筆記本isolated模式下建立分離的SparkContext 。
使用Zeppelin,Kerberos Key Distribution Center(KDC)和Spark on YARN進行邏輯設置:
在安裝Zeppelin的服務器上,安裝Kerberos客戶端模塊和配置,krb5.conf。這是爲了使服務器與KDC進行通訊。
設置SPARK_HOME在[ZEPPELIN_HOME]/conf/zeppelin-env.sh使用火花提交(此外,您可能須要設置export HADOOP_CONF_DIR=/etc/hadoop/conf)
將如下兩個屬性添加到Spark configuration([SPARK_HOME]/conf/spark-defaults.conf)中:
spark.yarn.principal spark.yarn.keytab |
注意:若是您沒有訪問以上spark-defaults.conf文件的權限,能夠選擇地,您能夠經過Zeppelin UI中的「解釋器」選項卡將上述行添加到「Spark Interpreter」設置。