Kylin Cube Build流程

来源:互联网 发布:网络老冰棍是什么意思 编辑:程序博客网 时间:2024/05/31 19:16

Kylin Cube Build流程

Cube的三种构建类型

在CubeBuildTypeEnum中定义了三种类型的build job:

public enum CubeBuildTypeEnum {    BUILD,    MERGE,    REFRESH}

三种类型的job的提交入口都在jobService.submitJob()
该函数共有6个参数:
- CubeInstance cube
- long startDate
- long endDate
- CubeBuildTypeEnum buildType
- boolean forceMergeEmptySeg
- String submitter

例行检查

checkCubeDescSignature(cube);checkNoRunningJob(cube);
  • 检查cube的md5签名
  • 检查该cube是否有处于READY、RUNNING或ERROR状态的job

这也印证了我们在操作中build cube的时候,不能有READY、RUNNING或ERROR这几种状态的job存在,如果有,须先discard掉

创建job

在创建job之前,需要先实例化segment:

  • BUILD类型: getCubeManager().appendSegments(cube, endDate)
  • MERGE类型: getCubeManager().mergeSegments(cube, startDate, endDate, forceMergeEmptySeg)
  • REFRESH类型: 需要先检查该segment是否存在,存在了话才能够进行实例化 getCubeManager().refreshSegment(cube, startDate, endDate)

利用简单工厂模式创建job

  • BUILD、REFRESH的构建方法是EngineFactory.createBatchCubingJob()
  • MERGE的构建方法是EngineFactory.createBatchMergeJob()

在这个过程中可以选择作业的引擎,目前Kylin支持MapReduce、MapReduceV2(不知道是不是Yarn)和Spark三种计算引擎
引擎由前端进行设置,默认使用MapReduceV2
不同的引擎调用不同的createBatchCubingJob()createBatchMergeJob()实现

根据默认引擎,开始执行build过程

在MRBatchCubingEngine2中:

  • createBatchCubingJob()方法执行new BatchCubingJobBuilder2(newSegment, submitter).build();
  • createBatchMergeJob()方法执行new BatchMergeJobBuilder2(mergeSegment, submitter).build();

创建JobInstance实例

JobInstance是某次构建过程执行的结果,用于页面展示
以JSON的格式存储某些元数据以及执行的每个步骤

这些元数据的定义在JobInstance.java中定义如下:

@JsonProperty("name")private String name;@JsonProperty("type")private CubeBuildTypeEnum type;@JsonProperty("duration")private long duration;@JsonProperty("related_cube")private String relatedCube;@JsonProperty("related_segment")private String relatedSegment;@JsonProperty("exec_start_time")private long execStartTime;@JsonProperty("exec_end_time")private long execEndTime;@JsonProperty("mr_waiting")private long mrWaiting = 0;@JsonManagedReference@JsonProperty("steps")private List<JobStep> steps;@JsonProperty("submitter")private String submitter;@JsonProperty("job_status")private JobStatusEnum status;
0 0
原创粉丝点击