详解Hive on Spark配置

Hive on Spark配置

Hive引擎默认的是MapReduce,就是没执行一个Hive语句,其实都是运行了一个MR程序,都知道的,MR虽好,但是慢呢。所以在时代的驱使下,就出现了把Hive的引擎更换的需要,通常Hive的引擎还有tez、Spark。我们经常听到Hive on Spark和Spark on Hive,不明所以的小伙伴还会以为这两个是倒装句,其实不然,Hive on Spark 和 Spark on Hive有着很大的区别

Hive on Spark:直译就是把Hive 放到 Spark上,意思就是把Hive的引擎改为Spark,Hive既作为存储元数据又负责SQL的解析优化,语法是HQL语法,执行引擎变成了Spark,Spark负责采用RDD执行

Spark on Hive:直译就是把Spark放到Hive上,就是将Spark处理的数据放在Hive上,Hive只作为存储元数据,Spark负责SQL解析优化,语法是Spark SQL语法,Spark负责采用RDD执行

Hive on Spark Spark on Hive
语法 HQL Spark SQL
引擎 Spark Spark
存储 Hive Hive

Hive on Spark的配置

兼容性说明

官网下载之后的Hive3.1.2和Spark3.0.0是不兼容的,Hive3.1.2支持的Spark版本是2.4.5,所以需要重新编译Hive才能和Spark3.0.0兼容。或者选择Spark2.4.5版本,当然了,选择Spark2.4.5是不可能的,虽然省事,但是我们都不怕麻烦

编译过程也很简单,是的,也很简单简单简单,只需要去官网下载Hive3.1.2的源码,然后再pom文件中将Spark的引用版本改为3.0.0就可以,如果编译通过,直接打成jar包,是不是很简单。但是如果不通过,那就根据报错信息修改,直到不报错,然后达成jar包,确实很简单吧-~-

配置

  1. 上传解压saprk-3.0.0-hadoop-bin-3.2.tgz,具体tar包啥名字记不清了,大概长这个样子吧

  2. 配置SPARK_HOME环境变量

  3. 在hive的配置文件目录下新建spark的配置文件,添加以下内容

    spark.master                               yarn
    spark.eventLog.enabled                   true
    spark.eventLog.dir                        hdfs://hadoop102:8020/spark-history
    spark.executor.memory                    1g
    spark.driver.memory					   1g
    

    根据配置文件设置的历史目录,在hdfs上新建相应的目录

    hadoop fs -mkdir /spark-history
    
  4. 向HDFS上传Spark纯净版jar包

    由于Spark3.0.0非纯净版默认支持的是hive2.3.7版本,直接使用会和安装的Hive3.1.2出现兼容性问题。所以采用Spark纯净版jar包,不包含hadoop和hive相关依赖,避免冲突。

    Hive任务最终由Spark来执行,Spark任务资源分配由Yarn来调度,该任务有可能被分配到集群的任何一个节点。所以需要将Spark的依赖上传到HDFS集群路径,这样集群中任何一个节点都能获取到

    • 上传并解压spark-3.0.0-bin-without-hadoop.tgz

      tar -zxvf /opt/software/spark-3.0.0-bin-without-hadoop.tgz
      
    • 上传Spark纯净版jar包到HDFS

      hadoop fs -mkdir /spark-jars
      hadoop fs -put spark-3.0.0-bin-without-hadoop/jars/* /spark-jars
      
  5. 修改hive-site.xml文件

    添加如下内容

    
    <property>
        <name>spark.yarn.jarsname>
        <value>hdfs://hadoop102:8020/spark-jars/*value>
    property>
      
    
    <property>
        <name>hive.execution.enginename>
        <value>sparkvalue>
    property>
    
    
    <property>
        <name>hive.spark.client.connect.timeoutname>
        <value>10000msvalue>
    property>
    

    hive.spark.client.connect.timeout的默认值是1000ms

    如果在执行hive的insert语句中出现以下异常,就可以把这个参数调大一点

    FAILED: SemanticException Failed to get a spark session: org.apache.hadoop.hive.ql.metadata.HiveException: Failed to create Spark client for Spark session d9e0224c-3d14-4bf4-95bc-ee3ec56df48e
    

到这里,Hive on Spark就已经配置完了,可以进行测试,看是否配置成功

启动客户端之后,插入一条数据

hive (default)> insert into table student values(1,'abc');

详解Hive on Spark配置_第1张图片

结果如上所示,就是配置成功

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