THIS IS A TEST INSTANCE. ALL YOUR CHANGES WILL BE LOST!!!!

Apache Kylin : Analytical Data Warehouse for Big Data

Page tree

Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

资源探测会收集一些必要的信息为后续的自动调参、构建任务准备。构建任务资源探测会将如下三个文件记录到 working-dir/workingdir/project/job_tmp/$jobId/share 目录下: a. count_distinct.json 是否需要构建count distinct measure b. 每个segment会生成 ${seg_id}_resource_paths.json,每个根节点的执行计划的所有文件路径 c. 每个segment会生成 {seg_id}_cubing_detect_items.json,每个根节点的执行计划的分区数总和(如果源表是一个view,会遍历view 下面的所有leafNode的分区数之和) 需要注意的是merge任务资源探测只会生成count_distinct.json和segidcubingdetectitems.jsonviewviewleafNodemergecountdistinct.json{merged_segment_id}_resource_paths.json

各个Spark参数设置规则如下:

spark.executor.memory
  1. 从*_resource_paths.json中获取读取的文件
  2. 获取这些文件的大小并选出最大值
  3. 根据如下规则配置
    a. 如果size >= 100G 并且 存在count distinct 则结果为20G
    b. 如果size >= 100G 或者 (size >= 10G 并且 存在count distinct) 则结果为16G
    c. 如果size >= 10G 或者 (size >= 1G 并且 存在count distinct) 则结果为10G
    d. 其他情况结果为4G
spark.executor.cores
  1. 从*_resource_paths.json中获取读取的文件
  2. 获取这些文件的大小并选出最大值
  3. 根据如下规则配置
    a. 如果size >= 10G 或者存在count distinct度量, 则结果为5
    b. 其他情况为1
spark.executor.memoryOverhead
  1. 从*_resource_paths.json中获取读取的文件
  2. 获取这些文件的大小并选出最大值
  3. 根据如下规则配置
    a. 如果size >= 100G 并且存在count distinct度量,则结果为6G
    b. 如果size >= 100G 或者 (size >=10G 并且 存在count distinct) ,则结果为4G
    c. 如果size >= 10G 或者 (size >=1G 并且 存在count distinct),则结果为2G
    d. 如果size >= 1G 或者 存在count distinct 则结果为1G
    e. 其他情况为512M
spark.executor.instances
  1. 从 *_cubing_detect_items.json 获取最大的task数量 max_tasks,
  2. 计算总共需要的cores数量为max_tasks / kylin.engine.spark.task-core-factor,kylin.engine.spark.task-core-factor 默认是3
  3. 根据layout数量计算instance数量 instance_by_layout
    a. kylin.engine.base-executor-instance 默认是 5
    b. 档位 0 ~ 100 => 1, 100 ~ 500 =>2, 500 ~ 1000 => 3, 1000+ => 4
    c. kylin.engine.base-executor-instance * 档位
  4. 获取队列 available_cores, available_memory
  5. 计算 available_instances = min(available_cores / (spark.executor.memory + spark.executor.memoryOverhead), available_memory / spark.executor.cores )
  6. 计算 instance = min(max(instance_by_layout, required_cores / spark.executor.cores), available_instances)
  7. 最终结果为max(instance, kylin.engine.base-executor-instance), kylin.engine.base-executor-instance 默认是 5