hive使用spark引擎的几种情况
hive on spark:
目前已经在cm上测试通过,具体配置方法如下:
1.将cm上所有节点的hive升级到hive2.2,便于使用cm自带的spark1.6.x;
2.修改所有节点/opt/cloudera/parcels/CDH/lib/hive/bin/hive脚本,在spark_home环境变量下添加如下代码:
CLASSPATH=${CLASSPATH}:${SPARK_HOME}/lib/spark-assembly.jar,重启hive所有的服务;
3.使用 beeline -u jdbc:hive2://10.8.4.46:10000 -n root或者hive命令直接登录,登陆进去之后,执行:
set hive.execution.engine=spark;
set spark.master=yarn-cluster;
set mapreduce.job.queuename=ada.spark;
4.验证是否设置成功:
在hive库中随便找一张有数据的表,执行select count(*) from xxxx(表名),能成功查询即可验证设置成功
设置过程中遇到的问题及解决办法:
1.org.apache.hive.com.esotericsoftware.kryo.KryoException:Encountered unregistered class ID:109
错误原因:
这个问题主要是由于hive不同版本的包导致的,hive 服务启动时会加载/opt/cloudera/parcels/CDH下jars目录下的包,这个目录中残留的有hive1.1版本的包,所以冲突了
解决方法:
删掉hive servers服务和yarn服务所在节点的冲突包,即:
删除yarn节点和hive所在节点下/opt/cloudera/parcels/CDH下jars中有hive1.1的包
2.任务启动后不能提交的问题:
Starting Spark Job = b6f7dd9e-3ffc-4c1c-99a3-7fe4f99c25ac
Job hasn't been submitted after 61s. Aborting it.
Possible reasons include network issues, errors in remote driver or the cluster has no available resources, etc.
Please check YARN or Spark driver's logs for further information.
Status: SENT
FAILED: Execution Error, return code 2 from org.apache.hadoop.hive.ql.exec.spark.SparkTask?
错误原因:这个问题主要是默认设置为spark-client,hive服务启动时不知道什么原因没有加载到yarn集群的信息;
解决方法:修改将spark.master=spark-client改为spark.master=yarn-cluster,问题得到解决;
3.snappy错误:
java.lang.UnsatisfiedLinkError?: org.xerial.snappy.SnappyNative?.maxCompressedLength(I)I
at org.xerial.snappy.SnappyNative?.maxCompressedLength(Native Method)
错误原因:spark-assembly已经包含了snappy类,版本与集群提供的不一致;
解决方法:
1.在46上找到/lib/spark/conf/classpath.txt ,打开文件删除snappy相关依赖包,保存;
2.在yarn节点和hive所在节点下执行:
mv /opt/cloudera/parcels/CDH-5.8.2-1.cdh5.8.2.p0.3/lib/spark/conf/classpath.txt /opt/cloudera/parcels/CDH-5.8.2-1.cdh5.8.2.p0.3/lib/spark/conf/classpath.txt_bak;scp 10.8.4.46:/opt/cloudera/parcels/CDH-5.8.2-1.cdh5.8.2.p0.3/lib/spark/conf/classpath.txt /opt/cloudera/parcels/CDH-5.8.2-1.cdh5.8.2.p0.3/lib/spark/conf
参考链接:
https://cwiki.apache.org//confluence/display/Hive/Hive+on+Spark:+Getting+Started
https://blog.csdn.net/pucao_cug/article/category/6941532
http://mirror.bit.edu.cn/apache/spark/
使用spark引擎查询hive有以下几种方式:
1>使用spark-sql(spark sql cli)
2>使用spark-thrift提交查询sql
3>使用hive on spark(即hive本身设置执行引擎为spark)
针对第一种情况:
1>ambari 已经支持,不需要特殊配置;
2>cdh不支持spark sql cli,原因是cdh自带的spark,spark-sql和spark-R是阉割版本的,如果需要使用
spark sql cli,需要下载原生的编译好的spark包替换cdh自带的包
针对第二种情况:
1>cdh 上手动启动/opt/cloudera/parcels/SPARK2-2.0.0.cloudera.beta1-1.cdh5.7.0.p0.108015/lib/spark2/sbin/start-thriftserver.sh
然后通过beeline连接即可(由于hive-site.xml配置的和hive thrift一样,没有单独配置,所以应在hiveserver2之外的其他节点启动start-thriftserver.sh,这个服务看看能不能添加到spark2管理界面中 ),目前已经调试通过
注:131上spark/conf/yarn-conf/hive-site.xml这个文件不存在,手动拷贝的,50上是有的
2>ambari支持,且sparkthrift服务也启动正常,但是在通过beeline连接的时候报错:
原因是:自启动的hive默认配置不完全,需要手动在spark的配置下找到hive-site的配置添加缺少项;
hive.server2.enable.doAs=true
hive.server2.thrift.port=10016与hive的区别开
hive.server2.transport.mode=binary
spark.yarn.queue=ada.spark
hive.metastore.warehouse.dir=/apps/hive/warehouse,否则找不到会使用执行命令所在目录作为仓库
针对第三种情况:hive on spark要求hive和spark要严格的版本匹配,目前无论是ambari或者cm都不能保证这两个组件版本是匹配的,单独升级某个组件有可能存在隐患,目前还不支持