装了一个多星期的hive on spark 遇到了许多坑。还是写一篇随笔,免得以后自己忘记了。同事也给我一样苦逼的人参考。
先说明一下,这里说的Hive on Spark是Hive跑在Spark上,用的是Spark执行引擎,而不是MapReduce,和Hive on Tez的道理一样。
先看官网的资源Hive on Spark: Getting Started
要想在Hive中使用Spark执行引擎,第一步当前就是环境设置,我们需要在Hive启动的时候加载spark-assembly-1.5.0-hadoop2.6.0.jar,最简单的方法是把spark-assembly-1.5.0-hadoop2.6.0.jar包直接拷贝 到$HIVE_HOME/lib目录下。我采用的方法是在hive-site里面添加spark.home。具体给出官方的建议,这个不算坑,基本都能做好。
好了到这里开始讲我遇到的坑
第一个坑:直接使用spark pre-build版本,下来后按照上面配置弄结果报错
java.lang.NoSuchFieldError: SPARK_RPC_CLIENT_CONNECT_TIMEOUT
at org.apache.hive.spark.client.rpc.RpcConfiguration.<clinit>(RpcConfiguration.java:46)
报了rpc错误,这个坑要好查点,发现是因为需要自己编译spark因为预编译的带了hive的支持也就是-Phive,这个参数是spark-sql对hive的支持用的,结果用在hive on spark就不行。没事,我们开始编译吧。接下来苦逼日子来了。
第二个坑:版本不对,刚开始以为hive 能使用 spark的任何版本,结果发现错了,hive对spark版本有着严格要求,具体对应版本你可以下载hive源码里面,搜索他pom.xml文件里面的spark版本,如果版本不对,启动hive后会报错。具体错误如下:
Failed to execute spark task, with except