Apache Zeppelin 中 Spark解釋器 轉

概述

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

在sql環境中,可以在簡單的模板中創建表單。

%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”設置。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章