原文地址:http://www.cnblogs.com/breg/p/5552342.html
装了一个多星期的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。具体给出官方的建议,这个不算坑,基本都能做好。
aaarticlea/png;base64,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Vkq8jVgJAADwmhArJYiVAAAARRErJYiVAAAARRErJYiVAAAARRErJYiVAAAARRErJYiVAAAARRErJYiVAAAARRErJYiVAAAARRErJYiVAAAARRErJYiVAAAARRErJYiVAAAARRErJYiVAAAARRErJYiVAAAARRErJYiVAAAARRErJYiVAAAARRErJYiVAAAARRErJT5//vz73//+pWsBAADwlhArJb5+/frb3/6WZAkAAJAfsVLu69evnz9/ngEAACAfYiUAAABKQKwEAABACYiVAAAAKAGxEgAAACUgVgIAAKAExEoAAACUgFgJAACAEhArAQAAUAJiJQAAAEpArAQAAEAJiJUAAAAoAbESAAAAJSBWAgAAoATESgAAAJSAWPnKrVabl64C3hsOqqfwiF5lRwB4b95xrLRNTTPtx627GhpahH7Uavdmq72rubbVqmuaprXH//wNW99VY2SEhXxLc4QQq1mv3TrSNU3T6s1LczT3z2eJlmr6UaszdNzImu6so2taa7CIlpZYK77aamjEq7qZmU2tac7U59DUKukWb+Yj87JZl+4P22pemkM7sYfcxWTQMdqjlbzOmqaVsI+kvnFnPanoQVWWve1VLVCoowr3auTz+NTx7RG9WuKn2y8w80NU0jEZ/xh2hsEXiXTrwfvGMPLRdAZn7fHmqWqr+qJ7FquZZRzp3qatHCcM4D0iVkolvvLc1Xxg6E3TdjPW8TZ51nMet8l91fiW5rj2bbPZmSy86rsr22rpTWue3IS3zUmnqUdOw5vRpXbd6egn3vLpinlLzQeGfuJ3UPynrm02tWZnkvkluy9WLsbXzfpHaxY0YTG7bUV2iG1qWqv1MV7CZtw+OTkJT2mq09735kX64WViZdmfxwyP6NXSd0SO382+0WJo6M3rIErGP4V5Y+VqaFyONk9T24wvumcwt5q64f1yvZn3jMSv4sD34p3HymurZxzpmlZPDsHtIfnKc2fmSRitXGfYadU1TdOPDHOyCFaJDIGFX5C2qRm9kVcN/cjozcNqSApJ1sFjDFdhcy6b9YLlCNm3tW3q+q0tb6kzONu9tRi09M7MnVsnemcWblJ2SpiZmldk9KeufXumN6/H+75fs88xm3Fbbw2c+I/dmRnWyTY1zRwOjUgVxWZ02bYso3islPenfD/OrZNo3vZ7K7b3zeHosq5p+vVkkyh8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" alt="" />
好了到这里开始讲我遇到的坑
第一个坑:直接使用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 exception 'org.apache.hadoop.hive.ql.metadata.HiveException(Failed to create spark client.)' FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.spark.SparkTask
第三个坑:spark的编译,在这里我使用的是hive稳定版本2.01,查看他的pom.xml需要的spark版本是1.5.0.接着讲诉我遇到坑爹的事情,直接让我快一个星期时间白费。在编译的时候使用了hive 官网提供的命令,悲催的事情发生了,使用的命令是:
.
/make-distribution
.sh --name
"hadoop2-without-hive"
--tgz
"-Pyarn,hadoop-provided,hadoop-2.6"
然后将 lib/spark-assembly-1.5.0-hadoop2.6.0.jar 这个包拷到你现在的spark/lib 下另外一个相同的注意备份
但是当启动spark集群的时候报错了,错误如下
Exception in thread "main" java.lang.NoClassDefFoundError: org/slf4j/impl/StaticLoggerBinder
这个时候坑爹了,网上找来找去都没找到这个问题解决方案,上面错误原因就是说slf4j这个包找不到,你妹,完全按照官网来的,官网是怎么测试的呀,悲催了。接下来就是苦恼我一周的安装过程。
在网上找呀找,稍微看到一个靠谱的说法是编译的时候没有讲hadoop的jar包导进来,但是给出解决办法是在spark-env.sh里面添加
export SPARK_DIST_CLASSPATH=$(hadoop classpath)
好了添加了这个,spark master可以起来了,但是slaves仍然是上面错误,又开始找资料了。每天都在痛苦的阅读英文文档,差点抑郁了。而且国内google这不给力,用vpn时断时续,差点砸电脑。最后快绝望的时候回到spark官网,仔细阅读他提供的编译命令,死马当活马医吧。按照官网提供的编译命令再次编译spark.官网地址:http://spark.apache.org/docs/1.5.0/building-spark.html。他默认1.5.0使用是scala2.10进行编译,但是我安装的scala是2.11所以使用了以下命令。
./dev/change-scala-version.sh 2.11
mvn -Pyarn -Phadoop-2.4 -Dscala-2.11 -DskipTests clean package
这次编译的spark-assembly-1.5.0-hadoop2.6.0.jar 包有140mb左右比上次的多了40mb,感觉有点靠谱了,将这个包移过去,ok了!太开心了,一切都跑起来了。泪奔了,hive官网害人呀。
第四个坑,这个坑也算一个不大不小的坑,因为我偶然想装一下hue,在装hue遇到的错误,现在记录一下。
首先坑是hadoop的坑,如果在hadoop core-site.xml下面没有配置
<property>
<name>hadoop.proxyuser.hdfs.hosts</name>
<value>*</value>
<description>Defines the Unix user, hdfs, that will run the HttpFS server as
a proxyuser.</description>
</property>
<property>
<name>hadoop.proxyuser.hdfs.groups</name>
<value>*</value>
<description>Replaces hdfs with the Unix user that will start the HttpFS server.
</description>
</property>
httpfs-site.xml
<property>
<name>hadoop.proxyuser.hue.hosts</name>
<value>*</value>
</property>
<property>
<name>hadoop.proxyuser.hue.groups</name>
<value>*</value>
</property>
hdfs-site.xml
<property>
<name>dfs.webhdfs.enabled</name>
<value>true</value>
</property>
这三个配置没配好的你讲没有权限访问hadoop,但是这个都是小事情,网上教程多,不怎么算坑。
接下来hive配置才是一个不大不小的坑,因为网上基本没有什么资料,对应版本是hive是2.0.1
网上基本的版本都教了怎么连接,但是用网上连接方法hive.log老是显示 old version ? 我一直以为我hive版本过高了,但是换成1.2.1这个版本一样错误。
于是又开始看google,看的又快奔溃了。开始网上有人叫把hive.server2.authentication这个属性改为NOSASL,但是改来改去没啥卵用,好了我就不卖关子了,
hue要连接hive其实还需要修改两个属性
第一个属性是hive.server2.authentication 这个要是NOSASl
第二个属性是hive.server2.enable.doAs 一定要是flase 不然就会报 old version?
看到可视化界面的时候还是有点成就感的。
第五个坑,装好了那么多东西,肯定想跑跑试试,于是觉得对nginx 日志进行分析,这时候对网上hive 分析 nginx进行了搜索,搜了一大堆,但是按他们的正则建表都不可以用,又开始泪奔了。
不停百度,资料结果全是千篇一律,好像大家抄的都是一篇。结果还是找呀找,终于找到原因了
原来正则必须不是一根斜杠,原来java必须是两根\\把我建表sql展示一下,不然还是太空了。其中不需要out那一行,直接用input就行
create table logs(ipaddress STRING,identity STRING,`user` STRING,time STRING,request STRING,status STRING,size STRING,host STRING,referer STRING,rbody STRING,agent STRING,forwarded STRING,uaddr STRING,ustatus STRING,urtime STRING,rtime STRING)ROW FORMAT SERDE 'org.apache.hadoop.hive.contrib.serde2.RegexSerDe' WITH SERDEPROPERTIES ('input.regex' =
'([0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}) (-) (-) (\\[.*\\]) (\\"[^\\"]*\\") (\\d{3}) (\\d{1,}) (\\"[^\\"]*\\") (\\"[^\\"]*\") (-|[^\\s]*) (\\"[^\\"]*\\") (\\"[^\\"]*\\") ([0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}:[0-9]{1,5}) (\\d{3}) ([\\d]{1,}\\.[\\d]{1,}) ([\\d]{1,}\\.[\\d]{1,})')
接下来可以跑了,扔了一个sql,你妹又报错了
return code 3 from org.apache.hadoop.hive.ql.exec.spark.SparkTask
这个坑不算大,因为通过查找hive,spark日志发现原来spark找不到org.apache.hadoop.hive.contrib.serde2.RegexSerDe
这个网上解决方法就多了,就是加上hive.aux.jars.path 这个属性里面你这个jar包地址如果是本地的记住前面要加file://哦不然找不到
好了这是安装hive on spark 遇到的一些坑,希望我的资料能对需要的人有些帮助吧。个人总结:遇到不会的别看网上的文章了,全是千篇一律,还是看官网的资料跟官网论坛,比看那些安装篇强上太多。