a亚洲精品_精品国产91乱码一区二区三区_亚洲精品在线免费观看视频_欧美日韩亚洲国产综合_久久久久久久久久久成人_在线区

首頁 > 學(xué)院 > 操作系統(tǒng) > 正文

zeppelin安裝部署配置

2024-06-28 16:00:55
字體:
供稿:網(wǎng)友

首先,我們來了解一下這款工具的背景及用途。Zeppelin 目前已托管于 Apache 基金會,但并未列為頂級項(xiàng)目,可以在其公布的 官網(wǎng)訪問。它提供了一個(gè)非常友好的 WebUI 界面,操作相關(guān)指令。它可以用于做數(shù)據(jù)分析和可視化。其后面可以接入不同的數(shù)據(jù)處理引擎。包括 Flink,Spark,Hive 等。支持原生的 Scala,Shell,Markdown 等。

對于 Zeppelin 而言,并不依賴 Hadoop 集群環(huán)境,我們可以部署到單獨(dú)的節(jié)點(diǎn)上進(jìn)行使用。首先我們使用以下地址獲取安裝包:

http://zeppelin.apache.org/download.html

這里,有2種選擇,

其一,可以下載原文件,自行編譯安裝。

其二,直接下載二進(jìn)制文件進(jìn)行安裝。這里,為了方便,筆者直接使用二進(jìn)制文件進(jìn)行安裝使用。

這里有些參數(shù)需要進(jìn)行配置,為了保證系統(tǒng)正常啟動,

確保的 zeppelin.server.port 屬性的端口不被占用,默認(rèn)是8080,其他屬性大家可按需配置即可。

在完成上述步驟后,啟動對應(yīng)的進(jìn)程。定位到 Zeppelin 安裝目錄的bin文件夾下,使用以下命令啟動進(jìn)程:

./zeppelin-daemon.sh start

  若需要停止,可以使用以下命令停止進(jìn)程:

./zeppelin-daemon.sh stop

  另外,通過閱讀 zeppelin-daemon.sh 腳本的內(nèi)容,可以發(fā)現(xiàn),我們還可以使用相關(guān)重啟,查看狀態(tài)等命令。內(nèi)容如下:

復(fù)制代碼

case "${1}" in  start)    start    ;;  stop)    stop    ;;  reload)    stop    start    ;;  restart)    stop    start    ;;  status)    find_zeppelin_PRocess    ;;  *)    echo ${USAGE}

復(fù)制代碼

在啟動相關(guān)進(jìn)程后,可以使用以下地址在瀏覽器中訪問:

http://<Your_<ip/Host>:Port>

  啟動之后的界面如下所示:

  該界面羅列出插件綁定項(xiàng)。如圖中的 spark,md,sh 等。那我如何使用這些來完成一些工作。在使用一些數(shù)據(jù)引擎時(shí),如 Flink,Spark,Hive 等,是需要配置對應(yīng)的連接信息的。在 Interpreter 欄處進(jìn)行配置。這里給大家列舉一些配置示例:

3.1 Flink

  可以找到 Flink 的配置項(xiàng),如下圖所示:

 

  然后指定對應(yīng)的 IP 和地址即可。

3.2 Hive

  這里 Hive 配置需要指向其 Thrift 服務(wù)地址,如下圖所示:

  另外,其他的插件,如 Spark,Kylin,phoenix等配置類似,配置完成后,記得點(diǎn)擊 “restart” 按鈕。

3.3 Use md and sh

  下面,我們可以創(chuàng)建一個(gè) Notebook 來使用,我們拿最簡單的 Shell 和 Markdown 來演示,如下圖所示:

3.4 SQL

  當(dāng)然,我們的目的并不是僅僅使用 Shell 和 Markdown,我們需要能夠使用 SQL 來獲取我們想要的結(jié)果。

3.4.1 Spark SQL

  下面,我們使用 Spark SQL 去獲取想要的結(jié)果。如下圖所示:

  這里,可以將結(jié)果以不同的形式來可視化,量化,趨勢,一目了然。

3.4.2 Hive SQL

  另外,可以使用動態(tài)格式來查詢分區(qū)數(shù)據(jù),以"${partition_col=20160101,20160102|20160103|20160104|20160105|20160106}"的格式進(jìn)行表示。如下圖所示:

3.5 Video Guide

  另外,官方也給出了一個(gè)快速指導(dǎo)的入門視頻,觀看地址:[入口]

4.總結(jié)

  在使用的過程當(dāng)中,有些地方需要注意,必須在編寫 Hive SQL 時(shí),%hql 需要替換為 %hive.sql 的格式;另外,在運(yùn)行 Scala 代碼時(shí),如果出現(xiàn)以下異常,如下圖所示:

  解決方案,在 zeppelin-env.sh 文件中添加以下內(nèi)容:

export ZEPPELIN_MEM=-Xmx4g

  該 BUG 在 0.5.6 版本得到修復(fù),參考碼:[ZEPPELIN-305]

編譯和啟動完Zeppelin相關(guān)的進(jìn)程之后,我們就可以來使用Zeppelin了。我們進(jìn)入到頁面,我們可以在頁面上直接操作Zeppelin,依次選擇Notebook->Create new note,然后會彈出一個(gè)對話框,我們在Note Name里面隨便輸入一個(gè)名字,這里我輸入blog,然后點(diǎn)擊Create Note就可以創(chuàng)建一個(gè)新的Notebook了。我們可以在新建的Notebook里面輸入相關(guān)的代碼進(jìn)行測試:

[python] view plain copy 在CODE上查看代碼片

sc.version  

sqlc  

  

res26: String = 1.5.2  

res27: org.apache.spark.sql.SQLContext = org.apache.spark.sql.SQLContext@48806d6c  

和Spark%20Shell一樣,Zeppelin會初始化好SparkContext和SQLContext對象,分別命名為sc和sqlc,我們可以直接在里面使用到它。接下來我們來在Zeppelin里面加載HDFS上面的數(shù)據(jù),如下:

[python] view%20plain copy 

sc.textFile("hdfs://ip/tmp/json").count  

  

res29: Long = 200  

Took 0 seconds (outdated)  

我們再來使用sqlc對象讀取上面的json文件來創(chuàng)建一個(gè)DataFrame

[python] view plain copy 在CODE上查看代碼片

val profilesJsonRdd =sqlc.jsonFile("hdfs://www.iteblog.com/tmp/json")  

val profileDF=profilesJsonRdd.toDF()  

val iteblog = profileDF.selectExpr("_id", "address", "age", "email")  

iteblog.show()  

profileDF.registerTempTable("profiles")  

  

profilesJsonRdd: org.apache.spark.sql.DataFrame = [_id: string, about: string, address: string, age: bigint, company: string, email: string, eyeColor: string, favoriteFruit: string, gender: string, name: string, phone: string, registered: string, tags: array<string>]  

profileDF: org.apache.spark.sql.DataFrame = [_id: string, about: string, address: string, age: bigint, company: string, email: string, eyeColor: string, favoriteFruit: string, gender: string, name: string, phone: string, registered: string, tags: array<string>]  

root  

 |-- _id: string (nullable = true)  

 |-- about: string (nullable = true)  

 |-- address: string (nullable = true)  

 |-- age: long (nullable = true)  

 |-- company: string (nullable = true)  

 |-- email: string (nullable = true)  

 |-- eyeColor: string (nullable = true)  

 |-- favoriteFruit: string (nullable = true)  

 |-- gender: string (nullable = true)  

 |-- name: string (nullable = true)  

 |-- phone: string (nullable = true)  

 |-- registered: string (nullable = true)  

 |-- tags: array (nullable = true)  

 |    |-- element: string (containsNull = true)  

  

iteblog: org.apache.spark.sql.DataFrame = [_id: string, address: string, age: bigint, email: string]  

+--------------------+--------------------+---+--------------------+  

|                 _id|             address|age|               email|  

+--------------------+--------------------+---+--------------------+  

|55578ccb0cc5b350d...|694 Oriental Cour...| 30|tracynguyen@endip...|  

|55578ccb6975c4e2a...|267 Amber Street,...| 23|leannagarrett@war...|  

|55578ccb33399a615...|243 Bridgewater S...| 24|blairwhite@imperi...|  

|55578ccb0f1d5ab09...|647 Loring Avenue...| 24|andrearay@beadzza...|  

|55578ccb591a45d4e...|721 Bijou Avenue,...| 27|penningtongilbert...|  

|55578ccb9f0cd20c4...|694 Llama Court, ...| 21|shelleyburns@pyra...|  

|55578ccb8d0accc28...|498 Perry Terrace...| 40|nicolefigueroa@ed...|  

|55578ccbd682cca21...|243 Stillwell Ave...| 32|galealvarado@sing...|  

|55578ccb0d9025ddd...|649 Beard Street,...| 36|melindaparker@fur...|  

|55578ccb5be70de0d...|972 Marconi Place...| 36|byerscarson@digia...|  

|55578ccbc5a1050a5...|483 Hanson Place,...| 31|kristiemckinney@a...|  

|55578ccb07fa02369...|540 Woodpoint Roa...| 40|salazarburks@micr...|  

|55578ccb809e55bf0...|442 Ainslie Stree...| 32|hopkinspatterson@...|  

|55578ccb204ff8ee6...|444 Argyle Road, ...| 23|maysrosario@imkan...|  

|55578ccb4b062fc61...|571 Sunnyside Ave...| 38|atkinshancock@hel...|  

|55578ccba5ff361a9...|385 Meeker Avenue...| 40|edwinarobertson@s...|  

|55578ccb386940ac3...|936 Cheever Place...| 37|elsienoel@fleetmi...|  

|55578ccbfc41ff7fe...|406 Lake Place, M...| 36|mirandamarsh@even...|  

|55578ccbfa6b6c300...|364 Metropolitan ...| 31|sharronmcconnell@...|  

|55578ccbdd6650d81...|113 Applegate Cou...| 29|mcdowellwelch@eur...|  

+--------------------+--------------------+---+--------------------+  

only showing top 20 rows  

  

Took 1 seconds  

需要注意的是,因?yàn)閆eppelin會自動地初始化好SparkContext和SQLContext,所以我們不能再顯示地創(chuàng)建SparkContext和SQLContext。如果你顯示地創(chuàng)建了SQLContext,而且使用它來注冊一張臨時(shí)表,當(dāng)你下一次使用這個(gè)臨時(shí)表的時(shí)候?qū)霈F(xiàn)以下的異常信息:

[python] view%20plain copy 

no such table List ([blog])  

下面我們來使用上面注冊的臨時(shí)表,Zeppelin自帶了SQL%20Interpreter,所以我們可以直接在上面編寫SQL語句:

[python] view%20plain copy 

%sql select eyeColor, count(eyeColor) as count from profiles where  

gender='male' group by eyeColor  

運(yùn)行上面的SQL我們就可以得到圖形化顯示的結(jié)果,而且我們可以根據(jù)自己的需要選擇餅型、條型、表格,線型等方式展現(xiàn)我們需要的結(jié)果!上面的SQL已經(jīng)我們已經(jīng)將查詢的gender寫死成male了,其實(shí)我們可以將這個(gè)值設(shè)置成參數(shù)的形式,然后我們可以在頁面上輸入相關(guān)的查詢參數(shù):

[python] view plain copy 在CODE上查看代碼片

%sql select eyeColor, count(eyeColor) as count from profiles where  

gender='male' group by eyeColor  

然后我們運(yùn)行這個(gè)sql,我們可以看到下圖的運(yùn)行結(jié)果:

可以看出這里出現(xiàn)了一個(gè)文本框gender,我們可以輸入需要查詢的條件比如:male,然后再運(yùn)行就可以得到上面sql一樣的結(jié)果。大家可能看到了,文本框里面是沒有輸入限制的,我們可以隨便輸入數(shù)據(jù),而且你也不清楚到底有幾種值可以輸入。值得高興的是,我們可以將這個(gè)值設(shè)置成只固定可選的:

[python] view plain copy 在CODE上查看代碼片

%sql select eyeColor, count(eyeColor) as count from profiles where gender  

="${gender=male,male|female}" group by eyeColor  

這里限制了gender的值只能選擇male和female,而且默認(rèn)male是選中的,如下:

有時(shí)候我們需要在SQL中使用自定義的函數(shù),我們可以直接在Zeppelin中定義函數(shù),然后在SQL使用它,如下:

[python] view plain copy 在CODE上查看代碼片

def ageGroup(age: Long) = {  

    val buckets = Array("0-10", "11-20", "20-30", "31-40",  

     "41-50", "51-60", "61-70", "71-80", "81-90", "91-100", ">100")  

    buckets(math.min((age.toInt - 1) / 10, buckets.length - 1))  

}  

  

ageGroup: (age: Long)String  

為了能夠在Spark%20SQL中使用這個(gè)函數(shù),我們必須先注冊這個(gè)函數(shù):

[python] view%20plain copy 

sqlc.udf.register("ageGroup", (age:Long)=>ageGroup(age.toInt))  

  

res44: org.apache.spark.sql.UserDefinedFunction = UserDefinedFunction(<function1>,StringType,List())  

然后我們就可以在Spark%20SQL中使用這個(gè)自定義函數(shù):

[python] view%20plain copy 

%sql select ageGroup(age) as iteblogAgeGroup,  

count(1) as total  

from profiles  

where gender='${gender=male,male|female}' group by ageGroup(age)  

order by iteblogAgeGroup  

運(yùn)行的結(jié)果如下:

2、 安裝

版本: Zeppelin 0.6.0 + 自建Spark集群(1.6.1)

感覺Zeppelin還是不太成熟,并開箱就用,還需要不少人工調(diào)整才能正常工作

解壓之后,首先需要從模板創(chuàng)建一個(gè)新的zeppelin-env.sh, 并設(shè)置SPARK_HOME. 比如:

exportSPARK_HOME=/usr/lib/spark
export  SPARK_MASTER_IP=127.0.0.1export  SPARK_LOCAL_IP=127.0.0.1export ZEPPELIN_MEM="-Xms1024m -Xmx16384m -XX:MaxPermSize=16384m"

如果是基于Hadoop 或者 Mesos 搭建的Spark  集群,還需要進(jìn)行另外的設(shè)置。

從模板創(chuàng)建一個(gè)新的zeppelin-site.xml,并將之前的8080端口改到比如8089,避免與Tomcat等端口沖突

<property>

<name>zeppelin.server.port</name>

<value> 8089 </value>

<description>Server port.</description>

</property>

替換jackson相關(guān)類庫

jackson-annotations-2.4.4.jar

jackson-core-2.4.4.jar

jackson-databind-2.4.4.jar

默認(rèn)自帶的是2.5.*, 但是實(shí)際使用的時(shí)候指定的是2.4.4

并且可能2.4.4 與 2.5.* 并不完全兼容。

因此需要使用2.4.4 替換2.5.* , 有下面3個(gè)jar需要替換:

這真的是非常坑人的一個(gè)地方。。。

做完上訴幾步之后,就可以啟動啦:

啟動/停止命令: bin/zeppelin-daemon.sh stop/start

啟動之后,打開http://localhost:8089 就可以看到Zeppelin的主界面啦

3. 配置Spark解釋器

Spark Interpreter的配置非常簡單,可以直接參考下圖的配置方式:

4. 幾點(diǎn)使用經(jīng)驗(yàn)

Zeppline自帶比較詳細(xì)的Tutorial, 各位看自帶的notebook tutorial 可能效果更好。 但是我在第一次使用的時(shí)候,遇到了不少坑,在此記錄下來,給大家做個(gè)參考:

(1) 任務(wù)提交之后不會自動停止

當(dāng)Zeppelin 提交任務(wù)之后,可以看到Spark Master UI 上面,當(dāng)前任務(wù)即使執(zhí)行完成了,也不會自動退掉

這是因?yàn)椋琙eppelin 默認(rèn)就像人手工運(yùn)行了spark-shell spark://master-ip:7077 一樣, 除非手動關(guān)閉shell命令,否則會一直占用著資源

解決辦法就是將spark 解釋器(interpreter) 重啟

手動的重啟辦法:

打開Interpreter界面,搜索到Spark部分并點(diǎn)擊重啟

推薦: 調(diào)用Restful API 進(jìn)行重啟。

可以通過Chrome的Network 監(jiān)控看一下點(diǎn)擊restart之后具體調(diào)用的API的情況。如下圖:

這個(gè)ID(2BUDQXH2R)在各自的環(huán)境可能各不相同。另外這個(gè)API是PUT的方式,可以直接使用下面的python代碼在UI上自動重啟

%python  importrequests r = requests.put("http://IP:8089/api/interpreter/setting/restart/2BUDQXH2R") print r.text

(2) 異常提示:Cannot call methods on a stopped SparkContext

比如我們在Spark Master UI 上面將當(dāng)前job kill 之后,在Zeppelin這邊重啟執(zhí)行任務(wù)就會遇到這個(gè)異常信息。

解決辦法很簡單: 重啟解析器

(3) 不要主動調(diào)用 sc.stop()

這是官方明確說明的:scala 的spark-shell 自動初始化了SparkContext / SqlContext 等等

不能自己調(diào)用sc.stop() 之后重啟創(chuàng)建一個(gè)SparkContext

可能筆者水平原因,嘗試自己創(chuàng)建新的sc 之后,各種奇奇怪怪的問題

(4) 關(guān)于python module

Python Interpreter可以使用當(dāng)前Zeppelin所在機(jī)器的python 所有的model

同時(shí)支持python 2 與 python 3

這是一個(gè)很有用的功能,比如我使用spark將數(shù)據(jù)計(jì)算完成之后,生成了一個(gè)并不太大的csv文件。這個(gè)時(shí)候完全可以使用Pandas強(qiáng)大的處理能力來進(jìn)行二次處理,并最終使用Zeppelin的自動繪圖能力生成報(bào)表

與Tableau之類的BI工具相比功能差了一些,不過各有所長。Zeppelin 對程序員來說可以算是非常方便的一個(gè)工具了。 對日常的一些簡單報(bào)表的工作量大大減小了

(5) 可以設(shè)置自動運(yùn)行時(shí)間

在整個(gè)Note的最上端,可以設(shè)置當(dāng)前notebook 定期執(zhí)行。 而且注意: 還可以設(shè)置執(zhí)行完成之后自動重啟interpreter 參考下圖:

X. 使用Zeppelin Hub 實(shí)現(xiàn)協(xié)作共贏

官方網(wǎng)址: http://help.zeppelinhub.com/


發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 精品免费久久 | 青青草视频免费 | 成人在线视频观看 | 一 级做人爱全视频在线看 一级黄色裸体片 | 欧美乱操 | 国产在线精品一区二区 | 中文字幕日本一区 | 精一区二区 | 欧美日韩在线观看中文字幕 | 秋霞在线一区 | 91亚洲国产成人久久精品网站 | 91在线免费看 | 成人精品一区二区三区 | 美女吊逼 | 精品国产一区二区三区国产馆杂枝 | 色综合五月婷婷 | 不卡成人 | 深夜av在线| 羞羞视频在线免费 | 日韩精品小视频 | 精品毛片| 久久污 | 国产成人免费视频网站高清观看视频 | 午夜视频一区 | 日韩精品一区二区三区在线观看 | 视频一区在线观看 | 久久国精品 | 欧美在线观看免费观看视频 | 97视频免费| 蜜桃免费一区二区三区 | 国产成人精品亚洲日本在线桃色 | 一级片在线观看 | 少妇久久久 | 欧美国产精品一区 | 自拍偷拍亚洲欧洲 | 亚洲精品在线网址 | 91久久国产综合久久 | 丰满少妇理论片 | 久99久在线观看 | 一区二区在线免费观看 | 黄色在线 |