hive on spark参数配置

本文详细介绍了在Hive中使用Spark作为执行引擎时的各项关键参数配置,包括计算引擎选择、资源分配、内存管理、任务并行度及动态分区设置等,为优化Hive on Spark的性能提供指导。

hive on Spark参数:

set spark.master=yarn-cluster;                    #设置spark提交模式

set hive.execution.engine=spark;                #设置计算引擎

set spark.yarn.queue=queue_name;           #设置作业提交队列

set spark.app.name=job_name;                  #设置作业名称

set spark.executor.instances=20;                #设置执行器个数

set spark.executor.cores=4;                        #设置执行器计算核个数

set spark.executor.memory=8g;                  #设置执行器内存

set mapred.reduce.tasks=600;                    #设置任务并行度

set spark.yarn.executor.memoryOverhead=2048;    #设置每个executor的jvm堆外内存

set spark.memory.fraction=0.8;                  #设置内存比例(spark2.0+)

set spark.serializer=org.apache.serializer.KyroSerializer;  #设置对象序列化方式

#设置动态分区

set hive.exec.dynamic.partition=true;

set hive.exec.dynamic.partition.mode=nonstrict;

set hive.exec.dynamic.partitions.pernode=10000;

set hive.exec.dynamic.partitions=10000;

 

 

### Hive on Spark 参数配置及调优指南 #### 1. 启用 Hive on Spark 要在 Hive 中启用 Spark 执行引擎,需设置以下参数: ```sql SET hive.execution.engine=spark; ``` 此参数指定了 Hive 使用 Spark 而不是默认的 MapReduce 作为执行引擎。 --- #### 2. 基础资源配置 以下是几个基础配置项及其作用: - **`hive.spark.client.connect.timeout`**: 设置客户端连接超时时间。如果作业启动较慢,可能需要增加该值以避免连接中断[^1]。 - **`hive.spark.task.launch.mode`**: 控制任务提交模式,默认为 `separate-thread`,即每个任务在一个独立线程中运行。可以根据实际需求调整为 `fork-process` 或其他模式[^1]。 - **`hive.exec.reducers.bytes.per.reducer`**: 调整 Reducer 数量的关键参数之一。虽然 Hive on Spark 不依赖传统的 Reduce 阶段,但它仍然会影响 Shuffle 数据分布逻辑[^4]。 --- #### 3. 自适应查询执行 (AQE) 配置 Spark 的 AQE 功能可以通过动态优化提升 Hive 查询性能。以下是相关参数说明: - **`spark.sql.adaptive.enabled=true`**: 开启自适应查询执行功能。这允许 Spark 在运行时根据数据特征重新规划物理计划[^2]。 - **`spark.sql.adaptive.minNumPostShufflePartitions`**: 设定 Shuffle 后最小分区数量,防止因分区过少而导致 CPU 利用率低下[^2]。 - **`spark.sql.adaptive.advisoryPartitionSizeInBytes`**: 推荐的单个分区大小(字节数),用于指导分区合并操作[^3]。 - **`spark.sql.adaptive.coalescePartitions.minPartitionNum`**: 分区合并后保留的最小分区数,进一步保障并行度。 --- #### 4. Join 策略优化 针对不同的 Join 场景,可通过以下参数实现更高效的计算: - **`spark.sql.autoBroadcastJoinThreshold`**: 广播小表的最大阈值(单位:字节)。当右表小于该值时,会优先尝试 Broadcast Join。 - **`spark.sql.shuffle.partitions`**: 默认 Shuffle 分区数。较大的数据集通常需要更高的分区数来提高并发能力。 - **`nonEmptyPartitionRatioForBroadcastJoin`**: 只有当 Shuffle 后非空分区比例低于该值时,才会考虑将 Shuffle Join 转换为 Broadcast Join。 --- #### 5. ORC 表读取优化 Hive on Spark 对于 ORC 文件格式的支持尤为高效,可参考如下配置进行优化: - **`hive.optimize.index.filter=true`**: 启用索引过滤器加速谓词下推。 - **`hive.vectorized.execution.enabled=true`**: 开启向量化执行,显著加快列式存储文件(如 ORC 和 Parquet)的解析速度[^1]。 - **`orc.merge.small.files.max.size`**: 如果存在大量小文件,则可以适当增大此值以便在读取前合并它们[^4]。 --- #### 6. 处理数据倾斜 尽管 Hive on Spark 提供了一些内置机制应对数据倾斜问题,但在某些极端情况下仍需手动干预: - **`spark.sql.adaptive.skewJoin.enabled=true`**: 开启自动检测和处理倾斜 Join 的功能[^3]。 - **`spark.sql.adaptive.skewJoin.skewedPartitionFactor`**: 定义倾斜分区的比例因子。只有那些超出平均大小一定倍数的分区会被视为倾斜分区。 - **`spark.sql.adaptive.skewJoin.skewedPartitionThresholdInBytes`**: 斜倾分区的实际大小上限(字节数),超过这个数值才应用特殊策略。 --- #### 7. 性能监控与调试 为了更好地理解 Hive on Spark 的行为表现,建议关注以下几个方面: - 查看 Spark UI 上的任务完成情况及时发现瓶颈所在; - 记录日志级别至 DEBUG 模式 (`set hive.root.logger=DEBUG,console`) 获取更多诊断信息; - 结合 EXPLAIN PLAN 输出分析具体执行路径是否合理。 --- ### 示例代码片段 下面是一个简单的 Hive SQL 脚本示例,展示了如何综合运用上述提到的一些重要参数: ```sql -- 初始化环境变量 SET hive.execution.engine=spark; SET spark.sql.adaptive.enabled=true; SET spark.sql.shuffle.partitions=500; -- 创建外部表指向 ORC 格式的原始数据 CREATE EXTERNAL TABLE IF NOT EXISTS my_orc_table ( id INT, name STRING, value DOUBLE ) STORED AS ORC LOCATION '/path/to/orc/files'; -- 测试复杂 JOIN 查询 SELECT t1.id, COUNT(t2.value) as cnt FROM my_orc_table t1 LEFT OUTER JOIN another_large_table t2 ON t1.id = t2.ref_id GROUP BY t1.id; ``` ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值