阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

基于Spark 2.0.0搭建Hive on Spark环境

168次阅读
没有评论

共计 3593 个字符,预计需要花费 9 分钟才能阅读完成。

一、运行环境

  • 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/hadoop
export 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 05.

./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”

编译 hive

mvn clean package -Pdist -Dmaven.test.skip=true

2)把 SPARK_HOME/jars 下的 spark-* 和 scala-* 的 jar 包软连接或拷到 HIVE_HOME/lib 下

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/hadoop
export 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 相关教程见以下内容

CentOS 7.0 下安装并配置 Spark  http://www.linuxidc.com/Linux/2015-08/122284.htm

Spark1.0.0 部署指南 http://www.linuxidc.com/Linux/2014-07/104304.htm

Spark2.0 安装配置文档  http://www.linuxidc.com/Linux/2016-09/135352.htm

Spark 1.5、Hadoop 2.7 集群环境搭建  http://www.linuxidc.com/Linux/2016-09/135067.htm

Spark 官方文档 – 中文翻译  http://www.linuxidc.com/Linux/2016-04/130621.htm

CentOS 6.2(64 位)下安装 Spark0.8.0 详细记录 http://www.linuxidc.com/Linux/2014-06/102583.htm

Spark2.0.2 Hadoop2.6.4 全分布式配置详解 http://www.linuxidc.com/Linux/2016-11/137367.htm

Ubuntu 14.04 LTS 安装 Spark 1.6.0(伪分布式)http://www.linuxidc.com/Linux/2016-03/129068.htm

Spark 的详细介绍:请点这里
Spark 的下载地址:请点这里

本文永久更新链接地址:http://www.linuxidc.com/Linux/2017-04/142575.htm

正文完
星哥说事-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-21发表,共计3593字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中