概述
Apache Spark是一種快速和通用的集羣計算系統。它提供Java,Scala,Python和R中的高級API,以及支持一般執行圖的優化引擎。Zeppelin支持Apache Spark,Spark解釋器組由5個解釋器組成。
名稱 | 類 | 描述 |
---|---|---|
%spark | SparkInterpreter | 創建一個SparkContext並提供Scala環境 |
%spark.pyspark | PySparkInterpreter | 提供Python環境 |
%spark.r | SparkRInterpreter | 提供具有SparkR支持的R環境 |
%spark.sql | SparkSQLInterpreter | 提供SQL環境 |
%spark.dep | DepInterpreter | 依賴加載器 |
配置
Spark解釋器可以配置爲由Zeppelin提供的屬性。您還可以設置表中未列出的其他Spark屬性。有關其他屬性的列表,請參閱Spark可用屬性。
屬性 | 默認 | 描述 |
---|---|---|
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羣集,則需要按照以下兩個簡單步驟進行操作。
1.導出SPARK_HOME
在conf/zeppelin-env.sh,導出SPARK_HOME環境變量與您的Spark安裝路徑。
例如,
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的問題。
2.在“解釋器”菜單中設置主機
啓動Zeppelin後,轉到解釋器菜單並在Spark解釋器設置中編輯主屬性。該值可能因您的Spark羣集部署類型而異。
例如,
local[*] 本地模式spark://master:7077 standalone 集羣模式yarn-client Yarn 客戶端模式mesos://host:5050 Mesos 集羣模式
而已。Zeppelin將使用任何版本的Spark和任何部署類型,而不用這種方式重建Zeppelin。有關Spark&Zeppelin版本兼容性的更多信息,請參閱Zeppelin下載頁面中的“可用的口譯員”部分。
請注意,不導出SPARK_HOME,它以本地模式運行,包含版本的Spark。附帶的版本可能因構建配置文件而異。
SparkContext,SQLContext,SparkSession,ZeppelinContext
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屬性。
1.通過解釋器設置設置依賴關係
有關詳細信息,請參閱解釋器依賴管理。
2.加載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 |
3.通過%spark.dep解釋器加載動態依賴關係
注:%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() |
ZeppelinContext
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 動態表單。
Matplotlib集成(pyspark)
這兩個python和pyspark解釋器都內置了對內聯可視化的支持matplotlib,這是一個流行的python繪圖庫。更多細節可以在python解釋器文檔中找到,因爲matplotlib的支持是相同的。通過利用齊柏林內置的角度顯示系統,可以通過pyspark進行更先進的交互式繪圖,如下所示:
解釋器設置選項
您可以選擇其中之一shared,scoped以及isolated配置Spark解釋器的選項。Spark解釋器爲每個筆記本創建分離的Scala編譯器,但在scoped模式(實驗)中共享一個SparkContext。它在每個筆記本isolated模式下創建分離的SparkContext 。
用Kerberos設置Zeppelin
使用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”設置。