1. 首页 > Hadoop教程 > 正文

大数据教程FG043-Hive与Spark集成实战

内容简介:本文详细介绍Hive与Spark集成的核心方法与生产实战应用。风哥教程参考Hive官方文档Spark Integration、Spark on Hive等内容,涵盖Spark SQL访问Hive表、Hive on Spark配置、数据共享与互操作等核心知识点,结合生产环境实际案例,帮助读者掌握Hive与Spark深度集成的实战技能。

目录大纲

Part01-基础概念与理论知识
  1.1 Hive与Spark集成概述
  1.2 集成模式对比
  1.3 元数据共享机制
Part02-生产环境规划与建议
  2.1 环境配置规划
  2.2 资源调度策略
  2.3 性能优化建议
Part03-生产环境项目实施方案
  3.1 Spark SQL访问Hive
  3.2 Hive on Spark配置
  3.3 数据互操作实战
Part04-生产案例与实战讲解
  4.1 Spark处理Hive数据案例
  4.2 混合计算案例
  4.3 数据迁移案例
Part05-风哥经验总结与分享
  5.1 集成最佳实践
  5.2 常见问题与解决方案
  5.3 生产环境注意事项

Part01-基础概念与理论知识

1.1 Hive与Spark集成概述

Hive与Spark的集成可以实现两者的优势互补,Spark提供更快的计算引擎,Hive提供完善的元数据管理。更多视频教程www.fgedu.net.cn

集成的优势:

1. 统一元数据管理,共享表结构
2. Spark计算性能优于MapReduce
3. 支持SQL和代码混合开发
4. 统一数据访问入口

1.2 集成模式对比

Hive与Spark有两种主要集成模式:学习交流加群风哥微信: itpux-com

— 模式一:Spark SQL访问Hive
— Spark作为计算引擎,读取Hive元数据
— 适用场景:Spark为主的开发

— 模式二:Hive on Spark
— Hive作为入口,使用Spark作为执行引擎
— 适用场景:Hive为主的开发

— 配置Hive on Spark
SET hive.execution.engine=spark;

— 配置Spark SQL访问Hive
— spark.sql.catalogImplementation=hive

1.3 元数据共享机制

元数据共享是Hive与Spark集成的核心:

— 元数据共享配置
— Spark配置文件spark-defaults.conf
spark.sql.warehouse.dir=hdfs://fgedu01:8020/user/hive/warehouse
spark.sql.catalogImplementation=hive
spark.hadoop.hive.metastore.uris=thrift://fgedu01:9083

— Hive元数据服务配置
— hive-site.xml
<property>
  <name>hive.metastore.uris</name>
  <value>thrift://fgedu01:9083</value>
</property>

Part02-生产环境规划与建议

2.1 环境配置规划

环境配置需要确保Hive和Spark版本兼容。风哥提示:版本兼容性是集成成功的关键。

— 版本兼容性检查
— Spark 3.x 兼容 Hive 3.x
— Spark 2.x 兼容 Hive 2.x

— 查看Spark版本
spark-submit –version;

— 查看Hive版本
hive –version;

— 复制Hive配置到Spark
cp /bigdata/app/hive/conf/hive-site.xml /bigdata/app/spark/conf/;

# Spark版本
Welcome to
          ____        __
         / __/__  ___ _____/ /__
      _\ \/ _ \/ _ `/ __/  ‘_/
     ___/ .__/\_,_/_/ /_/\_\   version 3.4.1
       /_/

# Hive版本
Hive 3.1.3

2.2 资源调度策略

资源调度需要合理配置Spark和YARN资源:更多学习教程公众号风哥教程itpux_com

— Spark资源配置
— spark-defaults.conf
spark.executor.instances=4
spark.executor.cores=2
spark.executor.memory=4g
spark.driver.memory=2g
spark.yarn.queue=fgedu_queue

— 动态资源分配
spark.dynamicAllocation.enabled=true
spark.dynamicAllocation.minExecutors=2
spark.dynamicAllocation.maxExecutors=10

2.3 性能优化建议

性能优化需要针对Spark和Hive分别配置:

— Spark SQL优化
spark.sql.adaptive.enabled=true
spark.sql.adaptive.shuffle.targetPostShuffleInputSize=134217728
spark.sql.inMemoryColumnarStorage.compressed=true

— Hive on Spark优化
SET hive.optimize.sort.dynamic.partition=true;
SET hive.spark.dynamic.partition.pruning=true;
SET hive.execution.engine=spark;

Part03-生产环境项目实施方案

3.1 Spark SQL访问Hive

Spark SQL访问Hive是最常用的集成方式。from bigdata视频:www.itpux.com

— Spark SQL访问Hive表
spark-sql –master yarn \
  –conf spark.sql.warehouse.dir=hdfs://fgedu01:8020/user/hive/warehouse \
  –conf spark.sql.catalogImplementation=hive \
  -e “SELECT * FROM fgedu_sales LIMIT 10;”

— 使用PySpark访问Hive
pyspark –master yarn << 'EOF'
from pyspark.sql import SparkSession

spark = SparkSession.builder \
    .appName(“HiveIntegration”) \
    .enableHiveSupport() \
    .getOrCreate()

# 查询Hive表
df = spark.sql(“SELECT * FROM fgedu_sales WHERE dt=’2024-01-19′”)
df.show(10)

# 写入Hive表
df.write.mode(“overwrite”).insertInto(“fgedu_sales_result”)
EOF

# Spark SQL查询结果
+———-+————+———+———-+
| order_id | product_id | amount | dt |
+———-+————+———+———-+
| O001 | P001 | 8999.00 | 2024-01-19|
| O002 | P002 | 5999.00 | 2024-01-19|
| O003 | P003 | 1299.00 | 2024-01-19|
+———-+————+———+———-+

# PySpark执行成功
DataFrame[order_id: string, product_id: string, amount: decimal(12,2), dt: string]

3.2 Hive on Spark配置

Hive on Spark将Spark作为Hive的执行引擎。学习交流加群风哥QQ113257174

— 配置Hive on Spark
— hive-site.xml
<property>
  <name>hive.execution.engine</name>
  <value>spark</value>
</property>

— 会话级别设置
SET hive.execution.engine=spark;

— 执行Hive查询
hive -e “
SET hive.execution.engine=spark;
SELECT user_id, COUNT(*) AS order_count
FROM fgedu_orders
WHERE dt=’2024-01-19′
GROUP BY user_id;

3.3 数据互操作实战

Hive和Spark可以无缝互操作数据:

— Spark写入Hive表
spark-sql -e “
INSERT INTO TABLE fgedu_sales PARTITION(dt=’2024-01-19′)
VALUES (‘O1001’, ‘P001’, 8999.00);

— Hive查询Spark写入的数据
hive -e “SELECT * FROM fgedu_sales WHERE dt=’2024-01-19′;”

— Hive写入数据
hive -e “
INSERT INTO TABLE fgedu_result
SELECT * FROM fgedu_sales WHERE amount > 5000;

— Spark读取Hive写入的数据
spark-sql -e “SELECT COUNT(*) FROM fgedu_result;”

Part04-生产案例与实战讲解

4.1 Spark处理Hive数据案例

本案例演示使用Spark处理Hive数据。更多视频教程www.fgedu.net.cn

#!/bin/bash
# spark_hive_etl.sh
# from:www.itpux.com.qq113257174.wx:itpux-com
# web: http://www.fgedu.net.cn

echo “=== Spark处理Hive数据 ===”
echo “Date: $(date)”

spark-submit –master yarn \
  –deploy-mode cluster \
  –name “HiveETL” \
  –executor-memory 4g \
  –executor-cores 2 \
  –num-executors 4 \
  –conf spark.sql.warehouse.dir=hdfs://fgedu01:8020/user/hive/warehouse \
  –conf spark.sql.catalogImplementation=hive \
  –py-files /bigdata/scripts/fgedu_utils.py \
  /bigdata/scripts/spark_hive_etl.py

echo “=== 处理完成 ===”

=== Spark处理Hive数据 ===
Date: Fri Jan 19 14:00:00 CST 2024

# Spark作业提交
24/01/19 14:00:00 INFO SparkContext: Running Spark version 3.4.1
24/01/19 14:00:00 INFO ResourceUtils: Starting…
24/01/19 14:00:05 INFO HiveSharedState: Setting Hive metastore uris
24/01/19 14:00:10 INFO SparkSQLCLIDriver: Starting

# 数据处理统计
输入数据量: 1250000 条
输出数据量: 856234 条
处理时间: 45 秒

=== 处理完成 ===

4.2 混合计算案例

混合计算案例演示Hive和Spark协同工作。学习交流加群风哥微信: itpux-com

— 混合计算场景
— Step 1: Hive进行数据预处理
hive -e “
CREATE TABLE tmp_preprocessed AS
SELECT * FROM fgedu_raw_data
WHERE dt=’2024-01-19′
AND status=’valid’;

— Step 2: Spark进行复杂计算
spark-sql -e “
CREATE TABLE fgedu_result AS
SELECT
  user_id,
  AVG(amount) AS avg_amount,
  PERCENTILE(amount, 0.5) AS median_amount
FROM tmp_preprocessed
GROUP BY user_id;

— Step 3: Hive进行最终汇总
hive -e “
INSERT OVERWRITE TABLE fgedu_final_report
SELECT * FROM fgedu_result;

4.3 数据迁移案例

数据迁移案例演示从Hive迁移到Spark处理。风哥提示:迁移过程要保证数据一致性。

— 数据迁移方案
— 从Hive MapReduce迁移到Spark

— 原始Hive查询(MapReduce引擎)
SET hive.execution.engine=mr;
SELECT COUNT(*) FROM fgedu_large_table;
— 执行时间: 300秒

— 迁移到Spark引擎
SET hive.execution.engine=spark;
SELECT COUNT(*) FROM fgedu_large_table;
— 执行时间: 60秒

— 性能提升: 5倍

Part05-风哥经验总结与分享

5.1 集成最佳实践

风哥在生产环境中的集成经验总结:from bigdata视频:www.itpux.com

1. 引擎选择:

简单SQL用Hive,复杂计算用Spark

2. 元数据管理:

统一使用Hive Metastore,确保元数据一致性

3. 资源隔离:

为不同类型任务配置不同队列,避免资源竞争

5.2 常见问题与解决方案

问题1:元数据连接失败

解决方案:检查Metastore服务状态和配置。

— 检查Metastore服务
netstat -tlnp | grep 9083;

— 重启Metastore
hive –service metastore &

问题2:版本不兼容

解决方案:确保Spark和Hive版本兼容。学习交流加群风哥QQ113257174

5.3 生产环境注意事项

1. 资源管理:合理配置资源,避免资源浪费。

2. 监控告警:建立完善的监控体系。

3. 版本管理:统一版本,避免兼容性问题。

风哥提示:Hive与Spark的深度集成可以充分发挥两者的优势。在生产环境中,要根据业务场景选择合适的集成模式,统一元数据管理,合理配置资源,确保系统的稳定性和高效性。

本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html

联系我们

在线咨询:点击这里给我发消息

微信号:itpux-com

工作日:9:30-18:30,节假日休息