功能简介
作业 timeline store 的一种基于 leveldb 的实现。主要保存下面信息:
- start time 信息,保存在 starttime-ldb 里面,是一个单独的 LevelDB。
- entity 信息,保存在 entity-ldb 里面,是一个单独的 LevelDB,支持按照时间进行归档以及清理。
- indexed entity 信息,保存在 indexes-ldb 里面,是一个单独的 LevelDB。支持按照时间进行归档以及清理。
- domain 信息,保存 domain 信息,保存在 domain-ldb 里面,是一个单独的 LevelDB。
- owner 信息,保存 owner 信息,保存在 owner-ldb 里面,是一个单独的 LevelDB。
数据库详解
starttime-ldb
starttime-ldb 主要保存的是 app 的启动时间,保存的信息主要如下:
- 保存的 key 是 EntityIdentifier,value 是作业启动时间。
- 当前版本信息,key 是 timeline-store-version,value 是版本信息。
entity-ldb
entity-ldb 数据库的类型是 RollingLevelDB,支持按照时间创建单独的数据库。实际上是多个 LevelDB 数据库,只是 LevelDB 数据库的名称上面带了时间。方便按照时间获取对应的数据库。
在保存数据到 entity-ldb 里面,首先需要获取以及保存 starttime。
核心代码参考:
Long startTime = getAndSetStartTime(entity.getEntityId(),
entity.getEntityType(), entity.getStartTime(), events);
entity-ldb 里面保存和如下信息:
- ENTITY_ENTRY_PREFIX + entity type + revstarttime + entity id
- ENTITY_ENTRY_PREFIX + entity type + revstarttime + entity id + DOMAIN_ID_COLUMN
- ENTITY_ENTRY_PREFIX + entity type + revstarttime + entity id + EVENTS_COLUMN + reveventtimestamp + eventtype
- ENTITY_ENTRY_PREFIX + entity type + revstarttime + entity id + PRIMARY_FILTERS_COLUMN + name + value
- ENTITY_ENTRY_PREFIX + entity type + revstarttime + entity id + OTHER_INFO_COLUMN + name
- ENTITY_ENTRY_PREFIX + entity type + revstarttime + entity id + RELATED_ENTITIES_COLUMN + relatedentity type + relatedentity id
关键字段含义
| 字段 | 含义 | 类型 |
|---|---|---|
| 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[] |
indexes-ldb
主要是 entity 的索引信息,key 的格式如下:INDEXED_ENTRY_PREFIX + primaryfilter name + primaryfilter value + key
domain-ldb
主要保存 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-ldb
主要保存 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),低八位为创建时间,高八位为修改时间 |
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于