Kylin构建参数优化之Spark构建资源参数配置优化

1. Kylin的构建步骤

Cube构建任务为两个步骤,第一步检测构建Cube数据的源文件,第二步是构建快照表(如果需要)、生成全局字典(如果需要)、将Cube数据构建为Parquet文件

2. Spark构建资源参数配置优化

2.1 自动计算Spark构建需要的资源

如果没有设置Spark的构建资源参数,则Kylin会通过源文件中最大文件的大小和 Cube是否具有准确的去重计数度量(precisely count_distinct)来自动计算Spark构建需要的资源

Executor内存规则

  • 如果【最大文件大小】>= 100G and 【存在准确去重度量值】, 设置kylin.engine.spark-conf.spark.executor.memory为20G
  • 如果【最大文件大小】>= 100G or (如果【最大文件大小】>= 10G and 【存在准确去重度量值】), 设置kylin.engine.spark-conf.spark.executor.memory为16G
  • 如果【最大文件大小】>= 10G or (如果【最大文件大小】>= 1G and 【存在准确去重度量值】), 设置kylin.engine.spark-conf.spark.executor.memory为10G
  • 如果【最大文件大小】>= 1G or 【存在准确去重度量值】, 设置kylin.engine.spark-conf.spark.executor.memory为4G
  • 否则设置kylin.engine.spark-conf.spark.executor.memory为1G

Executor核心数规则

  • 如果【最大文件大小】>= 1G or【存在准确去重度量值】, 设置kylin.engine.spark-conf.spark.executor.cores为5
  • 否则设置kylin.engine.spark-conf.spark.executor.cores为1

Executor堆外内存规则

  • 如 果【最大文件大小】>= 100G and 【存在准确去重度量值】, 设置kylin.engine.spark-conf.spark.executor.memoryOverhead为6G, 所以这种情况下,每个Executor的内存为20G + 6G = 26G
  • 如果【最大文件大小】>= 100G or (如果【最大文件大小】>= 10G and 【存在准确去重度量值】), 设置kylin.engine.spark-conf.spark.executor.memoryOverhead为4G
  • 如果【最大文件大小】>= 10G or (如果【最大文件大小】>= 1G and 【存在准确去重度量值】), 设置kylin.engine.spark-conf.spark.executor.memoryOverhead为2G
  • 如果【最大文件大小】>= 1G or 【存在准确去重度量值】, 设置kylin.engine.spark-conf.spark.executor.memoryOverhead为1G
  • 否则设置kylin.engine.spark-conf.spark.executor.memoryOverhead为512M

Executor实例数量规则

  • 读取参数kylin.engine.base-executor-instance(默认值为5)的值作为基本Executor数量
  • 根据Cuboid个数来计算所需的Executor个数, 配置文件中读取参数kylin.engine.executor-instance-strategy的值,默认为100,2,500,3,1000,4,即 Cuboid个数为0-100时,因数为1;100-500时,因数为2;500-1000时,因数为3;1000以上时,因数为4。然后用这个因数乘以第一步的基本Executor数量就是 Executor的预估总数量
  • 从Spark资源池中的得到可用的总核心数和总内存数,然后用总核心数除以kylin任务所需的核心数,再用总内存数除以kylin任务所需的内存数,两者求个最小值,就是Executor的可用总数量
  • 最后在Executor的预估总数量和Executor的可用总数量之间取最小值作为 Executor的实际最终总数量

Shuffle分区数量规则
设置kylin.engine.spark-conf.spark.sql.shuffle.partitions为max(2, 【最大文件大小MB】/ 32)

自动分配的资源,可以在$KYLIN_HOME/logs/kylin.log中查找Auto set查看

2.2 手动设置Spark构建需要的资源

在kylin.properties配置文件中,以kylin.engine.spark-conf开头的参数,都是设置Spark构建资源的参数。主要如下:

参数说明
kylin.engine.spark-conf.spark.executor.instancesSpark应用程序的Executor数量
kylin.engine.spark-conf.spark.executor.cores每个Executor使用的核心数, Executor数量乘以Executor使用的核心数就是Spark程序运行的最大并行度
kylin.engine.spark-conf.spark.executor.memory每个Executor使用的内存
kylin.engine.spark-conf.spark.executor.memoryOverhead每个Executor使用的堆外内存
kylin.engine.spark-conf.spark.sql.files.maxPartitionBytes读取文件时要打包到单个分区中的最大字节数,默认值为128M。如果源表(Hive source)中有许多小文件,spark会自动将许多小文件打包到单个分区中,以避免执行太多的小任务
kylin.engine.spark-conf.spark.sql.shuffle.partitions配置为Join或聚合Shuffle时要使用的分区数,默认值为200。较大的值需要更多的CPU资源,而较小的值需要更多的内存资源

如果存在严重的内存问题,可以考虑调整kylin.engine.spark-conf.spark.executor.cores为1,使单个任务是每个Executor的独家任务,虽然执行效率相对较低,但它可以通过这种方式来避免构建失败

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值