您的位置:首页 > 产品设计 > UI/UE

Kylin Cube Build流程

2016-08-23 19:04 639 查看

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;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Kylin Build