基于Spark 2.0.0搭建Hive on Spark环境
来源:互联网 发布:防小三软件 编辑:程序博客网 时间:2024/04/29 00:53
一、运行环境
CentOS 7.2
Hadoop 2.7
Hive 2.2.0
Spark 2.0.0
JDK 1.7
Scala 2.11.8
Maven 3.3.9
说明:Scala 2.11.8以后的版本只支持JDK1.8,如果环境原本是使用JDK1.7的就不需要安装最新版本。
二、开始配置前的排坑
很多人都会参考Hive on spark的官方手册https://cwiki.apache.org//confluence/display/Hive/Hive+on+Spark:+Getting+Started来配置,但其中还是有很多坑的,下面就说一下官方手册上的坑及没有提到一些细节。
1)版本兼容问题
HIVE官方指引说Spark一定要安装没有HIVE jar包的版本。原文“Note that you must have a version of Spark which does not include the Hive jars.”除此之外就没有其他的说明了。但实际情况是HIVE最新发布版2.1.1(截止我写这篇博客的时间点官网上的下载页面最新版本)是没办法运行在Spark2.0.0之上的,强行运行的话会出现java.lang.ClassNotFoundException: org.apache.spark.JavaSparkListener的错误。原因是由于从Spark2.0.0开始JavaSparkListener已移除,改为了SparkListener。
如果想使用Hive2.X版本搭配Spark2.X版本的话可以使用Hive-14029的修复版本:
https://github.com/apache/hive/pull/103/commits/f14f5a6d0d255d52e99ecbf5a232706cb1f63142
Hive对应的Spark版本可根据源码目录中的pom.xml的<spark.version>确认。
2)spark编译时scala版本需要更改
官方指引的编译命令
./dev/make-distribution.sh --name "hadoop2-without-hive" --tgz "-Pyarn,hadoop-provided,hadoop-2.7,parquet-provided"根据spark官方指引实际操作的编译命令
./dev/change-scala-version.sh 2.11./dev/make-distribution.sh --name "hadoop2-without-hive" --tgz "-Pyarn,hadoop-provided,hadoop-2.7,parquet-provided,-Dscala-2.11"
3)启动Hive时java.lang.NoClassDefFoundError: org/slf4j/Logger错误
原因是没有导入hadoop的jar包,在spark-env.sh加入下面的变量即可:
export SPARK_DIST_CLASSPATH=$(hadoop classpath)
4)Spark on Yarn不需要启动spark集群
官方手册原文是在编译后就要求启动spark集群——“Start Spark cluster”,但这种用是要配置master和worker的,有点像配置resourcemanager和nodemanager。而实际上如果是Spark on Yarn则不需要配置也不需要启动spark集群。Spark会自动读取Yarn配置文件,如果不是用了Spark on Yarn,那在Yarn的webUI上是看不到Spark任务的。
Spark on Yarn需要在spark-env.sh加入下面的变量
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoopexport YARN_CONF_DIR=$HADOOP_HOME/etc/hadoop
5)Hive的spark.master参数
官方手册上说spark.master参数是<Spark Master URL>,没有详细地说明,像我这样的新手很容易犯晕,spark官方文档上有详细解释http://spark.apache.org/docs/latest/submitting-applications.html#master-urls
三、配置过程
1)编译spark和hive
安装scala和maven配置maven运行参数export MAVEN_OPTS="-Xmx2g -XX:ReservedCodeCacheSize=512m -XX:MaxPermSize=512m"编译spark./dev/change-scala-version.sh 2.11./dev/make-distribution.sh --name "hadoop2-without-hive" --tgz "-Pyarn,hadoop-provided,hadoop-2.7,parquet-provided,-Dscala-2.11"编译hivemvn clean package -Pdist -Dmaven.test.skip=true
3)在hive-site.xml中加入
<property> <name>spark.yarn.jars</name> <value>hdfs://xxxx:9000/spark-jars/*</value></property>并把SPARK_HOME/jars下所有jar包复制到此目录下
4)在spark-env.sh中加入
export SPARK_DIST_CLASSPATH=$(hadoop classpath)export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoopexport YARN_CONF_DIR=$HADOOP_HOME/etc/hadoop
5)启动HIVE,配置参数
set hive.execution.engine=spark;set spark.master=yarn;set spark.submit.deployMode=client;set spark.eventLog.enabled=true;set spark.eventLog.dir=hdfs://xxxx:9000/spark-logs;set spark.executor.memory=1024m;set spark.serializer=org.apache.spark.serializer.KryoSerializer;这些参数可以配置在hive-site.xml或spark-defaults.conf中。
6)执行SQL,完成
四、说在最后
本文只是为了记录自己搭建Hive 2.2 on Spark 2.0.0时遇到的一些问题和解决步骤,因为当时网上没有什么现成资料所以走了不少弯路,希望此文能帮助和我遇到同样问题的人。关于性能调优还请参考spark官方手册或者网上其他资料,如有错误欢迎指正。
- 基于Spark 2.0.0搭建Hive on Spark环境
- hive on spark 环境搭建
- Hive on Spark运行环境搭建
- 搭建Hive On Spark
- spark学习十二 hive on spark 环境搭建及测试
- Linux搭建Hive On Spark环境(spark-1.6.3-without-hive+hadoop2.8.0+hive2.1.1)
- spark on hive原理与环境搭建 spark研习第三季
- Spark On Yarn环境搭建
- Spark 连接Hive分布式环境搭建
- Mac下hive, spark环境搭建
- hive on spark部署
- 试用Hive on Spark
- spark on hive 总结
- hive on spark demo
- hive on spark 编译
- spark on hive
- Hive on Spark解析
- Hive on Spark:起点
- Elasticsearch 5.3.0 离线安装
- 【经典】C语言字符串函数原型
- java学习第二十五天之模拟服务器、反射、使用URL对象
- PHPmyadmin漏洞和拿shell
- Eclipse将引用了第三方jar包的Java项目打包成jar文件的两种方法
- 基于Spark 2.0.0搭建Hive on Spark环境
- 密码脱落
- Linux open(), close()
- pl/sql报错:Identifier is too long
- EXCEL排序 HDU
- 正方形(squares,UVa201)
- Spring MVC 向页面传值-Map、Model和ModelMap
- 自定义状态栏
- 蓝桥杯----拼音字母