
作业timeline store的一种基于leveldb的实现。主要保存下面信息:
starttime-ldb主要保存的是app的启动时间,保存的信息主要如下:
entity-ldb数据库的类型是RollingLevelDB,支持按照时间创建单独的数据库。实际上是多个LevelDB数据库,只是LevelDB数据库的名称上面带了时间。方便按照时间获取对应的数据库。
在保存数据到entity-ldb里面,首先需要获取以及保存starttime。
核心代码参考:
Long startTime = getAndSetStartTime(entity.getEntityId(),
entity.getEntityType(), entity.getStartTime(), events);entity-ldb里面保存和如下信息:
关键字段含义
字段 | 含义 | 类型 |
|---|---|---|
DOMAIN_ID_COLUMN | "d".getBytes(UTF_8) | byte[] |
EVENTS_COLUMN | "e".getBytes(UTF_8) | byte[] |
PRIMARY_FILTERS_COLUMN | "f".getBytes(UTF_8) | byte[] |
OTHER_INFO_COLUMN | "i".getBytes(UTF_8) | byte[] |
RELATED_ENTITIES_COLUMN | "r".getBytes(UTF_8) | byte[] |
ENTITY_ENTRY_PREFIX | 3个空字符 | --- |
revstarttime | 启动时间,由低八位存储 | byte[] |
主要是entity的索引信息,key的格式如下:INDEXED_ENTRY_PREFIX + primaryfilter name + primaryfilter value + key
主要保存domain信息,根据作业类型的不同而不同,主要是Tez任务保存的比较多,带了作业的ID,当前数据库没有清理,可能会造成数据残留,详见:YARN-11911
保存的信息如下:
信息 | key | 备注 |
|---|---|---|
描述信息 | domainId + DESCRIPTION_COLUMN | DESCRIPTION_COLUMN ="d".getBytes(UTF_8) |
owner 信息 | domainId + OWNER_COLUMN | OWNER_COLUMN = "o".getBytes(UTF_8) |
reader信息 | domainId + READER_COLUMN | READER_COLUMN = "r".getBytes(UTF_8) |
writer信息 | domainId + WRITER_COLUMN | "w".getBytes(UTF_8) |
时间信息 | domainId + TIMESTAMP_COLUMN | TIMESTAMP_COLUMN = "t".getBytes(UTF_8),低八位为创建时间,高八位为修改时间 |
主要保存owner信息,根据作业类型的不同而不同,主要是Tez任务保存的比较多,带了作业的ID,当前数据库没有清理,可能会造成数据残留,详见:YARN-11911
保存的信息如下:
信息 | key | 备注 |
|---|---|---|
描述信息 | owner + domainId + DESCRIPTION_COLUMN | DESCRIPTION_COLUMN ="d".getBytes(UTF_8) |
owner 信息 | owner + domainId + OWNER_COLUMN | OWNER_COLUMN = "o".getBytes(UTF_8) |
reader信息 | owner + domainId + READER_COLUMN | READER_COLUMN = "r".getBytes(UTF_8) |
writer信息 | owner + domainId + WRITER_COLUMN | "w".getBytes(UTF_8) |
时间信息 | owner + domainId + TIMESTAMP_COLUMN | TIMESTAMP_COLUMN = "t".getBytes(UTF_8),低八位为创建时间,高八位为修改时间 |