Hive on Spark及Spark on Hive实践

一、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配置:
 
     hive.exec.scratchdir
     /data/hive/scratch
 

 
      hive.exec.local.scratchdir
      /data/hive/scratch
 

 
      hive.downloaded.resources.dir
      /data/hive/resources/${hive.session.id}_resources
 

 
      hive.server2.logging.operation.log.location
      /data/hive/operation_logs
 

 
      hive.metastore.warehouse.dir 
      /data/hive/warehouse
 

 
      hive.querylog.location
      /data/hive/logs
 

 
      hive.service.metrics.file.location
      /data/hive/metrics/report.json
 

 
      hive.user.install.directory
      /usr/local/apache-hive-2.1.1-bin
 

 
      hive.llap.io.allocator.mmap.path
      /data/hive/mmap
 

 
       javax.jdo.option.ConnectionURL    
       jdbc:mysql://hosts:3306/hive?characterEncoding=UTF-8&createDatabaseIfNotExist=true
 

 
      javax.jdo.option.ConnectionDriverName
      com.mysql.jdbc.Driver
 

 
      javax.jdo.option.ConnectionUserName
      yourusername
 

 
      javax.jdo.option.ConnectionPassword
      yourpassword

 

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及Spark on Hive实践_第1张图片

注:上述配置只是一些基础和必要以及常用的一些配置,具体的性能优化或者涉及到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.execution.engine
       spark
    

    
    
      spark.master
      yarn-cluster
    

    
    
      spark.enentLog.enabled
      true
    

    
    
      spark.enentLog.dir
      hdfs://namenodehosts:9000/data/log/spark-log
    

    
    
      spark.serializer
      org.apache.spark.serializer.KryoSerializer
    

    
    
      spark.executor.memeory
      1600m
    

    
    
      spark.driver.memeory
      2g
    

    
    
      spark.executor.extraJavaOptions
      -XX:+PrintGCDetails -Dkey=value -Dnumbers="one two three"
    

    
    
      spark.yarn.jar  
      hdfs://namenodehosts:9000/data/lib/hive/spark-assembly-1.6.3-hadoop2.6.0.jar
    

    
    
    
    
        hive.metastore.schema.verification
        false

    

注:有关 hive.metastore.schema.verification 版本检查的问题,有两个解决办法

    1. 将 hive.metastore.schema.verification 设为false

    2. 不改配置,先初始化好数据,执行初始化命令:schematool -dbType mysql  –initSchema

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







    











你可能感兴趣的:(hive,spark)