RollingLevelDBTimelineStore 详解

功能简介

作业 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),低八位为创建时间,高八位为修改时间
  • Hadoop

    Hadoop 是由 Apache 基金会所开发的一个分布式系统基础架构。用户可以在不了解分布式底层细节的情况下,开发分布式程序。充分利用集群的威力进行高速运算和存储。

    95 引用 • 122 回帖 • 634 关注

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...
zeekling
应无所住,而生其心。 --《金刚经》 吾生也有涯,而知也无涯。 --《庄子》 宝鸡