当前位置:   article > 正文

详解Hive on Spark配置

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 SparkSpark on Hive
语法HQLSpark SQL
引擎SparkSpark
存储HiveHive

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
    
    • 1
    • 2
    • 3
    • 4
    • 5

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

    hadoop fs -mkdir /spark-history
    
    • 1
  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
      
      • 1
    • 上传Spark纯净版jar包到HDFS

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

    添加如下内容

    <!--Spark依赖位置(注意:端口号8020必须和namenode的端口号一致)-->
    <property>
        <name>spark.yarn.jars</name>
        <value>hdfs://hadoop102:8020/spark-jars/*</value>
    </property>
      
    <!--Hive执行引擎-->
    <property>
        <name>hive.execution.engine</name>
        <value>spark</value>
    </property>
    
    <!--Hive和Spark连接超时时间-->
    <property>
        <name>hive.spark.client.connect.timeout</name>
        <value>10000ms</value>
    </property>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    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
    
    • 1

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

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

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

在这里插入图片描述

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/繁依Fanyi0/article/detail/634587
推荐阅读
相关标签
  

闽ICP备14008679号