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

目录

  • 1. Kylin的构建步骤
  • 2. Spark构建资源参数配置优化
    • 2.1 自动计算Spark构建需要的资源
    • 2.2 手动设置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.instances Spark应用程序的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的独家任务,虽然执行效率相对较低,但它可以通过这种方式来避免构建失败

你可能感兴趣的:(#,Kylin,spark,kylin,构建参数优化,构建资源参数,配置优化)