Spark2.0.1 on yarn with hue 集羣安裝部署(七)livy安裝測試

livy安裝測試

一、R安裝

如果未安裝R,可以先安裝R,用於支持SparkR,如果yum源中沒有R語言的安裝包,可以從官網下載相應版本進行手動編譯安裝。

sudo yum install R

安裝rJava
下載地址:
https://cran.r-project.org/web/packages/rJava/index.html
將下載好的軟件包上傳至/data/soft目錄下
執行以下代碼:

sudo R CMD INSTALL rJava_0.9-8.tar.gz

二、livy編譯安裝

1、安裝說明

livy是一個提供restful風格,可以通過http方式訪問spark,從而啓動spark-submit或spark-shell來提交任務的框架。

安裝運行livy需要以下軟件環境:

可以聯網的Centos環境用於maven下載相關jar包
mvn (from maven package or maven3 tarball)
java-1.7.0-openjdk (or Oracle Java7 jdk)
Python 2.6+
R 3.x

運行livy需要python的以下依賴庫:

cloudpickle
requests
flake8
flaky
pytest

2、livy下載解壓

1)、下載

https://github.com/cloudera/livy/releases

或者使用該命令直接下載:

wget https://github.com/cloudera/livy/archive/v0.2.0.tar.gz

由於hue-3.11.0版本以後,將livy移出hue項目,獨立成爲一個項目,所以需獨立下載。而hue-3.10.0版本之前,livy項目源碼在/hue-3.10.0/apps/spark/java該目錄下,如果使用hue-3.10.0版本或之前的版本直接到/hue-3.10.0/apps/spark/java該目錄下編譯就好。

2)、解壓

將軟件包移動至/home/hadoop/soft目錄下,然後進行解壓:

cd /home/hadoop/soft    
tar –xvzf livy-0.2.0.tar.gz -C ./home/app

3、編譯

export MAVEN_OPTS="-Xmx2g -XX:ReservedCodeCacheSize=512m -XX:MaxPermSize=512M"
    mvn -Dmaven.test.skip clean package

注: export MAVEN_OPTS=”-Xmx2g -XX:ReservedCodeCacheSize=512m -XX:MaxPermSize=512M”,編譯過程中需要大量的內存。如果maven設置的內存不足,將導致導內存溢出異常。
編譯時,一定要增加-Dmaven.test.skip這句話,忽略Junit測試類的編譯,否則,導致編譯失敗。主要因爲部分Junit測試類存在問題,比如編譯TestSparkClient過程中會去綁定localhost/192.157.208.178:0,而192.157.208.178屬於美國的一個ip地址,導致綁定失敗,無法進行後續編譯。
這裏寫圖片描述

編譯過程中會下載大量的依賴jar包,中途可能因爲網絡原因,導致jar包下載失敗,從而也會導致編譯失敗。出現該情況可以使用該命令進行重新編譯:

mvn -DskipTests clean package

最終看到所有模塊都success,就表示成功了。
這裏寫圖片描述

4、無法聯網環境編譯livy

先在可聯網的linux環境下編譯成功livy,然後將maven倉庫中的jar包傳輸至無法聯網的linux環境下,進行覆蓋,執行編譯命令前,先執行:

find ~/.m2/repository -name _remote.repositories |xargs rm –rf

將mvn本地倉庫的_remote.repositories文件刪除,這樣就可以阻止mvn聯網去更新jar包的pom文件。然後執行編譯命令:

mvn -Dmaven.test.skip clean package

當然在聯網的linux環境下編譯的livy包,上傳至其他linux環境也是可以使用的。

5、配置livy

1)、更改livy-0.2.0目錄名稱:

cd /bigdata
mv livy-0.2.0/ livy

2)、環境變量配置

sudo vim /etc/profile

添加如下內容:

export SPARK_HOME=/bigdata/spark
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop

由於livy啓動需要知道Spark的安裝路徑以及hadoop配置文件的路徑。
livy默認會從SPARK_HOME/conf下讀取spark的配置文件,如果要個性化覆蓋默認的spark配置文件,可以配置SPARK_CONF_DIR來額外指定相關配置。
當然也可以在LIVY_HOME/conf/livy-env.sh進行相關的配置,而無需更改/etc/profile文件

注:livy-0.2.0將對spark的配置直接使用了SPARK_HOME/conf中的配置,之前版本並不是。

由於HADOOP_CONF_DIR在搭建spark on yarn中已經添加,此處無需重複添加。

3)、spark on yarn-cluster啓動模式配置

由於livy強烈推薦使用yarn-cluster模式進行配置spark,如果多用戶操作的時候,可以減輕driver端的壓力,防止過載,因此需在SPARK_HOME/conf配置spark-submit的默認啓動方式爲yarn-cluster模式:

vim $SPARK_HOME/conf/spark-defaults.conf

添加內容如下:

spark.master yarn
spark.submit.deployMode cluster

spark所有配置如下:

http://spark.apache.org/docs/latest/configuration.html

4)、livy的spark黑名單配置

$LIVY_HOME/spark-blacklist.conf

該文件列出的項表示自livy啓動後,無法更改spark的啓動模式和spark的相關配置。比如,如果不配置spark的啓動模式,livy默認使用client模式啓動spark,那麼後續要更改爲cluster啓動模式,如果不註釋掉spark.submit.deployMode該項,則無法啓動spark。這邊說的可能有點繞,後續會有測試例子證明,就容易明白了。

4)、日誌目錄配置

vim /bigdata/livy/livy-env.sh

添加內容如下

LIVY_LOG_DIR=/data/logs/livy

6、使用pip安裝python相關依賴庫

1)、安裝pip

可聯網的環境可以使用pip安裝python庫。查看是否安裝pip可以使用如下命令查看。

pip -V

則會出現安裝的pip版本,如下:
pip 8.1.2 from /usr/lib/python2.7/site-packages (python 2.7)
如未安裝則執行以下命令進行安裝:

wget https://bootstrap.pypa.io/get-pip.py
sudo python get-pip.py

先從網上下載get-pip.py文件,然後運行python get-pip.py便會自動下載相關python庫進行安裝。

2)、更改pip源

安裝成功以後,如果使用默認的pip源,可能會有點慢,畢竟訪問的是國外的網站,而且該源還被牆過,很不穩定。則可以修改爲國內的pip源,豆瓣的就不錯:

vim /etc/pip.conf

/etc目錄下並不存在pip.cof文件,須手動添加,然後加入以下內容

[global]
  mirrors = https://pypi.douban.com/simple/
  trusted-host = pypi.douban.com

保存退出即可。由於訪問豆瓣源使用的是https協議,所以需要添加信任,如果不加trusted-host = pypi.douban.com這句話,則無法成功訪問。

3)、使用pip安裝python軟件包

sudo pip install cloudpickle
sudo pip install requests
sudo pip install flake8
sudo pip install flaky
sudo pip install pytest

7、手動安裝python依賴庫

如果你的集羣環境無法聯網,很不幸,那麼只能手動安裝相關python包了。

1)、安裝setuptools:

sudo yum install python-setuptools

該工具包用於安裝第三方python軟件包,如果yum源有,那直接使用yum進行安裝,如果沒有,那隻能下載相關的包進行安裝了。

2)、安裝requests

下載地址:https://pypi.python.org/pypi/requests#downloads
將下載好的軟件包上傳至bigdata1:/data/soft目錄下,解壓:

cd /data/soft   
tar -xvzf requests-2.10.0.tar.gz –C ./python
cd /soft/python/requests-2.10.0
sudo python setup.py build
sudo python setup.py install

驗證:

python
import requests

不報錯便安裝成功了。

3)、安裝cloudpickle

下載地址:https://github.com/cloudpipe/cloudpickle/releases
將下載好的軟件包上傳至bigdata1:/data/soft目錄下,解壓:

cd /data/soft
tar -xvzf cloudpickle-0.1.1.tar.gz –C ./python
cd /soft/python/cloudpickle-0.1.1
sudo python setup.py build
sudo python setup.py install

驗證:

python
import pickle

不報錯便安裝成功了。

4)、安裝pytest

下載地址:https://pypi.python.org/pypi/pytest/#downloads
將下載好的軟件包上傳至bigdata1:/data/soft目錄下,解壓:

cd /data/soft
tar -xvzf pytest-3.0.3.tar.gz –C ./python
cd /soft/python/pytest-3.0.3
sudo python setup.py build
sudo python setup.py install

安裝過程中出錯:
這裏寫圖片描述

需要安裝py。
下載地址:https://pypi.python.org/simple/py/
將下載好的軟件包上傳至bigdata1:/data/soft目錄下,解壓:

cd /data/soft   
tar -xvzf py-1.4.31.tar.gz –C ./python
cd /soft/python/py-1.4.31
sudo python setup.py build
sudo python setup.py install

重新安裝pytest。
驗證:

python
import pytest

不報錯便安裝成功了。

5)、安裝flaky

下載地址:https://github.com/box/flaky/releases
將下載好的軟件包上傳至bigdata1:/data/soft目錄下,解壓:

cd /data/soft   
tar -xvzf flaky-3.1.1.tar.gz  –C ./python
cd /soft/python/flaky-3.1.1
sudo python setup.py build
sudo python setup.py install

驗證:

python
import flaky

不報錯便安裝成功了。

6)、安裝flake8

去yum源查詢是否具有該軟件包。

yum list | grep flake8
sudo yum install python-flake8

驗證:

python
import flake8

不報錯便安裝成功了。

8、livy測試

1)、啓動livy

/bigdata/livy/bin/livy-server

2)、測試livy之spark-shell

參考網址:http://gethue.com/how-to-use-the-livy-spark-rest-job-server-for-interactive-spark-2-2/

  • 查看當前存在的會話
curl localhost:8998/sessions

返回:{“from”:0,”total”:0,”sessions”:[]}
表示當前並沒有會話存在。

  • 創建pyspark會話
curl -X POST --data '{"kind": "pyspark"}' -H "Content-Type:application/json" localhost:8998/sessions

返回:{“id”:0,”state”:”starting”,”kind”:”pyspark”,”log”:[]}
表明該會話已經啓動,並生成會話id爲0,之後便可以通過該會話提交我們的任務。

  • 查看當前會話狀態
curl localhost:8998/sessions/0 | python -m json.tool

返回:
這裏寫圖片描述
state爲idle表示該會話存活,已經準備就緒,可以向該會話提交任務了。| python -m json.tool這是管道命令,把返回的結果格式化顯示。

  • 提交任務
curl localhost:8998/sessions/0/statements -X POST -H 'Content-Type: application/json' -d '{"code":"1 + 1"}'

返回:{“id”:0,”state”:”running”,”output”:null}
表示該任務正在運行中,並生成了一個statement,id爲0,我們便可以查看該statement的運行狀態及結果。

  • 查看任務結果
curl localhost:8998/sessions/0/statements/0

如果返回:
這裏寫圖片描述
則表示任務成功完成。

如果返回:
這裏寫圖片描述
則表示任務失敗,主要原因是由於json4s版本兼容問題導致的,如果spark在編譯前中未做如下修改將會出現以上錯誤:
修改:$SPARK_HOME目錄下的pom.xml文件

cd /bigdata/spark
vim pom.xml

這裏寫圖片描述
將該jar包的版本更改爲3.2.10便不會報該異常。

  • 繼續提交任務

執行:

curl localhost:8998/sessions/0/statements -X POST -H 
'Content-Type: application/json' -d '{"code":"a = 10"}'

返回:{“id”:1,”state”:”running”,”output”:null}
爲0的session中創建新的statements,id爲1

執行:

curl localhost:8998/sessions/0/statements -X POST -H 'Content-Type: application/json' -d '{"code":"a + 1"}'

返回:{“id”:2,”state”:”running”,”output”:null}
創建新的statements,爲2,並執行a+1操作

執行:

curl localhost:8998/sessions/0/statements/2

返回:{“id”:2,”state”:”available”,”output”:{“status”:”ok”,”execution_count”:2,”data”:{“text/plain”:”11”}}}
查詢session爲0,statement爲2的結果

  • 刪除會話

執行:

curl localhost:8998/sessions/0 -X DELETE

返回:{“msg”:”deleted”}

  • 創建會話,並攜帶spark配置
    執行:
curl -X POST --data '{"kind": "pyspark", "numExecutors": 3, "executorMemory": "2G"}' -H "Content-Type: application/json" localhost:8998/sessions

返回:{“id”:3,”owner”:null,”proxyUser”:null,”state”:”starting”,”kind”:”pyspark”,”log”:[]}

3)、測試livy-batch之spark submit jar

參考網址:http://gethue.com/how-to-use-the-livy-spark-rest-job-server-api-for-submitting-batch-jar-python-and-streaming-spark-jobs/

  • 查詢當前存在的會話
curl localhost:8998/sessions | python -m json.tool

這裏寫圖片描述

  • 創建livy-batch會話

創建一個會話用於提交jar包,由於集羣部署在spark on yarn上,所以需要將jar包提交到hdfs集羣中,放置在根目錄下,並且通過file指定hdfs中jar包的在hdfs中的路徑,此時會返回一個id,這樣我們可以根據id進行查詢日誌和運行結果:
執行:

curl -X POST --data '{"file": "/spark-examples_2.10-2.0.1.jar", "className": "org.apache.spark.examples.SparkPi"}' -H "Content-Type: application/json" localhost:8998/batches

返回:{“id”:0,”state”:”running”,”log”:[]}

  • 查看任務執行日誌
    執行:
curl localhost:8998/batches/0/log |  python -m json.tool

如果返回
這裏寫圖片描述

主要因爲在$SPARK_HOME/conf並未配置spark-submit的默認啓動方式爲yarn-cluster模式,livy-batch默認採用client模式啓動spark-submit,而當spark-submit採用yarn-client模式提交,是無法讀取hdfs上的內容,所以需要更改spark-submit啓動模式爲yarn-cluster,才能從hdfs中讀取jar包。

解決方案:
方案一:
可執行:

curl -X POST --data '{"file": "/spark-examples_2.10-2.0.1.jar", "className": "org.apache.spark.examples.SparkPi","conf":{"spark.master":"yarn","spark.submit.deployMode":"cluster"}}' -H "Content-Type: application/json" localhost:8998/batches

如果返回:

“Blacklisted configuration values in session config: spark.master, spark.submit.deployMode”
注:這個須配置livy的spark-blacklist.conf文件,該文件中定義的屬性表示客戶端提交任務至spark不可修改spark的啓動模式,按livy默認的啓動模式client啓動。如果我們提交jar包須使用cluster,則須修改該文件的內容,放開權限。

vim /bigdata/livy/conf/spark-blacklist.conf

修改如下,將這兩行使用#註釋掉:

spark.master
spark.submit.deployMode

註釋掉,保存退出,重啓livy。

執行:

curl -X POST --data '{"file": "/spark-examples_2.10-2.0.1.jar", "className": "org.apache.spark.examples.SparkPi","conf":{"spark.master":"yarn","spark.submit.deployMode":"cluster"}}' -H "Content-Type: application/json" localhost:8998/batches

返回:
{“id”:3,”state”:”running”,”log”:[]}

方案二:
修改spark-submit的默認啓動模式爲yarn-cluster具體的修改上文已經提及,及修改$SPARK_HOME/conf/spark-defaults.conf文件的啓動模式爲yarn-cluster。

注:
推薦採用方案二修改spark-submit啓動模式,當hue與livy、spark整合時就是採用方案二來指定spark-submit的集羣模式。

  • 查看任務結果
curl localhost:8998/batches/3 | python -m json.tool

這裏寫圖片描述
看到success就表示成功了。

4)、測試livy-batch之 spark submit python

pi.py腳本所在位置

$SPARK_HOME/examples/src/main/python/pi.py

將腳本上傳至hdfs中

hadoop fs -put $SPARK_HOME/examples/src/main/python/pi.py /
  • 提交任務
curl -X POST --data '{"file": "/pi.py"}' -H "Content-Type: application/json" localhost:8998/batches

返回:{“id”:5,”state”:”running”,”log”:[]}

  • 查看日誌
curl localhost:8998/batches/5/log |  python -m json.tool
  • 查看結果
curl localhost:8998/batches/6 | python -m json.tool

最終返回:
這裏寫圖片描述
看到success就表示成功了。
至此livy整合spark就成功了,下一章將整合hue livy spark


歡迎拍磚,相互學習,相互進步

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