zeppelin on CDH及配置spark查詢hive表

1.下載zeppelinhtml

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

我下載的是796MB的那個已經編譯好的,若是須要本身按照環境編譯也能夠,可是要很長時間編譯,這個版本包含了不少插件,我雖然是CDH環境可是這個也可使用。java

2.修改配置文件node

cd  /zeppelin-0.7.3-bin-all/confpython

cp  zeppelin-env.sh.template zeppelin-env.shmysql

cp zeppelin-site.xml.template zeppelin-site.xmllinux

vim zeppelin-env.shgit

添加配置以下:個人是spark2用不了spark1.6版本這個版本的zeppelingithub

export HIVE_HOME=/opt/cloudera/parcels/CDH-5.9.0-1.cdh5.9.0.p0.23/lib/hive
export JAVA_HOME=/usr/java/jdk1.8.0_121
export MASTER=yarn-client
export ZEPPELIN_JAVA_OPTS="-Dmaster=yarn-client -Dspark.yarn.jar=/home/zeppelin-0.7.3-bin-all/interpreter/spark/zeppelin-spark_2.11-0.7.3.jar"
export DEFAULT_HADOOP_HOME=/opt/cloudera/parcels/CDH-5.9.0-1.cdh5.9.0.p0.23/lib/hadoop
export SPARK_HOME=/data/parcels/cloudera/parcels/SPARK2/lib/spark2
#export SPARK_HOME=/opt/cloudera/parcels/CDH-5.9.0-1.cdh5.9.0.p0.23/lib/spark
export HADOOP_HOME=${HADOOP_HOME:-$DEFAULT_HADOOP_HOME}
if [ -n "$HADOOP_HOME" ]; then
  export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:${HADOOP_HOME}/lib/native
fi
export HADOOP_CONF_DIR=${HADOOP_CONF_DIR:-/etc/hadoop/conf}web


export ZEPPELIN_LOG_DIR=/var/log/zeppelin
export ZEPPELIN_PID_DIR=/var/run/zeppelin
export ZEPPELIN_WAR_TEMPDIR=/var/tmp/zeppelin

3.配置這些其實已經足夠了。

在啓動

./zeppelin-daemon.sh start

4.在界面上配置就可使用了hive的配置這個

添加依賴:

這些就能夠查詢hive了

5.用spark讀取hive表這個比直接查詢hive錶快十倍

我把hive的配置文件hive-site.xml拷貝到hadoop_home/conf

添加須要的依賴

%dep
 z.load("org.apache.hive:hive-jdbc:0.14.0")
z.load("org.apache.hadoop:hadoop-common:2.6.0")
z.load("/home/gl/hive-hcatalog-core-1.1.0-cdh5.9.0.jar")

%spark
import java.util.Properties
import org.apache.spark.sql.SparkSession
import org.apache.spark.SparkConf


val sparkConf = new SparkConf().setAppName("hive")
val spark = SparkSession.builder().config(sparkConf).enableHiveSupport().getOrCreate()


val connectionProperties = new Properties()
connectionProperties.put("user", "")
connectionProperties.put("password", "")
connectionProperties.put("driver", "org.apache.hive.jdbc.HiveDriver")
val jdbcDF2 = spark.read
  .jdbc("jdbc:hive2://*******:****/test", "bbb", connectionProperties)//.createTempView("bbb")
  
   spark.sql("select count(*) from pc_db.pc_txt group by responseset").show()

6.

.修改登錄zeeplin驗證方式
禁止匿名訪問

Zeppelin啓動默認是匿名(anonymous)模式登陸的.若是設置訪問登陸權限,須要設置conf/zeppelin-site.xml文件下的zeppelin.anonymous.allowed選項爲false(默認爲true).若是你尚未這個文件,只需將conf/zeppelin-site.xml.template複製爲conf/zeppelin-site.xml

<property>
<name>zeppelin.anonymous.allowed</name>
<value>false</value>
<description>Anonymous user allowed by default</description>
</property>
a)開啓Shiro

在剛安裝完畢以後,默認狀況下,在conf中,將找到shiro.ini.template,該文件是一個配置示例,建議你經過執行以下命令行建立shiro.ini文件:

cp conf/shiro.ini.template conf/shiro.ini
[users]
#admin = password1, admin
#user1 = password2, role1, role2
#user2 = password3, role3
#user3 = password4, role2

hadoop = hadoop, admin # 用戶名、密碼都是hadoop,角色爲admin
bin/zeppelin-daemon.sh restart

2.How to do

  首先,咱們來了解一下這款工具的背景及用途。Zeppelin 目前已託管於 Apache 基金會,但並未列爲頂級項目,能夠在其公佈的 官網訪問。它提供了一個很是友好的 WebUI 界面,操做相關指令。它能夠用於作數據分析和可視化。其後面能夠接入不一樣的數據處理引擎。包括 Flink,Spark,Hive 等。支持原生的 Scala,Shell,Markdown 等。

2.1 Install

  對於 Zeppelin 而言,並不依賴 Hadoop 集羣環境,咱們能夠部署到單獨的節點上進行使用。首先咱們使用如下地址獲取安裝包:

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

  這裏,有2種選擇,其一,能夠下載原文件,自行編譯安裝。其二,直接下載二進制文件進行安裝。這裏,爲了方便,筆者直接使用二進制文件進行安裝使用。這裏有些參數須要進行配置,爲了保證系統正常啓動,確保的 zeppelin.server.port 屬性的端口不被佔用,默認是8080,其餘屬性你們可按需配置便可。[配置連接

2.2 Start/Stop

  在完成上述步驟後,啓動對應的進程。定位到 Zeppelin 安裝目錄的bin文件夾下,使用如下命令啓動進程:

./zeppelin-daemon.sh start

  若須要中止,可使用如下命令中止進程:

./zeppelin-daemon.sh stop

  另外,經過閱讀 zeppelin-daemon.sh 腳本的內容,能夠發現,咱們還可使用相關重啓,查看狀態等命令。內容以下:

複製代碼

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

複製代碼

3.How to use

  在啓動相關進程後,可使用如下地址在瀏覽器中訪問:

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

  啓動以後的界面以下所示:

  該界面羅列出插件綁定項。如圖中的 spark,md,sh 等。那我如何使用這些來完成一些工做。在使用一些數據引擎時,如 Flink,Spark,Hive 等,是須要配置對應的鏈接信息的。在 Interpreter 欄處進行配置。這裏給你們列舉一些配置示例:

3.1 Flink

  能夠找到 Flink 的配置項,以下圖所示:

 

  而後指定對應的 IP 和地址便可。

3.2 Hive

  這裏 Hive 配置須要指向其 Thrift 服務地址,以下圖所示:

  另外,其餘的插件,如 Spark,Kylin,phoenix等配置相似,配置完成後,記得點擊 「restart」 按鈕。

3.3 Use md and sh

  下面,咱們能夠建立一個 Notebook 來使用,咱們拿最簡單的 Shell 和 Markdown 來演示,以下圖所示:

3.4 SQL

  固然,咱們的目的並非僅僅使用 Shell 和 Markdown,咱們須要可以使用 SQL 來獲取咱們想要的結果。

3.4.1 Spark SQL

  下面,咱們使用 Spark SQL 去獲取想要的結果。以下圖所示:

  這裏,能夠將結果以不一樣的形式來可視化,量化,趨勢,一目瞭然。

3.4.2 Hive SQL

  另外,可使用動態格式來查詢分區數據,以"${partition_col=20160101,20160102|20160103|20160104|20160105|20160106}"的格式進行表示。以下圖所示:

3.5 Video Guide

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

4.總結

  在使用的過程中,有些地方須要注意,必須在編寫 Hive SQL 時,%hql 須要替換爲 %hive.sql 的格式;另外,在運行 Scala 代碼時,若是出現如下異常,以下圖所示:

  解決方案,在 zeppelin-env.sh 文件中添加如下內容:

export ZEPPELIN_MEM=-Xmx4g

  該 BUG 在 0.5.6 版本獲得修復,參考碼:[ZEPPELIN-305]

5、Hue、Zeppelin比較
        上一節簡單介紹了Hue這種Hadoop生態圈的數據可視化組件,本節討論另外一種相似的產品——Zeppelin。首先介紹一下Zeppelin,而後說明其安裝的詳細步驟,以後演示如何在Zeppelin中添加MySQL翻譯器,最後從功能、架構、使用場景幾方面將Hue和Zeppelin作一個比較。
1. Zeppelin簡介
        Zeppelin是一個基於Web的軟件,用於交互式地數據分析。一開始是Apache軟件基金會的孵化項目,2016年5月正式成爲一個頂級項目(Top-Level Project,TLP)。Zeppelin描述本身是一個能夠進行數據攝取、數據發現、數據分析、數據可視化的筆記本,用以幫助開發者、數據科學家以及相關用戶更有效地處理數據,而沒必要使用複雜的命令行,也沒必要關心集羣的實現細節。Zeppelin的架構圖以下所示。

        從圖中能夠看到,Zeppelin具備客戶端/服務器架構,客戶端通常就是指瀏覽器。服務器接收客戶端的請求,並將請求經過Thrift協議發送給翻譯器組。翻譯器組物理表現爲JVM進程,負責實際處理客戶端的請求並與服務器進行通訊。
        翻譯器是一個插件式的體系結構,容許任何語言/後端數據處理程序以插件的形式添加到Zeppelin中。特別須要指出的是,Zeppelin內建Spark翻譯器,所以不須要構建單獨的模塊、插件或庫。Spark翻譯器的架構圖以下所示。


        當前的Zeppelin已經支持不少翻譯器,如Zeppelin 0.6.0版本自帶的翻譯器有alluxio、cassandra、file、hbase、ignite、kylin、md、phoenix、sh、tajo、angular、elasticsearch、flink、hive、jdbc、lens、psql、spark等18種之多。插件式架構容許用戶在Zeppelin中使用本身熟悉的特定程序語言或數據處理方式。例如,經過使用%spark翻譯器,能夠在Zeppelin中使用Scala語言代碼。
        在數據可視化方面,Zeppelin已經包含一些基本的圖表,如柱狀圖、餅圖、線形圖、散點圖等,任何後端語言的輸出均可以被圖形化表示。
        用戶創建的每個查詢叫作一個note,note的URL在多用戶間共享,Zeppelin將向全部用戶實時廣播note的變化。Zeppelin還提供一個只顯示查詢結果的URL,該頁不包括任何菜單和按鈕。用這種方式能夠方便地將結果頁做爲一幀嵌入到本身的web站點中。

2. Zeppelin安裝配置
        下面用一個典型的使用場景——使用Zeppelin運行SparkSQL訪問Hive表,在一個實驗環境上說明Zeppelin的安裝配置步驟。
(1)安裝環境
        12個節點的Spark集羣,以standalone方式部署,各個節點運行的進程以下表所示。
主機名

運行進程

nbidc-agent-03

NameNode、Spark Master

nbidc-agent-04

SecondaryNameNode

nbidc-agent-11

ResourceManager、DataNode、NodeManager、Spark Worker

nbidc-agent-12

DataNode、NodeManager、Spark Worker

nbidc-agent-13

DataNode、NodeManager、Spark Worker

nbidc-agent-14

DataNode、NodeManager、Spark Worker

nbidc-agent-15

DataNode、NodeManager、Spark Worker

nbidc-agent-18

DataNode、NodeManager、Spark Worker

nbidc-agent-19

DataNode、NodeManager、Spark Worker

nbidc-agent-20

DataNode、NodeManager、Spark Worker

nbidc-agent-21

DataNode、NodeManager、Spark Worker

nbidc-agent-22

DataNode、NodeManager、Spark Worker


        操做系統:CentOS release 6.4
        Hadoop版本:2.7.0
        Hive版本:2.0.0
        Spark版本:1.6.0

(2)在nbidc-agent-04上安裝部署Zeppelin及其相關組件
        前提:nbidc-agent-04須要可以鏈接互聯網。
安裝Git:在nbidc-agent-04上執行下面的指令。
yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel  
yum install gcc perl-ExtUtils-MakeMaker  
yum remove git  
cd /home/work/tools/  
wget https://github.com/git/git/archive/v2.8.1.tar.gz  
tar -zxvf git-2.8.1.tar.gz  
cd git-2.8.1.tar.gz  
make prefix=/home/work/tools/git all  
make prefix=/home/work/tools/git install
安裝Java:在nbidc-agent-03機器上執行下面的指令拷貝Java安裝目錄到nbidc-agent-04機器上。
scp -r jdk1.7.0_75 nbidc-agent-04:/home/work/tools/
安裝Apache Maven:在agent-04上執行下面的指令。
cd /home/work/tools/  
wget ftp://mirror.reverse.net/pub/apache/maven/maven-3/3.3.9/binaries/apache-maven-3.3.9-bin.tar.gz  
tar -zxvf apache-maven-3.3.9-bin.tar.gz
 安裝Hadoop客戶端:在nbidc-agent-03機器上執行下面的指令拷貝Hadoop安裝目錄到nbidc-agent-04機器上。
scp -r hadoop nbidc-agent-04:/home/work/tools/
安裝Spark客戶端:在nbidc-agent-03機器上執行下面的指令拷貝Spark安裝目錄到nbidc-agent-04機器上。
scp -r spark nbidc-agent-04:/home/work/tools/
安裝Hive客戶端:在nbidc-agent-03機器上執行下面的指令拷貝Hive安裝目錄到nbidc-agent-04機器上。
scp -r hive nbidc-agent-04:/home/work/tools/
安裝phantomjs:在nbidc-agent-04上執行下面的指令。
cd /home/work/tools/  
tar -jxvf phantomjs-2.1.1-linux-x86_64.tar.bz2
下載最新的zeppelin源碼:在nbidc-agent-04上執行下面的指令。
cd /home/work/tools/  
git clone https://github.com/apache/incubator-zeppelin.git
設置環境變量:在nbidc-agent-04上編輯/home/work/.bashrc文件,內容以下。
vi /home/work/.bashrc
# 添加下面的內容  
export PATH=.:$PATH:/home/work/tools/jdk1.7.0_75/bin:/home/work/tools/hadoop/bin:/home/work/tools/spark/bin:/home/work/tools/hive/bin:/home/work/tools/phantomjs-2.1.1-linux-x86_64/bin:/home/work/tools/incubator-zeppelin/bin;  
export JAVA_HOME=/home/work/tools/jdk1.7.0_75  
export HADOOP_HOME=/home/work/tools/hadoop  
export SPARK_HOME=/home/work/tools/spark  
export HIVE_HOME=/home/work/tools/hive  
export ZEPPELIN_HOME=/home/work/tools/incubator-zeppelin  
# 保存文件,並是設置生效  
source /home/work/.bashrc
編譯zeppelin源碼:在nbidc-agent-04上執行下面的指令。
cd /home/work/tools/incubator-zeppelin  
mvn clean package -Pspark-1.6 -Dspark.version=1.6.0 -Dhadoop.version=2.7.0 -Phadoop-2.6 -Pyarn -DskipTests
(3)配置zeppelin
配置zeppelin-env.sh文件:在nbidc-agent-04上執行下面的指令。
cp /home/work/tools/incubator-zeppelin/conf/zeppelin-env.sh.template  /home/work/tools/incubator-zeppelin/conf/zeppelin-env.sh 
vi /home/work/tools/incubator-zeppelin/conf/zeppelin-env.sh
# 添加下面的內容  
export JAVA_HOME=/home/work/tools/jdk1.7.0_75  
export HADOOP_CONF_DIR=/home/work/tools/hadoop/etc/hadoop  
export MASTER=spark://nbidc-agent-03:7077
配置zeppelin-site.xml文件:在nbidc-agent-04上執行下面的指令。
cp /home/work/tools/incubator-zeppelin/conf/zeppelin-site.xml.template  /home/work/tools/incubator-zeppelin/conf/zeppelin-site.xml
vi /home/work/tools/incubator-zeppelin/conf/zeppelin-site.xml
# 修改下面這段的value值,設置zeppelin的端口爲9090  
<property>  
  <name>zeppelin.server.port</name>  
  <value>9090</value>  
  <description>Server port.</description>  
</property>
將hive-site.xml拷貝到zeppelin的配置目錄下:在nbidc-agent-04上執行下面的指令。
cd /home/work/tools/incubator-zeppelin  
cp /home/work/tools/hive/conf/hive-site.xml .
(4)啓動zeppelin
        在nbidc-agent-04上執行下面的指令。
zeppelin-daemon.sh start
(5)測試
        從瀏覽器輸入http://nbidc-agent-04:9090/,以下圖所示。


        點擊‘Interpreter’菜單,配置並保存spark解釋器,以下圖所示。


        配置並保存hive解釋器,以下圖所示。


        點擊‘NoteBook’->‘Create new note’子菜單項,創建一個新的查詢並執行,結果以下圖所示。


        說明:這是一個動態表單SQL,SparkSQL語句爲:
%sql  
select * from wxy.t1 where rate > ${r} 
        第一行指定解釋器爲SparkSQL,第二行用${r}指定一個運行時參數,執行時頁面上會出現一個文本編輯框,輸入參數後回車,查詢會按照指定參數進行,如圖會查詢rate > 100的記錄。

3. 在Zeppelin中添加MySQL翻譯器
        數據可視化的需求很廣泛,若是經常使用的如MySQL這樣的關係數據庫也能使用Zeppelin查詢,並將結果圖形化顯示,那麼就能夠用一套統一的數據可視化方案處理大多數經常使用查詢。Zeppelin自己還不帶MySQL翻譯器,幸運的是已經有MySQL翻譯器插件了。下面說明該插件的安裝步驟及簡單測試。
(1)編譯MySQL Interpreter源代碼
cd /home/work/tools/
git clone https://github.com/jiekechoo/zeppelin-interpreter-mysql
mvn clean package
(2)部署二進制包
mkdir /home/work/tools/incubator-zeppelin/interpreter/mysql
cp /home/work/tools/zeppelin-interpreter-mysql/target/zeppelin-mysql-0.5.0-incubating.jar /home/work/tools/incubator-zeppelin/interpreter/mysql/
# copy dependencies to mysql directory
cp commons-exec-1.1.jar mysql-connector-java-5.1.6.jar slf4j-log4j12-1.7.10.jar log4j-1.2.17.jar slf4j-api-1.7.10.jar /home/work/tools/incubator-zeppelin/interpreter/mysql/
vi /home/work/tools/incubator-zeppelin/conf/zeppelin-site.xml
        在zeppelin.interpreters 的value裏增長一些內容「,org.apache.zeppelin.mysql.MysqlInterpreter」,以下圖所示。


(3)重啓Zeppelin
zeppelin-daemon.sh restart
(4)加載MySQL Interpreter
打開主頁http://nbidc-agent-04:9090/,‘Interpreter’ -> ‘Create’,完成相似下圖的頁面,完成點擊‘Save’ 

(5)測試
建立名爲mysql_test的note,以下圖所示。

輸入下面的查詢語句,按建立日期統計創建表的個數。
%mysql
select date_format(create_time,'%Y-%m-%d') d, count(*) c 
  from information_schema.tables 
 group by date_format(create_time,'%Y-%m-%d') 

5. Hue與Zeppelin比較
(1)功能
Zeppelin和Hue都能提供必定的數據可視化的功能,都提供了多種圖形化數據表示形式。單從這點來講,我的認爲功能相似,大同小異,Hue能夠經過經緯度進行地圖定位,這個功能我在Zeppelin 0.6.0上沒有找到。
Zeppelin支持的後端數據查詢程序較多,0.6.0版本缺省有18種,原生支持Spark。而Hue的3.9.0版本缺省只支持Hive、Impala、Pig和數據庫查詢。
Zeppelin只提供了單一的數據處理功能,包括前面提到的數據攝取、數據發現、數據分析、數據可視化等都屬於數據處理的範疇。而Hue的功能相對豐富的多,除了相似的數據處理,還有元數據管理、Oozie工做流管理、做業管理、用戶管理、Sqoop集成等不少管理功能。從這點看,Zeppelin只是一個數據處理工具,而Hue更像是一個綜合管理工具。
(2)架構
Zeppelin採用插件式的翻譯器,經過插件開發,能夠添加任何後端語言和數據處理程序。相對來講更獨立和開放。
Hue與Hadoop生態圈的其它組件密切相關,通常都與CDH一同部署。
(3)使用場景
Zeppelin適合單一數據處理、但後端處理語言繁多的場景,尤爲適合Spark。
Hue適合與Hadoop集羣的多個組件交互、如Oozie工做流、Sqoop等聯合處理數據的場景,尤爲適合與Impala協同工做。
--------------------- 

前提:服務器已經安裝好了hadoop_client端即hadoop的環境hbase,hive等相關組件

1.環境和變量配置
①拷貝hive的配置文件hive-site.xml到zeppelin-0.7.2-bin-all/conf下

# cp /root/hadoop-2.6.0/conf/hive-site.xml /data/hadoop/zeppelin/zeppelin-0.7.2-bin-all/conf
 

②進入conf下進行環境變量的配置

# cd /data/hadoop/zeppelin/zeppelin-0.7.2-bin-all/conf
vim zeppelin-env.sh

export JAVA_HOME=/usr/java/jdk1.8.0_111
export HADOOP_CONF_DIR=/root/hadoop-2.6.0/conf
2.在web界面配置集成hive
訪問zeppelin的web界面(http://ip:8080)

右上角anonymous --> interpreter --> +Create新建一個叫作hive的集成環境(也能夠在jdbc的基礎上修改,不用新建)


編輯hive的相關屬性,hive相關的配置能夠到hive-site.xml中查看

Properties        value
common.max_count    1000
hive.driver    org.apache.hive.jdbc.HiveDriver
hive.password    hive
hive.url    jdbc:hive2://uhadoop-bwgkeu-master2:10000 # 注意是hive2不是hive
hive.user    hive
zeppelin.interpreter.localRepo    /data/hadoop/zeppelin/zeppelin-0.7.2-bin-all/local-repo/2CNPYUV7Z
zeppelin.interpreter.output.limit    102400
zeppelin.jdbc.auth.type    
zeppelin.jdbc.concurrent.max_connection    10
zeppelin.jdbc.concurrent.use    true
zeppelin.jdbc.keytab.location    
zeppelin.jdbc.principal    
 

填寫Dependencies相關屬性
2個hive依賴包,一個mysql依賴包,不用mysql能夠不用寫mysql jdbc包
填好後點保存,這個時候zeppelin會出現卡頓,這是由於上面填的2個Dependencies,zeppelin去指定maven庫下載相關依賴包去了,等待時間可能需幾分鐘。

下載完成可在local-repo目錄下查看,依賴包放在local-repo/2CNPYUV7Z/(可能不一樣)目錄下,等徹底下載完成,就可查詢。

Dependencies

artifact    exclude
org.apache.hive:hive-jdbc:0.14.0    
org.apache.hadoop:hadoop-common:2.6.0    
mysql:mysql-connector-java:5.1.38
--------------------- 

概述
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, 
http://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") 

在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」設置。

而已。玩Zeppelin!

 
--------------------- 

本文基於centos6.四、CDH版本5.7.六、spark版本爲1.6.0

1.環境準備
git1.7.一、maven3.3.九、JDK1.8
1
2.下載最新版zeepline源碼
wget http://mirror.bit.edu.cn/apache/zeppelin/zeppelin-0.7.3/zeppelin-0.7.3.tgz
tar -zxvf zeppelin-0.7.3.tgz 
cd zeeplin-0.7.3
1
2
3
3.編譯
mvn -X clean package -Pspark-1.6 -Dhadoop.version=2.6.0-cdh5.7.6 -Phadoop-2.6  -Pyarn -Ppyspark -Psparkr  -Pvendor-repo -DskipTests -Pbuild-distr

[INFO] Zeppelin ........................................... SUCCESS [  8.360 s]
[INFO] Zeppelin: Interpreter .............................. SUCCESS [  5.909 s]
[INFO] Zeppelin: Zengine .................................. SUCCESS [ 22.396 s]
[INFO] Zeppelin: Display system apis ...................... SUCCESS [ 10.373 s]
[INFO] Zeppelin: Spark dependencies ....................... SUCCESS [ 32.613 s]
[INFO] Zeppelin: Spark .................................... SUCCESS [ 18.004 s]
[INFO] Zeppelin: Markdown interpreter ..................... SUCCESS [  0.734 s]
[INFO] Zeppelin: Angular interpreter ...................... SUCCESS [  0.259 s]
[INFO] Zeppelin: Shell interpreter ........................ SUCCESS [  0.374 s]
[INFO] Zeppelin: Livy interpreter ......................... SUCCESS [02:06 min]
[INFO] Zeppelin: HBase interpreter ........................ SUCCESS [  2.358 s]
[INFO] Zeppelin: Apache Pig Interpreter ................... SUCCESS [  2.589 s]
[INFO] Zeppelin: PostgreSQL interpreter ................... SUCCESS [  0.371 s]
[INFO] Zeppelin: JDBC interpreter ......................... SUCCESS [  0.682 s]
[INFO] Zeppelin: File System Interpreters ................. SUCCESS [  0.650 s]
[INFO] Zeppelin: Flink .................................... SUCCESS [  4.925 s]
[INFO] Zeppelin: Apache Ignite interpreter ................ SUCCESS [ 21.882 s]
[INFO] Zeppelin: Kylin interpreter ........................ SUCCESS [  0.298 s]
[INFO] Zeppelin: Python interpreter ....................... SUCCESS [01:29 min]
[INFO] Zeppelin: Lens interpreter ......................... SUCCESS [  1.920 s]
[INFO] Zeppelin: Apache Cassandra interpreter ............. SUCCESS [ 35.499 s]
[INFO] Zeppelin: Elasticsearch interpreter ................ SUCCESS [  5.039 s]
[INFO] Zeppelin: BigQuery interpreter ..................... SUCCESS [  2.585 s]
[INFO] Zeppelin: Alluxio interpreter ...................... SUCCESS [  1.680 s]
[INFO] Zeppelin: Scio ..................................... SUCCESS [ 29.029 s]
[INFO] Zeppelin: web Application .......................... SUCCESS [07:18 min]
[INFO] Zeppelin: Server ................................... SUCCESS [ 46.044 s]
[INFO] Zeppelin: Packaging distribution ................... SUCCESS [ 52.455 s]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 16:00 min
[INFO] Finished at: 2018-03-25T12:10:07+08:00
[INFO] Final Memory: 332M/5705M
[INFO] ------------------------------------------------------------------------
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
具體參數請參考:http://zeppelin.apache.org/docs/0.7.3/install/build.html

4.部署Zeppelin
tar -zxvf ~/zeppelin-0.7.3/zeppelin-distribution/target/zeppelin-0.7.3.tar.gz -C /opt/bigdata/
ln -s /opt/bigdata/zeppelin-0.7.3 /opt/bigdata/zeppelin
bin/zeppelin-daemon.sh start
1
2
3
訪問地址:http://localhost:8080,也可修改zeppelin-site.xml默認端口

5.配置訪問hive倉庫
經過jdbc方式訪問hive,首先確保啓動hiveserver2. 
1.拷貝hive相關驅動到zeppelin

cp ~/hive/lib/hive-exec-1.1.0-cdh5.7.6.jar   /opt/zepplin/interpreter/jdbc/
cp ~/hive/lib/hive-jdbc-1.1.0-cdh5.7.6.jar   /opt/zepplin/interpreter/jdbc/
cp ~/hive/lib/hive-metastore-1.1.0-cdh5.7.6.jar   /opt/zepplin/interpreter/jdbc/
cp ~/hive/lib/hive-serde-1.1.0-cdh5.7.6.jar   /opt/zepplin/interpreter/jdbc/
cp ~/hive/lib/hive-service-1.1.0-cdh5.7.6.jar  /opt/zepplin/interpreter/jdbc/
cp ~/hadoop/lib/hadoop-common-2.6.0-cdh5.7.6.jar /opt/zepplin/interpreter/jdbc/
1
2
3
4
5
6
2.重啓zepplin

bin/zeppelin-daemon.sh restart
1
3.修改頁面Interpreters jdbc配置 

點擊restart按鈕 
4.查詢驗證 


6.配置集成spark on yarn
zepplin目前支持,local、yarn-client、standalone和mesos等模式,默認爲local模式 
1.修改zeppelin-env.sh

cp zeppelin-env.sh.template zeppelin-env.sh
export MASTER=yarn-client
export HADOOP_CONF_DIR=[your_hadoop_conf_path]
export SPARK_HOME=[your_spark_home_path]
export SPARK_SUBMIT_OPTIONS="--conf spark.dynamicAllocation.minExecutors=10 --executor-memory 2G --driver-memory 2g  --executor-cores 2"
1
2
3
4
5
*重啓zepplin,打開UI.設置spark參數,restart 

驗證spark,出錯 

發現是zepplin/lib下面的有hadoop的commonjar包裏面沒有這個方法,自己已經配置CDH環境了,因此刪除全部hadoopjar(很奇怪,以前編譯的是CDH版本的) 


查看hdfs文件,報錯 

jackson版本衝突致使,zepplin中的版本爲2.5.3,spark1.6使用的爲2.4,更換zepplin/lib下jackson-databind的版本重啓便可。

wget http://central.maven.org/maven2/com/fasterxml/jackson/core/jackson-databind/2.4.4/jackson-databind-2.4.4.jar 
1
7.用戶權限配置
zeppelin主要利用Apache Shiro作用戶權限管理。 
1.關閉匿名訪問,拷貝zeppelin-site.xml,設置zeppelin.anonymous.allowed=false

conf/zeppelin-site.xml.template to conf/zeppelin-site.xml
1
2.啓用shiro,拷貝shiro文件

cp conf/shiro.ini.template conf/shiro.ini
1
shiro提供了基於users/roles/urls的權限控制,也有提供基於目錄服務作用戶權限,本問主要介紹基於用戶角色權限的方式。 

[users] 
admin = admin, admin 
zhangsan=123456,readonly 
[roles] 
readonly= * 
admin = * 
[urls] 
/api/interpreter/** = authc, roles[admin] 
/api/configurations/** = authc, roles[admin] 
/api/credential/** = authc, roles[admin] 
/** = authc 

3.設置zeppelin已當前登陸用戶訪問hive,不設置的話是已啓動zeppelin進程的用戶訪問。 
參考官方文檔:https://zeppelin.apache.org/docs/0.7.3/manual/userimpersonation.html 
有兩種方式設置:

給每一個用戶作免密登陸
設置ZEPPELIN_IMPERSONATE_CMD,這裏採用ZEPPELIN_IMPERSONATE_CMD,vim zeppelin-env.sh 
「` 
export ZEPPELIN_IMPERSONATE_CMD=’sudo -H -u ${ZEPPELIN_IMPERSONATE_USER} bash -c ’ 
export ZEPPELIN_IMPERSONATE_SPARK_PROXY_USER=false
「` 
3. 重啓zeppelin server. 
4. 管理員帳號登陸UI,設置spark interceptor的Impersonate,參考sh interceptor設置 
 

5. 建立hive表驗證,查看hdfs目錄用戶權限

4設置node book權限,每一個用戶能夠設置本身notebook權限 

文本框帶suggest功能,輸入用戶簡稱能夠自動提示

最後,有一篇zeppelin的中文翻譯,雖然翻譯的不怎麼樣,推薦給須要的朋友 
http://cwiki.apachecn.org/pages/viewpage.action?pageId=10030467

7.使用期間出現的bug有:
1.執行任務沒法顯示任務執行進度。 
WARN [2018-04-24 16:04:56,238] ({qtp745160567-15917} ServletHandler.java[doHandle]:620) - 
javax.servlet.ServletException: Filtered request failed. 
at org.apache.shiro.web.servlet.AbstractShiroFilter.doFilterInternal(AbstractShiroFilter.java:384) 
at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:125) 
at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1652) 
at org.apache.zeppelin.server.CorsFilter.doFilter(CorsFilter.java:72) 
at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1652) 
at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:585) 
at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:143) 
at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:577) 
at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:223) 
at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1127) 
at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:515) 
at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:185) 
at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1061) 
at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141) 
at org.eclipse.jetty.server.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:215) 
at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:97) 
at org.eclipse.jetty.server.Server.handle(Server.java:499) 
at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:311) 
at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:257) 
at org.eclipse.jetty.io.AbstractConnection$2.run(AbstractConnection.java:544) 
at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:635) 
at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:555) 
at java.lang.Thread.run(Thread.java:745) 
Caused by: java.lang.AbstractMethodError: javax.ws.rs.core.Response.getStatusInfo()Ljavax/ws/rs/core/Response$StatusType; 
at javax.ws.rs.WebApplicationException.validate(WebApplicationException.java:186) 
at javax.ws.rs.ClientErrorException.<init>(ClientErrorException.java:88) 
at org.apache.cxf.jaxrs.utils.JAXRSUtils.findTargetMethod(JAXRSUtils.java:503) 
at org.apache.cxf.jaxrs.interceptor.JAXRSInInterceptor.processRequest(JAXRSInInterceptor.java:198) 
at org.apache.cxf.jaxrs.interceptor.JAXRSInInterceptor.handleMessage(JAXRSInInterceptor.java:90) 
at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:272) 
at org.apache.cxf.transport.ChainInitiationObserver.onMessage(ChainInitiationObserver.java:121) 
at org.apache.cxf.transport.http.AbstractHTTPDestination.invoke(AbstractHTTPDestination.java:239) 
at org.apache.cxf.transport.servlet.ServletController.invokeDestination(ServletController.java:248) 
at org.apache.cxf.transport.servlet.ServletController.invoke(ServletController.java:222) 
at org.apache.cxf.transport.servlet.ServletController.invoke(ServletController.java:153) 
at org.apache.cxf.transport.servlet.CXFNonSpringServlet.invoke(CXFNonSpringServlet.java:167) 
at org.apache.cxf.transport.servlet.AbstractHTTPServlet.handleRequest(AbstractHTTPServlet.java:286) 
at org.apache.cxf.transport.servlet.AbstractHTTPServlet.doGet(AbstractHTTPServlet.java:211) 
at javax.servlet.http.HttpServlet.service(HttpServlet.java:687) 
at org.apache.cxf.transport.servlet.AbstractHTTPServlet.service(AbstractHTTPServlet.java:262) 
at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:812) 
at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1669) 

解決方案: 
javax.ws.rs.core.Response.getStatusInfo(),是JAX-RS 2裏面的功能,cxf使用是JAX-RX 1,替換cxf相關依賴。 
zeppelin 0.8.0好像已經解決。https://issues.apache.org/jira/browse/ZEPPELIN-903
--------------------- 

一.需求

在使用spark-streaming 處理流式任務時,因爲spark-shell須要登陸到和生產集羣相連的機器開啓,使用起來也有諸多不便,且默認不支持kafka等源,因此萌生使用zeppelin 中的spark interpreter來完成streaming 任務.

 

二.嘗試

在網上找到了一個改版的zeppelin版wordcount例子.

第一步啓動nc 監聽端口7777

第二步在zeppelin spark interpreter 中啓動streming任務

%spark

sc.version
import org.apache.spark.streaming._
import org.apache.spark.streaming.StreamingContext
import org.apache.spark.streaming.StreamingContext._
import org.apache.spark.streaming.dstream.DStream
import org.apache.spark.streaming.Duration
import org.apache.spark.streaming.Seconds
case class Message(createdAt:Long, text:String)
val ssc = new StreamingContext(sc, Seconds(10))
val lines = ssc.socketTextStream("10.104.90.40", 7777)
val errorLines = lines.window(Seconds(10))
val message = errorLines.map(status=>
Message(System.currentTimeMillis()/1000, status)
).foreachRDD(rdd=>
if (rdd.isEmpty()==false) {
rdd.toDF().registerTempTable("message")}
)
errorLines.print
ssc.start()

 

第三步在nc中輸入一些測試數據,在zeppelin spark interpreter讀取streaming處理的結果

%spark
val data = sqlContext.sql("select * from message")
data.show()

獲得相似以下的輸出

data: org.apache.spark.sql.DataFrame = [createdAt: bigint, text: string]
+----------+----+
| createdAt|text|
+----------+----+
|1493709315| asd|
|1493709321| as|
|1493709321| d|
|1493709321| asd|
|1493709315| as|
|1493709315| d|
|1493709321| asd|
|1493709321| as|
|1493709321| das|
|1493709315| d|
|1493709321| as|
|1493709315| d|
|1493709315| 1q2|
|1493709321| 3|
|1493709321| 12|
|1493709321| 312|
|1493709315| |
|1493709321| 3|
|1493709315| 123|
|1493709321| qw|
+----------+----+
only showing top 20 rows


三.問題

嘗試的過程當中發現了以下問題:

1.中止streaming context的方式不正確

若是使用ssc.stop()中止spark streaming context 會致使zeppelin 服務端的spark context也一併中止,致使出現以下的錯誤,而且在web ui重啓spark interpreter也不解決問題,最後只能重啓整個zeppelin 服務.

java.lang.IllegalStateException: RpcEnv has been stopped

在zeppelin中中止streaming context的正確方式爲

ssc.stop(stopSparkContext=false, stopGracefully=true)

 

2.nc server同一時間只能服務一個client

剛開始嘗試nc用法時,先使用nc -lk 7777啓動server端,再使用nc locahost 7777啓動client,嘗試互相傳送信息成功,在zeppelin 中streaming任務卻老是讀不到任何數據

緣由就在於nv server只能同時服務一個client端.

在多個client 端同時連接server 端時,按創建連接的前後會出現只有一個client端口能接收數據的狀況.

若是zeppelin中的streaming任務做爲client端接收到了server端的消息,即便按照1中的方法中止了streaming context,別的client端也依然接受不到消息,推測多是server端服務對象仍然爲streaming 任務.

 

3.ERROR [2017-05-02 11:31:12,686] ({dispatcher-event-loop-2} Logging.scala[logError]:70) - Deregistered receiver for stream 0: Restarting receiver with delay 2000ms: Error connecting to loc 

alhost:7777 - java.net.ConnectException: Connection refuse

開始時使用localhost 做爲socketTextStream中的host地址,卻老是會出現上面的錯誤,可是使用telnet >open  localhost 7777卻能夠成功創建連接

把localhost 改爲10.104.90.40 則不會再出現上述錯誤,推測緣由在於zepplin 使用的spark interpreter設置運行在了cluster mode,在除10.104.90.40 覺得的機器上並無nc 運行,7777端口也是不通的,因此會出現訪問拒絕.

4.Attempted to use BlockRDD[36063] at socketTextStream at <console>:217 after its blocks have been removed!

當使用val data = sqlContext.sql("select * from message")查看streaming 處理結果時,查詢後一段時間(幾s)後再次運行查詢任務就會出現如上錯誤.

在zeppelin spark interpreter日誌中發現每一個窗口執行完以後都與相似以下的日誌

Removing RDD 37697 from persistence list 

從這篇文章中的代碼分析可見出錯緣由在於blockrdd 已經被刪了致使,結合spark streaming dag任務結束後會刪除數據可知

這個報錯的緣由在於message這張由registerTempTable 產生的表實際的存儲rdd已經被刪除致使.

5.hive接入問題,不解

 

INFO [2017-04-28 22:15:10,455] ({pool-2-thread-2} HiveMetaStoreClient.java[open]:376) - Trying to connect to metastore with URI thrift://10.104.90.40:9083 

 

WARN [2017-04-28 22:15:10,456] ({pool-2-thread-2} UserGroupInformation.java[getGroupNames]:1492) - No groups available for user heyang.wang 

 

WARN [2017-04-28 22:15:10,462] ({pool-2-thread-2} HiveMetaStoreClient.java[open]:444) - set_ugi() not successful, Likely cause: new client talking to old server. Continuing without it.

5.1假期前一度出現的問題,只要對rdd進行相關action類操做如rdd.toDf,rdd.collect等就會觸發,可是當時hive cli和beeline均可以正常訪問hive,hive metastore 日誌中也沒有報錯信息.

可是5.1假期或卻又沒問題了.

四.嘗試在livy中運行spark-streaming任務


通過測試,在livy中能夠以一樣的方式使用spark streaming,只須要改%spark爲%livy.spark


五.接入kafka數據源(未完)

參考來源:

https://www.zeppelinhub.com/viewer/notebooks/aHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL2hhZml6dXItcmFobWFuL2NjcC1jaGFsbGVuZ2UxL21hc3Rlci96ZXBwZWxpbi9ub3RlYm9vay8yQVdLWFhKTVgvbm90ZS5qc29u

http://apache-spark-user-list.1001560.n3.nabble.com/Lifecycle-of-RDD-in-spark-streaming-td19749.html

http://www.jianshu.com/p/0e7e540de15c

http://stackoverflow.com/questions/29728151/how-to-listen-for-multiple-tcp-connection-using-nc

http://apache-zeppelin-users-incubating-mailing-list.75479.x6.nabble.com/Thrift-Exception-when-executing-a-custom-written-Interpreter-td1993.html


--------------------- 

lin參數配置
Kylin Interpreter已經集成到Zeppelin 0.5.5的主代碼中,因此直接在Zeppelin的配置頁面能夠找到Kylin配置信息。啓動Zeppelin後,在主頁點擊header上的 Interpreter到該頁面找到Kylin配置欄填上配置信息。

Kylin Interpreter主要功能是把前臺的配置信息和要運行的SQL轉換成一個HTTP請求以獲取結果,而後按照Zeppelin的規範轉換格式,主要就是完成一次HTTP請求,並把本身項目的查詢結果按照Zeppelin的規範格式化,這樣就能配合前端展現。因此這裏的配置參考Kylin Query API便可,默認修改URL,帳號,密碼,Project信息便可,更多關於Kylin API信息點這裏(http://kylin.apache.org/docs/howto/howto_use_restapi.html)。
---------------------

--------------------- 

相關文章
相關標籤/搜索