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. 到此结束

相关推荐
独自归家的兔19 小时前
从 “局部凑活“ 到 “全局最优“:AI 规划能力的技术突破与产业落地实践
大数据·人工智能
海域云-罗鹏19 小时前
国内公司与英国总部数据中心/ERP系统互连,SD-WAN专线实操指南
大数据·数据库·人工智能
策知道20 小时前
依托政府工作报告准备省考【经验贴】
大数据·数据库·人工智能·搜索引擎·政务
Henry-SAP20 小时前
SAP(ERP) 组织结构业务视角解析
大数据·人工智能·sap·erp·sap pp
TracyCoder1231 天前
ElasticSearch内存管理与操作系统(一):内存分配底层原理
大数据·elasticsearch·搜索引擎
cd_949217211 天前
九昆仑低碳科技:所罗门群岛全国森林碳汇项目开发合作白皮书
大数据·人工智能·科技
Acrelhuang1 天前
工商业用电成本高?安科瑞液冷储能一体机一站式解供能难题-安科瑞黄安南
大数据·开发语言·人工智能·物联网·安全
小王毕业啦1 天前
2010-2024年 非常规高技能劳动力(+文献)
大数据·人工智能·数据挖掘·数据分析·数据统计·社科数据·经管数据
言無咎1 天前
从规则引擎到任务规划:AI Agent 重构跨境财税复杂账务处理体系
大数据·人工智能·python·重构
张小凡vip1 天前
数据挖掘(十)---python操作Spark常用命令
python·数据挖掘·spark