讓Spark如虎添翼的Zeppelin – 基礎(chǔ)篇
0. 簡介
Spark 是一個非常好的計算平臺,支持多種語言,同時基于內(nèi)存的計算速度也非常快。整個開源社區(qū)也很活躍。
但是Spark在易用性上面還是有一些美中不足。 對于剛接觸的人來說,上手以及環(huán)境搭建還是有一些困難。 另外,如果希望將結(jié)果繪制成圖表分享給別人,還需要很長一段路程。
目前已經(jīng)有一些解決方案:
- 【TBD】Jupyter Notebook
- 使用很廣泛,但是看起來主要還是以前ipython-notebook的增強(qiáng)版。
- 目前筆者對其了解不多
- Spark 母公司DataBricks提供的DataBricks Community Edition, 里面自帶Spark集群 + Notebook。
- 易用性、功能性都很不錯。缺點(diǎn)是集群架設(shè)在AWS之上,無法跟自己本地的Spark 集群連在一起
- Apache Zeppelin
- 這是一個剛剛從Incubation轉(zhuǎn)正的項目
- 但是已經(jīng)在各大公司均有采用,比如美團(tuán)、微軟等等
- 本文主要就是介紹如何在本地搭建一個Zeppelin 使得Spark更易用,同時可以很方便的將自己的工作成功展示給客戶
借用別人的一個效果圖鎮(zhèn)樓^_^
注意:
- Zeppelin自帶Spark實例,您無需自己構(gòu)建一個Spark 集群就可以學(xué)習(xí)Zeppelin
- Zeppelin 當(dāng)前(2016年8月19日)最新版本0.6.1, 只兼容2.0+
1)如果您本地有Spark 集群并且版本是1.6.1 + Scala 2.10 , 請下載Zeppelin 0.6.0的版本
2)如果官網(wǎng)的速度比較慢,可以參考下面的方式到百度盤下載
鏈接: http://pan.baidu.com/s/1ctBBJo 密碼: e68g
1、 下載
如果您需要的是0.6.0的版本,可以參考上面百度盤的下載鏈接。
如果您需要的是0.6.1+的版本,可以直接到官網(wǎng)下載, 里面的Mirror下載速度一般還不錯
2、 安裝
版本: Zeppelin 0.6.0 + 自建Spark集群(1.6.1)
感覺Zeppelin還是不太成熟,并開箱就用,還需要不少人工調(diào)整才能正常工作
1)解壓之后,首先需要從模板創(chuàng)建一個新的zeppelin-env.sh, 并設(shè)置SPARK_HOME. 比如:
- 1export SPARK_HOME=/usr/lib/spark
如果是基于Hadoop 或者 Mesos 搭建的Spark 集群,還需要進(jìn)行另外的設(shè)置。
2)從模板創(chuàng)建一個新的zeppelin-site.xml,并將之前的8080端口改到比如8089,避免與Tomcat等端口沖突
- <property>
- <name>zeppelin.server.port</name>
- <value>8089</value>
- <description>Server port.</description>
- </property>
3)替換jackson相關(guān)類庫
a)默認(rèn)自帶的是2.5.*, 但是實際使用的時候指定的是2.4.4
b)并且可能2.4.4 與 2.5.* 并不完全兼容。
c)因此需要使用2.4.4 替換2.5.* , 有下面3個jar需要替換:
- jackson-annotations-2.4.4.jar
- jackson-core-2.4.4.jar
- jackson-databind-2.4.4.jar
d)這真的是非常坑人的一個地方。。。
做完上訴幾步之后,就可以啟動啦:
啟動/停止命令:
- bin/zeppelin-daemon.sh stop/start
啟動之后,打開http://localhost:8089 就可以看到Zeppelin的主界面啦
3. 配置Spark解釋器
Spark Interpreter的配置非常簡單,可以直接參考下圖的配置方式:
4. 幾點(diǎn)使用經(jīng)驗
Zeppline自帶比較詳細(xì)的Tutorial, 各位看自帶的notebook tutorial 可能效果更好。 但是我在第一次使用的時候,遇到了不少坑,在此記錄下來,給大家做個參考:
(1) 任務(wù)提交之后不會自動停止
當(dāng)Zeppelin 提交任務(wù)之后,可以看到Spark Master UI 上面,當(dāng)前任務(wù)即使執(zhí)行完成了,也不會自動退掉
這是因為,Zeppelin 默認(rèn)就像人手工運(yùn)行了spark-shell spark://master-ip:7077 一樣, 除非手動關(guān)閉shell命令,否則會一直占用著資源
解決辦法就是將spark 解釋器(interpreter) 重啟
手動的重啟辦法:
1.打開Interpreter界面,搜索到Spark部分并點(diǎn)擊重啟
2.推薦: 調(diào)用Restful API 進(jìn)行重啟。
a.可以通過Chrome的Network 監(jiān)控看一下點(diǎn)擊restart之后具體調(diào)用的API的情況。如下圖:
b.這個ID(2BUDQXH2R)在各自的環(huán)境可能各不相同。另外這個API是PUT的方式,可以直接使用下面的python代碼在UI上自動重啟
- %python
- import requests
- 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ù)就會遇到這個異常信息。
解決辦法很簡單: 重啟解析器
(3) 不要主動調(diào)用 sc.stop()
這是官方明確說明的:scala 的spark-shell 自動初始化了SparkContext / SqlContext 等等
不能自己調(diào)用sc.stop() 之后重啟創(chuàng)建一個SparkContext
可能筆者水平原因,嘗試自己創(chuàng)建新的sc 之后,各種奇奇怪怪的問題
(4) 關(guān)于python module
Python Interpreter可以使用當(dāng)前Zeppelin所在機(jī)器的python 所有的model
同時支持python 2 與 python 3
這是一個很有用的功能,比如我使用spark將數(shù)據(jù)計算完成之后,生成了一個并不太大的csv文件。這個時候完全可以使用Pandas強(qiáng)大的處理能力來進(jìn)行二次處理,并最終使用Zeppelin的自動繪圖能力生成報表
與Tableau之類的BI工具相比功能差了一些,不過各有所長。Zeppelin 對程序員來說可以算是非常方便的一個工具了。 對日常的一些簡單報表的工作量大大減小了
(5) 可以設(shè)置自動運(yùn)行時間
在整個Note的最上端,可以設(shè)置當(dāng)前notebook 定期執(zhí)行。 而且注意: 還可以設(shè)置執(zhí)行完成之后自動重啟interpreter 參考下圖: