内容简介:本文详细介绍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作为计算引擎,读取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/;
Welcome to
____ __
/ __/__ ___ _____/ /__
_\ \/ _ \/ _ `/ __/ ‘_/
___/ .__/\_,_/_/ /_/\_\ version 3.4.1
/_/
# Hive版本
Hive 3.1.3
2.2 资源调度策略
资源调度需要合理配置Spark和YARN资源:更多学习教程公众号风哥教程itpux_com
— 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.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 –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
+———-+————+———+———-+
| 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-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-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
# 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 “=== 处理完成 ===”
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服务状态和配置。
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
