一、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安装成功

spark on hive搭建 spark on 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配置。本文档限本人经验及知识有限,如有不妥的地方还望指出,多多交流。