Hive on Spark && Spark on Hive配置

Hive on Spark && Spark on Hive配置


目录

  • [Hive on Spark && Spark on Hive配置](#Hive on Spark && Spark on Hive配置)
  • Spark官网
  • [Hive on Spark配置](#Hive on Spark配置)
  • [Spark on Hive配置](#Spark on Hive配置)

Spark官网

☞官网下载链接

Hive on Spark配置

由于默认的引擎是MapRduce,在任务执行过程中由Hive解析元数据,然后把sql翻译成MapReduce任务,此时这个运行效率是非常慢的,因为要落盘,有大量的IO操作,但是好处就是不会出现OOM问题,处理非常大的数据是可以用它的。Hive中集成Spark,Hive既作为元数据存储,又负责解析HQL语句,只是将Hive的引擎改为Spark,由Spark负责运算工作,Spak计算是基于内存的效率较高,但要注意内存配置,数据量的时候容器出现OOM问题。

具体配置

  1. 去官网下载Spark,解压安装(这个是带有Hadoop依赖的,非纯净版)

  2. 配置环境变量

    shell 复制代码
    export SPARK_HOME=/opt/module/spark
    export PATH=$PATH:$SPARK_HOME/bin:$SPARK_HOME/sbin
  3. 进入Hive的conf文件中,新建spark-defaults.conf,添加以下内容

    shell 复制代码
    spark.master=yarn
    spark.eventLog.enabled=true
    spark.eventLog.dir=hdfs://hadoop102:8020/spark/history-logDir
    spark.executor.memory=2g
    spark.driver.memory=2g
    spark.memory.offHeap.enabled=true
    spark.memory.offHeap.size=1g
    spark.driver.extraLibraryPath=/opt/module/hadoop-3.1.3/lib/native
    spark.executor.extraLibraryPath=/opt/module/hadoop-3.1.3/lib/native
  4. 在HDFS上面创建目录

    shell 复制代码
    hdfs dfs -mkdir -p /spark
    hdfs dfs -mkdir -p /spark/history-logDir
    hdfs dfs -mkdir -p /spark/jars
  5. 在Hive的hive-site.xml添加以下配置

    xml 复制代码
    <!--Spark依赖位置(注意:端口号8020必须和namenode的端口号一致)-->
    <property>
    	<name>spark.yarn.jars</name>
    	<value>hdfs://hadoop102:8020/spark/jars/*</value>	
    </property>
    
    <!--Hive执行引擎指定为Spark-->
    <property>
    	<name>hive.execution.engine</name>
    	<value>spark</value>
    </property>
    
    <!--Hive和Spark连接超时时间-->
    <property>
    	<name>hive.spark.client.connect.timeout</name>
    	<value>10000ms</value>
    </property>
  6. 在Spark的conf目录spark-env.sh文件中添加以下内容

    shell 复制代码
    export SPARK_DIST_CLASSPATH=$(hadoop classpath)
  7. 去官网下载Spark纯净版的安装包,把里面的jars目录下的所有文件,上传到刚刚HDFS创建的jars目录

  8. 测试:进入Hive客户端,创建一张测试表,通过insert测试是否以Spark执行

Spark on Hive配置

Spark on Hive是共用Hive中的元数据,由Spark来解析与执行sql语句,而且Spark提供了更灵活的编程接口,适用于各种数据处理需求,性能高于Hive on Spark。

  1. 把Hive中的hive-site.xml拷贝到Spark的conf目录下

  2. 然后添加以下内容,如果hive-site.xml包含以下配置,可不做修改,一定要确保Hive中的hive-site.xml文件也配置了开启元数据访问

    xml 复制代码
    <?xml version="1.0"?>
    <?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
    <configuration>
    <!--Spark读取表的位置-->
        <property>
                <name>hive.metastore.warehouse.dir</name>
                <value>/user/hive/warehouse</value>
        </property>
    <!--Spark读取Hive元数据-->
        <property>
                <name>hive.metastore.uris</name>
                <value>thrift://hadoop102:9083</value>
        </property>
    </configuration>
  3. 将对应版本的mysql的驱动拷贝到Spark的jars目录下

    shell 复制代码
    cp /opt/module/hive-3.1.2/lib/mysql-connector-java-8.0.17.jar /opt/module/spark-3.0.0-with-hadoop/jars/
  4. 启动Hive的MetaStore(元数据)服务

    shell 复制代码
    nohup hive --service metastore 1> /opt/moule/hive-3.1.2/logs/metastore.log 2>&1 &
  5. 然后启动spark-shell测试

    shell 复制代码
    scala> spark.sql("show databases").show();
    +---------+
    |namespace|
    +---------+
    |  default|
    |      gxc|
    |     test|
    +---------+
  6. 如果spark-shell里面查询数据出现中文乱码,则在Spark的conf目录中的spark-default.conf中添加以下配置

    shell 复制代码
    spark.driver.extraJavaOptions -Dfile.encoding=UTF-8
    spark.executor.extraJavaOptions -Dfile.encoding=UTF-8
  7. 到此结束

相关推荐
每日学点SEO26 分钟前
「网站新页面冲进前10名成功率下降69%」:2025 年SEO竞争格局分析
大数据·数据库·人工智能·搜索引擎·chatgpt
写代码的【黑咖啡】1 小时前
大数据建模中的模型
大数据
ljh5746491192 小时前
大数据geo是什么意思
大数据·人工智能
闲人编程2 小时前
环境配置管理与敏感信息保护
大数据·生命周期·环境配置·加密算法·codecapsule·敏感信息保护
珠海西格电力2 小时前
零碳园区应急能源基础架构规划:备用电源与清洁能源联动配置
大数据·运维·人工智能·物联网·能源
Elastic 中国社区官方博客2 小时前
开始使用 Elastic Agent Builder 和 Strands Agents SDK
大数据·人工智能·elasticsearch·搜索引擎·ai·全文检索
说私域2 小时前
不同类型企业构建私域流量的必要性及定制开发AI智能名片商城小程序的应用
大数据·人工智能·小程序
专业开发者2 小时前
蓝牙 ® 技术正逐步在未来的智慧城市中站稳脚跟。
大数据·人工智能·智慧城市
小技工丨3 小时前
【01】Apache Flink 2025年技术现状与发展趋势
大数据·flink·apache
梦里不知身是客113 小时前
flink的反压查看火焰图
大数据·flink