Hive on spark 配置

1. 配置

1.1 配置hive使用spark引擎

1.1.1 临时配置

set hive.execution.engine=spark;

在hive或beeline窗口运行该命令,则在该会话的sql将会使用spark执行引擎

1.1.2 永久配置

  1. 进入Cloudera Manager,进入Hive服务页面;
  2. 点击配置(Configuration)按钮;
  3. 搜索"execution";
  4. 设置“default execution engine”的配置为Spark
  5. 保存,并重启相关的集群服务则生效;

1.2 配置Hive依赖于Spark服务

  1. 进入Cloudera Manager,进入Hive服务页面;
  2. 点击配置(Configuration)按钮;
  3. 搜索“Spark On YARN Service”,选择Spark服务,若要移除,则选择none;
  4. 保存,并重启相关集群服务则生效;

1.3 Hive Map Joins的动态分区修剪

当运行Hive on Spark时,可以开启map joins的动态分区修剪功能。这是一项数据库优化功能能够减少数据的扫描量,从而使任务运行更快。但必须从分区表才能达到效果。

-- CDH不建议也不支持设置此项:所有的join都开启,包括map joins和common joins
set hive.spark.dynamic.partition.pruning=true;
-- 此项支持:仅在map joins开启
set hive.spark.dynamic.partition.pruning.map.join.only=true;

1.4 其他优化配置

1.4.1 Yarn的配置

重要配置参数:
yarn.nodemanager.resource.cpu-vcores
yarn.nodemanager.resource.memory-mb

这两个参数与集群资源(cpu和内存)以及服务有关,不做配置建议,请自行参考yarn的资源配置相关建议

1.4.2 Spark的配置

1.4.2.1 配置Executor资源

配置executor memory的大小是,最主要参考以下两点因素:

  1. 更多的executor内存能够优化map join查询,但可能增加GC;
  2. HDFS的客户端在某种情况下不能很好处理并发写入,因此更多的核心数可能会发生竞争;

为了减少剩余的核心数(指无法充分分配,比如20个核,每个executor设置为3,那么20/3余2,则有2个核剩余),Cloudera建议配置核心数为4或5或6(由总可用核数进行计算);

一个executor分配的内存由spark.executor.memoryspark.yarn.executor.memoryOverhead 两个参数确定。Cloudera建议配置堆外内存为executor总内存的15%-20%。

假设设置spark.execuotr.memoryOverhead=2G,spark.executor.memory=12G,yarn.nodemanager.resource.memory-mb=100G,那么最多能够同时运行7个executor,每个executor能够运行4个task(一个核一个任务)。那么每个任务平均有3.5G(14/4)内存。在一个executor里的所有tasks将共享同一个堆空间。

注意:

  1. 在不同版本,spark.yarn.executor.memoryOverhead的参数过时了,由spark.executor.memoryOverhead替代;
  2. 必须确保spark.execuotr.memoryOverhead 和 spark.executor.memory 的和小于 yarn.scheduler.maximum-allocation-mb,否则资源不够,无法分配资源,
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值