HBase实时数据归档ODPS
前提条件
版本
- 自建HBase1.x、2.x
- EMR HBase
- 标准版云HBase、增强版云HBase(集群版本)
限制
实时数据归档基于HBase的日志,因此不能导出bulkload的数据
归档原理
- 提交归档任务,包括HBase集群信息、ODPS连接信息、需要归档的表、归档的时间粒度
- BDS会在ODPS表对应的project上创建{{project}}.bdsArchive的临时表(临时表表名可以指定),并上传UDF到ODPS指定的Project下
- BDSMaster构建任务并下发任务给BDSWorker
- BDSWorker读取日志,每隔5分钟或者数据达到64MB将日志数据归档到ODPS的临时表{{project}}.bdsArchive中
- BDSMaster检查归档任务的点位同步的点位,触发ODPS表merge的任务,将{{project}}.bdsArchive中对应区间的数据进行行转列,最后将新数据写入到{{project}}.{{targetTable}}的对应分区中
其中临时表{{project}}.bdsArchive表结构如图所示,table字段表示HBase的表名,rowkey就是表的rowkey,version就是HBase中KV的版本(默认是KV入库的时间戳), family 表示的是HBase表的列族, qualifier 表示HBase表的列, val 表示KV的值, op表示KV的操作类型。每一行代表一个HBase中的一个KV。其中rowkey和val默认转化成HexString的格式
提交归档任务
- 进入BDS操作页面,点击任务管理->HBase实时数据导出ODPS
- 点击创建同步任务, 进入任务创建页面,选择对应的HBase源集群和ODPS目标集群, 指定需要导出的HBase表如图所示,对HBase表wal-test-301333235进行实时数据归档到ODPS,归档的列包括cf1:a、cf1:b、cf1:c、cf1:d四列。mergeInterval 表示的是归档的间隔(单位毫秒), 默认指定 86400000 (一天), mergeStartAt(格式为yyyyMMddHHmmss)表示从2019年9月30号0点整作为起始时间(可以指定一个过去的值)
- 查看表归档进度实时同步通道展示的是日志同步的延迟、点位,Table Merge 展现的是表Merge的任务,Merge完成即可在ODPS上查询最新分区的表
- ODPS查询表数据
参数说明
导出表格式如下:
hbaseTable/odpsTable {"cols": ["cf1:a|string", "cf1:b|int", "cf1:c|long", "cf1:d|short","cf1:e|decimal", "cf1:f|double","cf1:g|float","cf1:h|boolean","cf1:i"], "mergeInterval": 86400000, "mergeStartAt": "20191008100547"}
hbaseTable/odpsTable {"cols": ["cf1:a", "cf1:b", "cf1:c"], "mergeStartAt": "20191008000000"}
hbaseTable {"mergeEnabled": false} // 不进行merge操作
导出表主要包括三个部分 {{hbaseTable}}/{{odpsTable}} {{tbConf}}
hbaseTable 指定的是HBase表
odpsTable可选,指定目标表名, 默认情况和HBase相同 (ODPS表名不支持包含”.-“等字符,统一转化成”_”)
tbConf 指定表的归档行为,支持的参数如下
参数 | 说明 | 例子 |
---|---|---|
cols | 指定需要导出表的哪些列,以及列的类型, 默认转化为HexString | “cols”: [“cf1:a”, “cf1:b”, “cf1:c”] |
mergeEnabled | 是否需要进行KV表转化成宽表, 默认为true | “mergeEnabled”: false |
mergeStartAt | merge的起始时间,可以指定一个过去的时间,格式是yyyyMMddHHmmss | “mergeStartAt”: “20191008000000” |
mergeInterval | merge的时间间隔,单位毫秒,默认是一天,即按天归档 | “mergeInterval”: 86400000 |
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。
评论