虚拟化容器,大数据,DBA,中间件,监控。

Spark2.0.1 on yarn with hue 集群安装部署(六)livy安装测试

15 11月
作者:admin|分类:大数据

一、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)、下载

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
  • 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所有配置如下:

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

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

参考网址: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
  • 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

浏览442 评论0
返回
目录
返回
首页
flume读取日志数据写入kafka 然后kafka+storm整合 livy-0.5安装