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)、下載
或者使用該命令直接下載:
由於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所有配置如下:
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
- 查詢當前存在的會話
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
歡迎拍磚,相互學習,相互進步