讓Spark如虎添翼的Zeppelin - 基礎篇

zulo2012 8年前發布 | 57K 次閱讀 Spark Zeppelin 分布式/云計算/大數據

0. 簡介

Spark 是一個非常好的計算平臺,支持多種語言,同時基于內存的計算速度也非常快。整個開源社區也很活躍。

但是Spark在易用性上面還是有一些美中不足。 對于剛接觸的人來說,上手以及環境搭建還是有一些困難。 另外,如果希望將結果繪制成圖表分享給別人,還需要很長一段路程。

目前已經有一些解決方案:

  • 【TBD】Jupyter Notebook
    • 使用很廣泛,但是看起來主要還是以前ipython-notebook的增強版。
    • 目前筆者對其了解不多
  • Spark 母公司DataBricks提供的DataBricks Community Edition, 里面自帶Spark集群 + Notebook。
    • 易用性、功能性都很不錯。缺點是集群架設在AWS之上,無法跟自己本地的Spark 集群連在一起
  • Apache Zeppelin
    • 這是一個剛剛從Incubation轉正的項目
    • 但是已經在各大公司均有采用,比如美團、微軟等等
    • 本文主要就是介紹如何在本地搭建一個Zeppelin 使得Spark更易用,同時可以很方便的將自己的工作成功展示給客戶

借用別人的一個效果圖鎮樓^_^

注意:

  1. Zeppelin自帶Spark實例,您無需自己構建一個Spark 集群就可以學習Zeppelin
  2. Zeppelin 當前(2016年8月19日) 最新版本0.6.1, 只兼容2.0+
    1. 如果您本地有Spark 集群并且版本是1.6.1 + Scala 2.10 , 請下載Zeppelin 0.6.0的版本
    2. 如果官網的速度比較慢,可以參考下面的方式到百度盤下載
    3. 鏈接: http://pan.baidu.com/s/1ctBBJo 密碼: e68g

1、 下載

如果您需要的是0.6.0的版本,可以參考上面百度盤的下載鏈接。

如果您需要的是0.6.1+的版本,可以直接到官網下載, 里面的Mirror下載速度一般還不錯

2、 安裝

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

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

  1. 解壓之后,首先需要從模板創建一個新的zeppelin-env.sh, 并設置SPARK_HOME. 比如:
    exportSPARK_HOME=/usr/lib/spark
    
    如果是基于Hadoop 或者 Mesos 搭建的Spark  集群,還需要進行另外的設置。
  2. 從模板創建一個新的zeppelin-site.xml,并將之前的8080端口改到比如8089,避免與Tomcat等端口沖突

    <property>

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

    <value> 8089 </value>

    <description>Server port.</description>

    </property>

  3. 替換jackson相關類庫
    1. 默認自帶的是2.5.*, 但是實際使用的時候指定的是2.4.4
    2. 并且可能2.4.4 與 2.5.* 并不完全兼容。
    3. 因此需要使用2.4.4 替換2.5.* , 有下面3個jar需要替換:
      1. jackson-annotations-2.4.4.jar
      2. jackson-core-2.4.4.jar
      3. jackson-databind-2.4.4.jar
    4. 這真的是非常坑人的一個地方。。。

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

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

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

3. 配置Spark解釋器

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

4. 幾點使用經驗

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

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

當Zeppelin 提交任務之后,可以看到Spark Master UI 上面,當前任務即使執行完成了,也不會自動退掉

這是因為,Zeppelin 默認就像人手工運行了spark-shell spark://master-ip:7077 一樣, 除非手動關閉shell命令,否則會一直占用著資源

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

手動的重啟辦法:

  1. 打開Interpreter界面,搜索到Spark部分并點擊重啟
  2. 推薦: 調用Restful API 進行重啟。
    1. 可以通過Chrome的Network 監控看一下點擊restart之后具體調用的API的情況。如下圖:
    2. 這個ID(2BUDQXH2R)在各自的環境可能各不相同。另外這個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 上面將當前job kill 之后,在Zeppelin這邊重啟執行任務就會遇到這個異常信息。

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

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

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

不能自己調用sc.stop() 之后重啟創建一個SparkContext

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

(4) 關于python module

Python Interpreter可以使用當前Zeppelin所在機器的python 所有的model

同時支持python 2 與 python 3

這是一個很有用的功能,比如我使用spark將數據計算完成之后,生成了一個并不太大的csv文件。這個時候完全可以使用Pandas強大的處理能力來進行二次處理,并最終使用Zeppelin的自動繪圖能力生成報表

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

(5) 可以設置自動運行時間

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

X. 使用Zeppelin Hub 實現協作共贏

官方網址: http://help.zeppelinhub.com/

這一部分將在下一篇文章之中介紹。敬請期待

 

來自:http://www.flyml.net/2016/08/19/reinforce-spark-with-zeppelin-basic/

 

 本文由用戶 zulo2012 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!