Spark2.0.1 on yarn with hue 集群安装部署(六)livy安装测试
一、R安装
如果未安装R,可以先安装R,用于支持SparkR,如果yum源中没有R语言的安装包,可以从官网下载相应版本进行手动编译安装。
sudo yum install R
- 1
安装rJava
下载地址:
https://cran.r-project.org/web/packages/rJava/index.html
将下载好的软件包上传至/data/soft目录下
执行以下代码:
sudo R CMD INSTALL rJava_0.9-8.tar.gz
- 1
二、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
- 1
- 2
3、编译
export MAVEN_OPTS="-Xmx2g -XX:ReservedCodeCacheSize=512m -XX:MaxPermSize=512M" mvn -Dmaven.test.skip clean package
- 1
- 2
注: 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
- 1
最终看到所有模块都success,就表示成功了。
4、无法联网环境编译livy
先在可联网的linux环境下编译成功livy,然后将maven仓库中的jar包传输至无法联网的linux环境下,进行覆盖,执行编译命令前,先执行:
find ~/.m2/repository -name _remote.repositories |xargs rm –rf
- 1
将mvn本地仓库的_remote.repositories文件删除,这样就可以阻止mvn联网去更新jar包的pom文件。然后执行编译命令:
mvn -Dmaven.test.skip clean package
- 1
当然在联网的linux环境下编译的livy包,上传至其他linux环境也是可以使用的。
5、配置livy
1)、更改livy-0.2.0目录名称:
cd /bigdata mv livy-0.2.0/ livy
- 1
- 2
2)、环境变量配置
sudo vim /etc/profile
- 1
添加如下内容:
export SPARK_HOME=/bigdata/spark export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
- 1
- 2
由于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
- 1
添加内容如下:
spark.master yarn spark.submit.deployMode cluster
- 1
- 2
spark所有配置如下:
4)、livy的spark黑名单配置
$LIVY_HOME/spark-blacklist.conf
- 1
该文件列出的项表示自livy启动后,无法更改spark的启动模式和spark的相关配置。比如,如果不配置spark的启动模式,livy默认使用client模式启动spark,那么后续要更改为cluster启动模式,如果不注释掉spark.submit.deployMode该项,则无法启动spark。这边说的可能有点绕,后续会有测试例子证明,就容易明白了。
4)、日志目录配置
vim /bigdata/livy/livy-env.sh
- 1
添加内容如下
LIVY_LOG_DIR=/data/logs/livy
- 1
6、使用pip安装python相关依赖库
1)、安装pip
可联网的环境可以使用pip安装python库。查看是否安装pip可以使用如下命令查看。
pip -V
- 1
则会出现安装的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
- 1
- 2
先从网上下载get-pip.py文件,然后运行python get-pip.py便会自动下载相关python库进行安装。
2)、更改pip源
安装成功以后,如果使用默认的pip源,可能会有点慢,毕竟访问的是国外的网站,而且该源还被墙过,很不稳定。则可以修改为国内的pip源,豆瓣的就不错:
vim /etc/pip.conf
- 1
/etc目录下并不存在pip.cof文件,须手动添加,然后加入以下内容
[global] mirrors = https://pypi.douban.com/simple/ trusted-host = pypi.douban.com
- 1
- 2
- 3
保存退出即可。由于访问豆瓣源使用的是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
- 1
- 2
- 3
- 4
- 5
7、手动安装python依赖库
如果你的集群环境无法联网,很不幸,那么只能手动安装相关python包了。
1)、安装setuptools:
sudo yum install python-setuptools
- 1
该工具包用于安装第三方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
- 1
- 2
- 3
- 4
- 5
验证:
python import requests
- 1
- 2
不报错便安装成功了。
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
- 1
- 2
- 3
- 4
- 5
验证:
python import pickle
- 1
- 2
不报错便安装成功了。
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
- 1
- 2
- 3
- 4
- 5
安装过程中出错:
需要安装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
- 1
- 2
- 3
- 4
- 5
重新安装pytest。
验证:
python import pytest
- 1
- 2
不报错便安装成功了。
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
- 1
- 2
- 3
- 4
- 5
验证:
python import flaky
- 1
- 2
不报错便安装成功了。
6)、安装flake8
去yum源查询是否具有该软件包。
yum list | grep flake8 sudo yum install python-flake8
- 1
- 2
验证:
python import flake8
- 1
- 2
不报错便安装成功了。
8、livy测试
1)、启动livy
/bigdata/livy/bin/livy-server
- 1
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
- 1
返回:{“from”:0,”total”:0,”sessions”:[]}
表示当前并没有会话存在。
- 创建pyspark会话
curl -X POST --data '{"kind": "pyspark"}' -H "Content-Type:application/json" localhost:8998/sessions
- 1
返回:{“id”:0,”state”:”starting”,”kind”:”pyspark”,”log”:[]}
表明该会话已经启动,并生成会话id为0,之后便可以通过该会话提交我们的任务。
- 查看当前会话状态
curl localhost:8998/sessions/0 | python -m json.tool
- 1
返回:
state为idle表示该会话存活,已经准备就绪,可以向该会话提交任务了。| python -m json.tool这是管道命令,把返回的结果格式化显示。
- 提交任务
curl localhost:8998/sessions/0/statements -X POST -H 'Content-Type: application/json' -d '{"code":"1 + 1"}'
- 1
返回:{“id”:0,”state”:”running”,”output”:null}
表示该任务正在运行中,并生成了一个statement,id为0,我们便可以查看该statement的运行状态及结果。
- 查看任务结果
curl localhost:8998/sessions/0/statements/0
- 1
如果返回:
则表示任务成功完成。
如果返回:
则表示任务失败,主要原因是由于json4s版本兼容问题导致的,如果spark在编译前中未做如下修改将会出现以上错误:
修改:$SPARK_HOME目录下的pom.xml文件
cd /bigdata/spark vim pom.xml
- 1
- 2
将该jar包的版本更改为3.2.10便不会报该异常。
- 继续提交任务
执行:
curl localhost:8998/sessions/0/statements -X POST -H 'Content-Type: application/json' -d '{"code":"a = 10"}'
- 1
- 2
返回:{“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"}'
- 1
返回:{“id”:2,”state”:”running”,”output”:null}
创建新的statements,为2,并执行a+1操作
执行:
curl localhost:8998/sessions/0/statements/2
- 1
返回:{“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
- 1
返回:{“msg”:”deleted”}
- 创建会话,并携带spark配置
执行:
curl -X POST --data '{"kind": "pyspark", "numExecutors": 3, "executorMemory": "2G"}' -H "Content-Type: application/json" localhost:8998/sessions
- 1
返回:{“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
- 1
- 创建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
- 1
返回:{“id”:0,”state”:”running”,”log”:[]}
- 查看任务执行日志
执行:
curl localhost:8998/batches/0/log | python -m json.tool
- 1
如果返回
主要因为在$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
- 1
如果返回:
“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
- 1
修改如下,将这两行使用#注释掉:
spark.master spark.submit.deployMode
- 1
- 2
注释掉,保存退出,重启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
- 1
返回:
{“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
- 1
看到success就表示成功了。
4)、测试livy-batch之 spark submit python
pi.py脚本所在位置
$SPARK_HOME/examples/src/main/python/pi.py
- 1
将脚本上传至hdfs中
hadoop fs -put $SPARK_HOME/examples/src/main/python/pi.py /
- 1
- 提交任务
curl -X POST --data '{"file": "/pi.py"}' -H "Content-Type: application/json" localhost:8998/batches
- 1
返回:{“id”:5,”state”:”running”,”log”:[]}
- 查看日志
curl localhost:8998/batches/5/log | python -m json.tool
- 1
- 查看结果
curl localhost:8998/batches/6 | python -m json.tool
- 1
最终返回:
看到success就表示成功了。
至此livy整合spark就成功了,下一章将整合hue livy spark
目录 返回
首页