重新编译spark 增加spark-sql适配CDH

参考资料

让cloudera manager装的spark支持hql
Apache Spark学习:将Spark部署到Hadoop 2.2.0上

CDH内嵌spark版本不支持spark-sql,可能是因为cloudera在推自己的impala;如果上线spark却不能使用sql这种结构化语言,对于大部分分析人员其实是有一定的门槛的

准备环境

maven等相关环境安装
scala安装
下载spark源码
cdh5.5.0中使用的spark-1.5.0,下载对应源码
http://archive.apache.org/dist/spark/spark-1.5.0/spark-1.5.0.tgz
解压文件到/pwl/code/spark-1.5.0

编译获取assembly的jar包

修改maven的内存配置,防止内存溢出,在$mavn_home/bin下的mvn增加下面这一行

MAVEN_OPTS="$MAVEN_OPTS -Xms256m -Xmx1024m -XX:MaxPermSize=128m -XX:ReservedCodeCacheSize=128m"

mvn内存配置
对spark进行编译,进入spark解压目录 /pwl/code/spark-1.5.0 运行以下命令,指定yarn、thrift、cdh,注意hadoop.version和scala版本

mvn -Pyarn -Dhadoop.version=2.6.0-cdh5.5.0   -Dscala-2.10.3 -Phive -Phive-thriftserver   -DskipTests clean package

这是我编译过程中遇到错误调整过后根目录下的pom.xml文件,存放在百度网盘中供参考:spark源码中的pom.xml
编译时间比较长,结果如下
编译结果
目标是需要一个新的加入了hive相关的jar包spark-assembly.jar,编译结果的路径为
/pwl/code/spark-1.5.0/assembly/target/scala-2.10 ,如下图,其中/pwl/code/spark-1.5.0为源码的解压路径
结果jar包
编译后,有200M大小…如果下载到win下修改后缀名为rar或者zip打开进入org/apache目录有hive和thrift相关的目录,下图为编译前后org/apache下目录结果对比
编译前后结果对比

替换spark下原有的assembly jar包(如果想要运行example,对应的example包也需要替换)

需要替换的目录为/opt/cloudera/parcels/CDH/lib/spark/lib,该目录为使用CM安装的自定义目录
对应文件为spark-assembly-1.5.0-cdh5.5.0-hadoop2.6.0-cdh5.5.0.jar,实际上这个文件是一个软连接到 /opt/cloudera/parcels/CDH/jars下的assembly包,所以直接将编译好的包替换掉就可以了(建议备份原有的jar包)
这里只替换master上的即可,如果想在其他客户端使用spark-sql,也需要替换掉

修改路径

上传assembly包到hdfs上
hdfs路径为:/user/spark/share/lib/spark-assembly-1.5.0-hadoop2.6.0-cdh5.5.0.jar
修改文件权限为755

之后配置修改spark服务范围
spark上的hdfs配置
spark-default.conf配置文件中增加配置即 assembly 包的指向(gateway中设置)

spark.yarn.jar=hdfs://master:8020/user/spark/share/lib/spark-assembly-1.5.0-hadoop2.6.0-cdh5.5.0.jar

参数spark.yarn.jar 主要是用于优化,避免在每次提交作业的时候都从本地上传这个文件到hdfs集群带来的资源消耗
这里写图片描述

增加hive和yarn的配置文件

实际上在CM中的spark是有默认去读取hive和yarn的配置目录的,如果没有的话可以自己进行配置,如下
在CM集群管理中的spark中,修改spark-conf/spark-env.sh 增加下面命令
export HIVE_CONF_DIR=/opt/cloudera/parcels/CDH/lib/hive/conf
注:这个应该直接将hive-site.xml文件拷进$spark_home/conf 下也可以解决

启用spark-sql

启用spark-sql有两种方式,直接运行spark-sql、使用beeline通过thrift进行

方式一 利用spark-sql启动
从编译的源码中的bin目录复制spark-sql脚本存放到CDH下的spark启动目录下,

cp /pwl/code/spark-1.5.0/bin/spark-sql ../bin/
spark-sql
修改spark_home目录下的spark-sql脚本中的FWDIR路径,修改为绝对路径,如果有配置全局的SPARK_HOME,可以设置FWDIR=$SPARK_HOME,最后将spark-sql文件复制到 /usr/sbin 下,可直接运行spark-sql进行启动
sparkk-sql fwdir
运行效果如下:
spark-sql启动结果

方式二 利用beeline启动

复制编译目录下面的bin/start-thriftserver.sh 和stop-thriftserver.sh 到spark_home下的sbin目录 ( sparkhome/opt/cloudera/parcels/CDH5.5.01.cdh5.5.0.p0.8/lib/spark spark_home/sbin下运行命令
./start-thriftserver.sh –master yarn –hiveconf hive.server2.thrift.port=10008
默认的端口为10000
beeline -u jdbc:hive2://master:10008
如下:注意端口一致,出现Connected to:Spark SQL为连接成功,否则连接的还是hive,或者使用explain查看执行计划是否走的RDD
beeline

关于方式一和方式二的区别,方式一直接使用spark-sql,运行一次就会启用一个yarn applicaiton,对于通过thrift,beeline不管连接多少个都是对应一个yarn application。运行的HQL是跟hive一致的。

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 9
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值