如何自定義編譯zeppelin與livy 的parcels 與CDH6.3.2 集成

如何自定義編譯zeppelin 的parcels 與CDH 集成

標籤(空格分隔): 大數據運維專欄


  • 一:關於zeppelin介紹
  • 二:如何自定義CDH 的 parcels 與 csd 的jar 包
  • 三:zeppelin 與CDH的集成
  • 四:關於zeppelin 的測試

一:關於zepplin的介紹

Apache Zeppelin 是一個讓交互式數據分析變得可行的基於網頁的開源框架。Zeppelin提供了數據分析、數據可視化等功能。

Zeppelin 是一個提供交互數據分析且基於Web的筆記本。方便你做出可數據驅動的、可交互且可協作的精美文檔,並且支持多種語言,包括 Scala(使用 Apache Spark)、Python(Apache Spark)、SparkSQL、 Hive、 Markdown、Shell等等。

Zeppelin 功能:

    數據提取

    數據發掘

    數據分析

    數據可視化展示以及合作

圖片.png-200.4kB

二:如何自定義CDH 的 parcels 與 csd 的jar 包

2.1 編譯環境準備

建議使用國外雲主機 ,flyfish 這邊用的是香港的雲主機

系統: ubuntu 16.0.4x64
jdk: jdk1.8.0_261
maven: apache-maven-3.6.3

jdk 與maven 安裝目錄:/software 

環境變量配置:

vim /etc/profile
----
# jdk 
export JAVA_HOME=/software/jdk1.8.0_261
export CLASSPATH=.:$JAVA_HOME/jre/lib:$JAVA_HOME/lib:$JAVA_HOME/lib/tools.jar
PATH=$PATH:$HOME/bin:$JAVA_HOME/bin

# maven
export MAVEN_HOME=/software/apache-maven-3.6.3
PATH=$PATH:$HOME/bin:$MAVEN_HOME/bin
----

java -version 

maven -version 

圖片.png-47.9kB


2.2 下載 打包 livy 與 zeppelin 的parcels 打包軟件

編譯步驟如下:
    1. 下載Livy和Zeppelin源碼並編譯
    2. 生成Livy和Zeppelin的Parcel包
    3. 下載編譯Cloudera提供的cm_ext工具,用於校驗parcel及生成manifest.json文件
    4. 生成Livy和Zeppelin的csd文件,用於CM對Livy和Zeppelin服務的識別

下載 打包 源

cd /software

git clone https://github.com/alexjbush/livy_zeppelin_cdh_csd_parcels.git

flyfish 這裏已經下載好了

圖片.png-18kB

圖片.png-38.5kB


然後修改打包源的build.sh
cd /software/livy_zeppelin_cdh_csd_parcels
vim build.sh
---
主要修改的是上面 包的路徑:

CM_EXT_BRANCH=cm5-5.15.0
LIVY_URL=http://apache.mirror.anlx.net/incubator/livy/0.7.0-incubating/apache-livy-0.7.0-incubating-bin.zip
LIVY_MD5="2c5b63757414af16da308e63749e1ae6"
LIVY_VERSION=0.7.0

ZEPPELIN_URL=http://apache.mirror.anlx.net/zeppelin/zeppelin-0.8.2/zeppelin-0.8.2-bin-all.tgz
ZEPPELIN_MD5="e9d2cd60f6900eb6435b780a1292106e"
ZEPPELIN_VERSION=0.8.2
---

切記 因爲包 的 版本 不同 md5 碼 也不同

圖片.png-53.7kB

執行編譯 生成parcels 包

chmod +x build.sh 

./build.sh parcel 

圖片.png-51.1kB

圖片.png-44.8kB

圖片.png-38.3kB


打出parcels 放在:ZEPPELIN-0.8.2_build 下面

cd ZEPPELIN-0.8.2_build 

manifest.json  ZEPPELIN-0.8.2-el7.parcel 文件

LIVY 放在:

cd LIVY-0.7.0_build
LIVY-0.7.0-el7.parcel  manifest.json

圖片.png-18.6kB

圖片.png-21.3kB

生成 csd 的jar 包

cd /software/livy_zeppelin_cdh_csd_parcels

./build.sh csd 

圖片.png-48.4kB

圖片.png-55.1kB

生成 jar 包 

ls -ld *.jar

圖片.png-17.6kB

mkdir zepplin-parcels

mv ZEPPELIN.jar zeppelin-parcels

mv ZEPPELIN-0.8.2_build/* zeppelin-parcels 

mv LIVY-0.7.0.jar livy-parcels/
cd LIVY-0.7.0_build/

mv * ../livy-parcels/

tar -zcvf zeppelin-parcels.tar.gz zeppelin-parcels

tar -zcvf livy-parcels.tar.gz livy-parcels

然後把 zeppelin-parcels.tar.gz livy-parcels.tar.gz 這兩個包 下載下來 拿去 和 CDH 集成

圖片.png-50kB

圖片.png-55.1kB


三:zeppelin 與CDH的集成

cd /var/www/html/
mkdir livy zeppelin

上傳zeppelin-parcels.tar.gz 這個包 到 /var/www/html/zeppelin 下面 
上傳livy-parcels.tar.gz 這個包到 /var/www/html/livy 下面
解壓 zeppelin-parcels.tar.gz 然後 將 manifest.json  ZEPPELIN-0.8.2-el7.parcel  ZEPPELIN-0.8.2.jar
這三個文件 移動 到 /var/www/html/zeppelin 下面

同樣將 livy-parcels.tar.gz 這個包 解壓 將 LIVY-0.7.0-el7.parcel  LIVY-0.7.0.jar  manifest.json 這三個文件 移動到 /var/www/html/livy 下面

圖片.png-48.8kB

cd /var/www/html/livy 
 mv LIVY-0.7.0.jar /opt/cloudera/csd/

 cd /var/www/html/zeppelin

 mv mv ZEPPELIN-0.8.2.jar /opt/cloudera/csd/

 chown cloudera-scm:cloudera-scm /opt/cloudera/csd -R 

service cloudera-scm-server restart

圖片.png-33.6kB

去CDH 上面 配置 parcels 目錄

http://192.168.11.37/livy
http://192.168.11.37/zeppelin

圖片.png-90.1kB

圖片.png-69.3kB

下載 ---》 分配---》 激活

圖片.png-9.2kB

圖片.png-65.4kB

圖片.png-63.7kB


從新啓動CM 加載擴展 jar 包

圖片.png-55kB

圖片.png-67.2kB

添加livy 與zeppelin 服務

圖片.png-67.9kB

圖片.png-88.9kB

添加livy 服務依賴

圖片.png-64.9kB

圖片.png-47.1kB

圖片.png-54.3kB

圖片.png-74.7kB

圖片.png-80.5kB

遇到問題:
  Error found before invoking supervisord: 'getpwnam(): name not found: livy'

圖片.png-9.5kB

解決辦法: 

 解決辦法:

在Livy REST Server所在服務器上增加livy用戶及用戶組
groupadd livy
useradd livy -g livy
chown livy:livy /var/log/livy
在HDFS的core-site.xml 中添加一下配置:
<property>
    <name>hadoop.proxyuser.livy.groups</name>
    <value>*</value>
</property>
<property>
    <name>hadoop.proxyuser.livy.hosts</name>
    <value>*</value>
</property>

圖片.png-8.4kB

圖片.png-92.8kB

添加完之後從新啓動HDFS 

圖片.png-59.8kB

添加zeppelin 服務

在主機 節點 上創建 zepplin 的用戶和組

在 Zeppelin Server 服務所在的節點添加 zeppelin 用戶和角色:

groupadd zeppelin
useradd zeppelin -g zeppelin
mkdir -p /var/log/zeppelin
chown zeppelin:zeppelin /var/log/zeppelin

圖片.png-34.1kB

圖片.png-80.1kB

圖片.png-44.2kB

圖片.png-93kB

報錯:

由於錯誤 java.lang.IllegalArgumentException: The variable [${zeppelin_java_options}] does not have a corresponding value.,角色啓動失敗。

解決:

ZEPPELIN --> 配置 --> 搜索 zeppelin_java_options --> 添加參數 -Xms1024m --> 重啓ZEPPELIN 服務

圖片.png-44kB

報錯:
mkdir: `file:///var/local/zeppelin/conf': Input/output error

解決辦法:

  ZEPPELIN --> 配置 --> 搜索 dir --> 修改配置 --> 重啓ZEPPELIN 服務
  hdfs dfs -mkdir -p /var/local/zeppelin/conf
  hdfs dfs -mkdir -p /var/local/zeppelin/data/notebook 
  hdfs dfs -chmod 777 /var/local/zeppelin/conf
  hdfs dfs -chmod 777 /var/local/zeppelin/data/notebook

圖片.png-42.5kB

圖片.png-67.7kB

圖片.png-104.7kB

圖片.png-79.4kB


因爲flyfish這邊的 8080 端口 被佔用了,改一下 zeppelin的端口 爲 8081 
然後 改一下 zeppelin的 服務端 地址,然後從新啓動zeppelin 服務

圖片.png-29.1kB

圖片.png-28.2kB

打開web:
http://192.168.11.37:8081

圖片.png-46.3kB

四: 關於zeppelin 的測試

圖片.png-62.8kB

測試實例一:

上傳測試數據
vim test.txt
---
hadoop hive
spark zeppelin 
hadoop spark
---

hdfs dfs -put test.txt /tmp 

圖片.png-39.3kB

運行spark 測試程序

%spark
val textFile = spark.read.textFile("/tmp/test.txt")
textFile.count()
textFile.first()

圖片.png-24.2kB

輸出結果

圖片.png-43.9kB

livy 的查詢spark REST接口

圖片.png-59.1kB

圖片.png-71.1kB

測試實例二:
 Data Refine
   下載需要bank數據,http://archive.ics.uci.edu/ml/machine-learning-databases/00222/bank.zip
   首先,將csv格式數據轉成Bank對象RDD,並過濾表頭列

   上傳到主節點: 
      unzip bank.zip

圖片.png-39.5kB


hdfs dfs -mkdir /tmp/test
hdfs dfs -put bank-full.csv bank.csv bank-names.txt /tmp/test 

圖片.png-16.5kB


創建一個spark的notebook 

val bankText = sc.textFile("/tmp/test/bank-full.csv")

case class Bank(age:Integer, job:String, marital : String, education : String, balance : Integer)

val bank = bankText.map(s=>s.split(";")).filter(s=>s(0)!="\"age\"").map(
    s=>Bank(s(0).toInt, 
            s(1).replaceAll("\"", ""),
            s(2).replaceAll("\"", ""),
            s(3).replaceAll("\"", ""),
            s(5).replaceAll("\"", "").toInt
        )
)

// Below line works only in spark 1.3.0.
// For spark 1.1.x and spark 1.2.x,
// use bank.registerTempTable("bank") instead.
bank.toDF().registerTempTable("bank")

圖片.png-55.5kB


執行以下語句,可看到年齡的分佈:

%sql select age, count(1) from bank where age < 30 group by age order by age

圖片.png-50.8kB

圖片.png-57.8kB


根據婚姻狀況選項,查看年齡分佈狀況:
%sql select age, count(1) from bank where marital="${marital=single,single|divorced|married}" group by age order by age

圖片.png-39.8kB

圖片.png-86.1kB

spark job 的分佈

圖片.png-117.7kB

使用zeppelin 的配置 hive 連接

create Interpreters

圖片.png-24.6kB

圖片.png-86.4kB

artifact的骨架配置

/opt/cloudera/parcels/CDH/jars/hive-jdbc-2.1.1-cdh6.3.2.jar 
/opt/cloudera/parcels/CDH/jars/hive-service-rpc-2.1.1-cdh6.3.2.jar  
/opt/cloudera/parcels/CDH/jars/hive-cli-2.1.1-cdh6.3.2.jar  
/opt/cloudera/parcels/CDH/jars/hive-service-2.1.1-cdh6.3.2.jar  
/opt/cloudera/parcels/CDH/jars/hive-common-2.1.1-cdh6.3.2.jar   
/opt/cloudera/parcels/CDH/jars/hive-serde-2.1.1-cdh6.3.2.jar

保存退出:

圖片.png-50.5kB

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