一、Hive安装(以Hive2.1.1为例,安装在/usr/local/apache-hive-2.1.1-bin目录下)
1.官方下载预安装hive版本安装包apache-hive-2.1.1-bin.tar.gz
2.解压安装包到安装目录,具体指令:
tar –zxvf apache-hive-2.1.1-bin.tar.gz –C /usr/local/apache-hive-2.1.1-bin
3.进入安装目录,并从模版配置文件创建hive启动的配置文件,具体操作如下:
cd /usr/local/apache-hive-2.1.1-bin
cd /usr/local/apache-hive-2.1.1-bin/conf
cp beeline-log4j2.properties.template beeline-log4j2.properties
cp hive-default.xml.template hive-site.xml
cp hive-env.sh.template hive-env.sh
cp hive-exec-log4j2.properties.template hive-exec-log4j2.properties
cp hive-log4j2.properties.template hive-log4j2.properties
cp llap-cli-log4j2.properties.template llap-cli-log4j2.properties cp llap-daemon-log4j2.properties.template llap-daemon-log4j2.properties
4.复制存储hive元数据数据库mysql驱动包到hive/lib下,具体操作如下:
cp mysql-connector-java-5.1.39-bin.jar /usr/local/apache-hive-2.1.1-bin/lib
5.修改相应配置文件,具体修改如下:
hive-env.xml配置:
#配置hadoop安装目录,以实际安装情况为准
HADOOP_HOME=/usr/local/hadoop-2.6.4
#导入hive配置目录,以实际安装情况为准
export HIVE_CONF_DIR=/usr/local/apache-hive-2.1.1-bin/conf
#导入hive启动外部lib,可不配置
export HIVE_AUX_JARS_PATH=/yourDir
hive-exec-log4j2.properties配置:
#修改日志目录,可不配置
property.hive.log.dir = /yourDir
#修改日志文件名,可不配置
property.hive.log.file = yourFileName.log
hive-log4j2.properties配置:
#修改日志输出目录,可不配置
property.hive.log.dir = /yourDir
#修改日志输出文件名,可不配置
property.hive.log.file = /yourFileName
llap-cli-log4j2.properties配置:
#修改日志输出目录,可不配置
property.hive.log.dir = /yourDir
#修改日志输出文件名,可不配置
property.hive.log.file = yourFileName
llap-daemon-log4j2.properties配置:
#修改日志输出目录,可不配置
property.llap.daemon.log.dir = /yourDir #修改日志输出文件名,可不配置
property.llap.daemon.log.file = yourFileName
hive-site.xml配置:
<property>
<name>hive.exec.scratchdir</name>
<value>/data/hive/scratch</value>
</property>
<property>
<name>hive.exec.local.scratchdir</name>
<value>/data/hive/scratch</value>
</property>
<property>
<name>hive.downloaded.resources.dir</name>
<value>/data/hive/resources/${hive.session.id}_resources</value>
</property>
<property>
<name>hive.server2.logging.operation.log.location</name>
<value>/data/hive/operation_logs</value>
</property>
<property>
<name>hive.metastore.warehouse.dir</name>
<value>/data/hive/warehouse</value>
</property>
<property>
<name>hive.querylog.location</name>
<value>/data/hive/logs</value>
</property>
<property>
<name>hive.service.metrics.file.location</name>
<value>/data/hive/metrics/report.json</value>
</property>
<property>
<name>hive.user.install.directory</name>
<value>/usr/local/apache-hive-2.1.1-bin</value>
</property>
<property>
<name>hive.llap.io.allocator.mmap.path</name>
<value>/data/hive/mmap</value>
</property>
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://hosts:3306/hive?characterEncoding=UTF-8&createDatabaseIfNotExist=true</value>
</property>
<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>com.mysql.jdbc.Driver</value>
</property>
<property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>yourusername</value>
</property>
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>yourpassword</value> </property>
6.环境变量配置:修改/etc/profile文件,追加hive相关环境变量,具体操作如下:
vim /etc/profile,添加如下内容:
export HIVE_HOME=/usr/local/apache-hive-2.1.1-bin
export PATH=$PATH:$HIVE_HOME/bin:$HIVE_HOME/conf source /etc/profile
7.Hive初始化,执行Hive初始化命令,具体操作如下:
schematool -dbType mysql -initSchema
8.启动hive,可以看到类似如下信息则代表hive安装成功
注:上述配置只是一些基础和必要以及常用的一些配置,具体的性能优化或者涉及到hive on spark和hive access to hbase等功能时还需要额外的配置。Hive安装除了使用mysql存储元数据外,还可使用oracle,pgsql等其他数据库,上述安装使用的是mysql,这个可以根据实际情况来定。
二、Hive On Spark配置
1.选择Hive与Hive相对应的Spark版本,目前比较匹配的版本如下:
a. Hive-1.2与Spark 1.3
b. Hive-2.1与Spark 1.6
c. Hive-2.1与Spark 2.X(待验证)
由于Hive-1.2对Spark1.3支持比较好,对与其他Spark版本支持有待验证,本例使用Hive-2.1.1与Spark 1.6.3版本安装,主要考虑到Spark环境已经搭建好,短期内不会升级以及Hive-2.1.1本身就支持Spark1.6.3。在安装过程中尝试过使用Hive-1.2.1与Spark 1.6.3但安装完Hive后,运行Hive On Spark总出现各种错误,结合官网建议及Google或者百度查找问题解决方案,但都没有解决问题,最好还是放弃了。
2.编译Spark 1.6.3源码,并将编译好后的源码包拷贝到Hive lib下,具体操作如下:
a.下载spark 1.6.3 源码
b.编译源码
./make-distribution.sh --name "hadoop2-without-hive" --tgz "-Pyarn,hadoop-2.6,parquet-provided"
c.解压编译好的源码包spark-1.6.3-bin-hadoop2-without-hive.tgz
tar –zxvf spark-1.6.3-bin-hadoop2-without-hive.tgz
d.拷贝spark-1.6.3-bin-hadoop2-without-hive/lib/下的Spark包到Hive/lib下
cd /data/spark-source/spark-1.6.3-bin-hadoop2-without-hive/lib
cp spark-assembly-1.6.3-hadoop2.6.0.jar /usr/local/apache-hive-2.1.1-bin/lib
3.修改hive-site.xml文件,新增或者修改spark相关配置,具体常用配置如下:
<!—设置hive执行engine-->
<property>
<name>hive.execution.engine</name>
<value>spark</value>
</property>
<!—设置spark master-->
<property>
<name>spark.master</name>
<value>yarn-cluster</value>
</property>
<!—设置eventlog enabled-->
<property>
<name>spark.enentLog.enabled</name>
<value>true</value>
</property>
<!—设置eventlog dir-->
<property>
<name>spark.enentLog.dir</name>
<value>hdfs://namenodehosts:9000/data/log/spark-log</value>
</property>
<!—设置spark序列化类-->
<property>
<name>spark.serializer</name>
<value>org.apache.spark.serializer.KryoSerializer</value>
</property>
<!—设置executor执行内存-->
<property>
<name>spark.executor.memeory</name>
<value>1600m</value>
</property>
<!—设置spark driver 内存-->
<property>
<name>spark.driver.memeory</name>
<value>2g</value>
</property>
<!—设置打印gc详细信息-->
<property>
<name>spark.executor.extraJavaOptions</name>
<value>-XX:+PrintGCDetails -Dkey=value -Dnumbers="one two three"</value>
</property>
<!—缓存hive on spark运行jar,避免每次启动spark engine都上次jar包到hdfs—x`>
<property>
<name>spark.yarn.jar</name>
<value>hdfs://namenodehosts:9000/data/lib/hive/spark-assembly-1.6.3-hadoop2.6.0.jar</value>
</property>
<!—设置hive schema 认证如果设置为true即严格认证,需要初始化derby数据库-->
<!-- schematool -dbType derby -initSchema-->
<!—但spark内使用derby保存元数据而hive使用mysql保存元数据,故为了彼此兼容将hive.metastore.schema.verification 设为 false-->
<property>
<name>hive.metastore.schema.verification</name>
<value>false</value> </property>
注:有关 hive.metastore.schema.verification 版本检查的问题,有两个解决办法
1. 将 hive.metastore.schema.verification 设为false
mysql
三、Spark On Hive 配置
1.运行Spark On Hive程序需要依赖datanucleus-api-jdo-3.2.6.jar, datanucleus-core-3.2.10.jar, datanucleus-rdbms-3.2.9.jar, mysql-connector-java-5.1.39-bin.jar等jar包及hive-site.xml配置文件,故启动Spark On Hive 程序时,可以在spark-submit提交命令时,指定--jars ….jar以及指定--files /usr/local/apache-hive-2.1.1-bin/conf/hive-site.xml的方式来添加依赖
2.指定Spark运行额外lib来避免每次运行Spark On Hive都需要指定jars带来的苦恼,具体操作如下:
a.修改每个spark节点spark-defaults.conf配置,新增spark执行额外lib配置
spark.executor.extraClassPath=/usr/local/spark-1.6.3-bin-hadoop2.6/extralib/*
spark.driver.extraClassPath=/usr/local/spark-1.6.3-bin-hadoop2.6/extralib/*
b.复制上述jar包到每个spark节点/usr/local/spark-1.6.3-bin-hadoop2.6/extralib/目录下。
注:Spark On Hive运行时依赖的jar包除mysql驱动包外其余包是hive-1.2.1/lib下的 datanucleus-api-jdo-3.2.6.jar, datanucleus-core-3.2.10.jar, datanucleus-rdbms-3.2.9.jar等,而不是hive2.1.1/lib下的 datanucleus-api-jdo-4.2.1.jar, datanucleus-core-4.1.6.jar, datanucleus-rdbms-4.1.7.jar等jar包,因为Spark On Hive使用spark1.6.3版本时,spark本身支持的是hive-1.2.1,具体可以查看spark1.6.3源码下的pom.xml。
总结:Spark On Hive或者Hive On Spark的主要问题在于版本的兼容性问题,配置Hive On Spark时必须以Hive版本为主,即需要安装与Hive对应的版本,这个可以从hive源码pom.xml中找到,但通过这种方式找到的spark版本,其内部使用的hive版本又往往不是你欲安装的hive版本,这个可以从spark源码pom.xml中查看,为了解决这个问题,让彼此兼容,可以修改hive-site.xml中hive.metastore.schema.verification=false配置。本文档限本人经验及知识有限,如有不妥的地方还望指出,多多交流。