Apache Kylin : Analytical Data Warehouse for Big Data
Page History
...
资源探测会收集一些必要的信息为后续的自动调参、构建任务准备。构建任务资源探测会将如下三个文件记录到 working-dir/working−dir/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.json,每个根节点的执行计划的分区数总和(如果源表是一个view,会遍历view下面的所有leafNode的分区数之和)需要注意的是merge任务资源探测只会生成countdistinct.json和{merged_segment_id}_resource_paths.json
各个Spark参数设置规则如下:
spark.executor.memory
- 从*_resource_paths.json中获取读取的文件
- 获取这些文件的大小并选出最大值
- 根据如下规则配置
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
- 从*_resource_paths.json中获取读取的文件
- 获取这些文件的大小并选出最大值
- 根据如下规则配置
a. 如果size >= 10G 或者存在count distinct度量, 则结果为5
b. 其他情况为1
spark.executor.memoryOverhead
- 从*_resource_paths.json中获取读取的文件
- 获取这些文件的大小并选出最大值
- 根据如下规则配置
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
- 从 *_cubing_detect_items.json 获取最大的task数量 max_tasks,
- 计算总共需要的cores数量为max_tasks / kylin.engine.spark.task-core-factor,kylin.engine.spark.task-core-factor 默认是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 * 档位 - 获取队列 available_cores, available_memory
- 计算 available_instances = min(available_cores / (spark.executor.memory + spark.executor.memoryOverhead), available_memory / spark.executor.cores )
- 计算 instance = min(max(instance_by_layout, required_cores / spark.executor.cores), available_instances)
- 最终结果为max(instance, kylin.engine.base-executor-instance), kylin.engine.base-executor-instance 默认是 5