882
微信
OTSReader__Reader插件_使用手册_数据集成-阿里云
1 快速介绍
OTSReader插件实现了从OTS读取数据,并可以通过用户指定抽取数据范围可方便的实现数据增量抽取的需求。目前支持三种抽取方式:
- 全表抽取
- 范围抽取
- 指定分片抽取
OTS是构建在阿里云飞天分布式系统之上的 NoSQL数据库服务,提供海量结构化数据的存储和实时访问。OTS 以实例和表的形式组织数据,通过数据分片和负载均衡技术,实现规模上的无缝扩展。
2 实现原理
简而言之,OTSReader通过OTS官方Java SDK连接到OTS服务端,获取并按照DataX官方协议标准转为DataX字段信息传递给下游Writer端。
OTSReader会根据OTS的表范围,按照Datax并发的数目N,将范围等分为N份Task。每个Task都会有一个OTSReader线程来执行。
3 功能说明
3.1 配置样例
- 配置一个从OTS全表同步抽取数据到本地的作业:
{
"type": "job",
"traceId": "您可以在这里填写您作业的追踪ID,建议使用业务名+您的作业ID",
"version": "1.0",
"configuration": {
"reader": {
"plugin": "ots",
"parameter": {
"endpoint": "",
"accessId": "",
"accessKey": "",
"instanceName": "",
"table": "",
"column": [
{
"name": "col1"
},
{
"name": "col2"
},
{
"name": "col3"
},
{
"type": "STRING",
"value": "bazhen"
},
{
"type": "INT",
"value": ""
},
{
"type": "DOUBLE",
"value": ""
},
{
"type": "BOOL",
"value": ""
},
{
"type": "BINARY",
"value": "Base64(bin)"
}
],
"range": {
"begin": [
{
"type": "INF_MIN"
}
],
"end": [
{
"type": "INF_MAX"
}
]
}
}
}
},
"writer": {}
}
- 配置一个定义抽取范围的OTSReader:
{
"type": "job",
"traceId": "您可以在这里填写您作业的追踪ID,建议使用业务名+您的作业ID",
"version": "1.0",
"configuration": {
"reader": {
"plugin": "ots",
"parameter": {
"endpoint":"",
"accessId":"",
"accessKey":"",
"instanceName":"",
// 导出数据表的表名
"table":"",
// 需要导出的列名,支持重复类和常量列,区分大小写
// 常量列:类型支持STRING,INT,DOUBLE,BOOL和BINARY
// 备注:BINARY需要通过Base64转换为对应的字符串传入插件
"column":[
{"name":"col1"}, // 普通列
{"name":"col2"}, // 普通列
{"name":"col3"}, // 普通列
{"type":"STRING","value" : ""}, // 常量列(字符串)
{"type":"INT","value" : ""}, // 常量列(整形)
{"type":"DOUBLE","value" : ""}, // 常量列(浮点)
{"type":"BOOL","value" : ""}, // 常量列(布尔)
{"type":"BINARY","value" : "Base64(bin)"} // 常量列(二进制)
],
"range":{
// 导出数据的起始范围
// 支持INF_MIN, INF_MAX, STRING, INT
"begin":[
{"type":"INF_MIN"},
{"type":"INF_MAX"},
{"type":"STRING", "value":"hello"},
{"type":"INT", "value":"2999"},
],
// 导出数据的结束范围
// 支持INF_MIN, INF_MAX, STRING, INT
"end":[
{"type":"INF_MAX"},
{"type":"INF_MIN"},
{"type":"STRING", "value":"hello"},
{"type":"INT", "value":"2999"},
]
}
}
}
},
"writer": {
}
}
}
3.2 参数说明
- endpoint
- 描述:OTS Server的EndPoint地址,例如https://bazhen.cn−hangzhou.ots.aliyuncs.com。
- 必选:是
- 默认值:无
- accessId
- 描述:OTS的accessId
- 必选:是
- 默认值:无
- accessKey
- 描述:OTS的accessKey
- 必选:是
- 默认值:无
- instanceName
- 描述:OTS的实例名称,实例是用户使用和管理 OTS 服务的实体,用户在开通 OTS 服务之后,需要通过管理控制台来创建实例,然后在实例内进行表的创建和管理。实例是 OTS 资源管理的基础单元,OTS 对应用程序的访问控制和资源计量都在实例级别完成。
- 必选:是
- 默认值:无
table
- 描述:所选取的需要抽取的表名称,这里有且只能填写一张表。在OTS不存在多表同步的需求。
- 必选:是
- 默认值:无
column
描述:所配置的表中需要同步的列名集合,使用JSON的数组描述字段信息。由于OTS本身是NoSQL系统,在OTSReader抽取数据过程中,必须指定相应地字段名称。
支持普通的列读取,例如: {"name":"col1"}
支持部分列读取,如用户不配置该列,则OTSReader不予读取。
支持常量列读取,例如: {"type":"STRING", "value" : "DataX"}。使用type描述常量类型,目前支持STRING、INT、DOUBLE、BOOL、BINARY(用户使用Base64编码填写)、INF_MIN(OTS的系统限定最小值,使用该值用户不能填写value属性,否则报错)、INF_MAX(OTS的系统限定最大值,使用该值用户不能填写value属性,否则报错)。
不支持函数或者自定义表达式,由于OTS本身不提供类似SQL的函数或者表达式功能,OTSReader也不能提供函数或表达式列功能。
必选:是
默认值:无
begin/end
- 描述:该配置项必须配对使用,用于支持OTS表范围抽取。begin/end中描述的是OTS PrimaryKey的区间分布状态,而且必须保证区间覆盖到所有的PrimaryKey,需要指定该表下所有的PrimaryKey范围,对于无限大小的区间,可以使用{"type":"INF_MIN"},{"type":"INF_MAX"}指代。例如对一张主键为 [DeviceID, SellerID]的OTS进行抽取任务,begin/end可以配置为:
"range": { "begin": [ {"type":"INF_MIN"}, //指定deviceID最小值 {"type":"INT", "value":"0"} //指定SellerID最小值 ], "end": [ {"type":"INF_MAX"}, //指定deviceID抽取最大值 {"type":"INT", "value":"9999"} //指定SellerID抽取最大值 ] }
如果要对上述表抽取全表,可以使用如下配置:
"range": { "begin": [ {"type":"INF_MIN"}, //指定deviceID最小值 {"type":"INF_MIN"} //指定SellerID最小值 ], "end": [ {"type":"INF_MAX"}, //指定deviceID抽取最大值 {"type":"INF_MAX"} //指定SellerID抽取最大值 ] }
- 必选:是
- 默认值:空
split
描述:该配置项属于高级配置项,是用户自己定义切分配置信息,普通情况下不建议用户使用。适用场景通常在OTS数据存储发生热点,使用OTSReader自动切分的策略不能生效情况下,使用用户自定义的切分规则。split指定是的在Begin、End区间内的切分点,且只能是partitionKey的切分点信息,即在split仅配置partitionKey,而不需要指定全部的PrimaryKey。
例如对一张主键为 [DeviceID, SellerID]的OTS进行抽取任务,可以配置为:
"range": { "begin": { {"type":"INF_MIN"}, //指定deviceID最小值 {"type":"INF_MIN"} //指定deviceID最小值 }, "end": { {"type":"INF_MAX"}, //指定deviceID抽取最大值 {"type":"INF_MAX"} //指定deviceID抽取最大值 }, // 用户指定的切分点,如果指定了切分点,Job将按照begin、end和split进行Task的切分, // 切分的列只能是Partition Key(ParimaryKey的第一列) // 支持INF_MIN, INF_MAX, STRING, INT "split":[ {"type":"STRING", "value":"1"}, {"type":"STRING", "value":"2"}, {"type":"STRING", "value":"3"}, {"type":"STRING", "value":"4"}, {"type":"STRING", "value":"5"} ] }
- 必选:否
- 默认值:无
3.3 类型转换
目前OTSReader支持所有OTS类型,下面列出OTSReader针对OTS类型转换列表:
CDP 内部类型 | OTS 数据类型 |
---|---|
Long | Integer |
Double | Double |
String | String |
Boolean | Boolean |
Bytes | Binary |
- 注意,OTS本身不支持日期型类型。应用层一般使用Long报错时间的Unix TimeStamp。
4 性能报告
4.1 环境准备
4.1.1数据特征
15列String(10 Byte), 2两列Integer(8 Byte),总计168Byte/r。
4.1.2 机器参数
OTS端:3台前端机,5台后端机
CDP运行端: 24核CPU, 98GB内存
4.2 测试报告
并发数 | CDP CPU | OTS 流量 | CDP流量 | 前端QPS | 前端延时 |
---|---|---|---|---|---|
2 | 36% | 6.3M/s | 12739 rec/s | 4.7 | 308ms |
11 | 155% | 32M/s | 60732 rec/s | 23.9 | 412ms |
50 | 377% | 73M/s | 145139 rec/s | 54 | 874ms |
100 | 448% | 82M/s | 156262 rec/s | 60 | 1570ms |
5 约束限制
5.1 一致性约束
OTS是类BigTable的存储系统,OTS本身能够保证单行写事务性,无法提供跨行级别的事务。对于OTSReader而言也无法提供全表的一致性视图。例如对于OTSReader在0点启动的数据同步任务,在整个表数据同步过程中,OTSReader同样会抽取到后续更新的数据,无法提供准确的0点时刻该表一致性视图。
5.2 增量数据同步
OTS本质上KV存储,目前只能针对PK进行范围查询,暂不支持按照字段范围抽取数据。因此只能对于增量查询,如果PK能够表示范围信息,例如自增ID,或者时间戳。
自增ID,OTSReader可以通过记录上次最大的ID信息,通过指定Range范围进行增量抽取。这样使用的前提是OTS中的PrimaryKey必须包含主键自增列(自增主键需要使用OTS应用方生成。)
时间戳, OTSReader可以通过PK过滤时间戳,通过制定Range范围进行增量抽取。这样使用的前提是OTS中的PrimaryKey必须包含主键时间列(时间主键需要使用OTS应用方生成。)
最后更新:2016-11-23 16:03:59
上一篇:
ODPSReader__Reader插件_使用手册_数据集成-阿里云
下一篇:
DRDSReader__Reader插件_使用手册_数据集成-阿里云
阿里云唐超:ET医疗大脑究竟能为医疗行业带来哪些能力?
产品使用限制__用户指南_高速通道-阿里云
APP设备统计__API列表_OpenAPI 1.0_移动推送-阿里云
MQ 客户端收发 MQTT 消息__Java 接入示例_MQTT 接入(物联)_消息队列 MQ-阿里云
恶意代码扫描接口__恶意代码扫描API_API手册_移动安全-阿里云
查询数据库白名单__数据库管理_开放API_分布式关系型数据库 DRDS-阿里云
使用示例__osscmd_常用工具_对象存储 OSS-阿里云
初始化__Android SDK_SDK使用手册_消息服务-阿里云
DescribeListenerAccessControlAttribute__Listener相关API_API 参考_负载均衡-阿里云
CDN按月95计费说明__计费相关_产品使用问题_CDN-阿里云
相关内容
常见错误说明__附录_大数据计算服务-阿里云
发送短信接口__API使用手册_短信服务-阿里云
接口文档__Android_安全组件教程_移动安全-阿里云
运营商错误码(联通)__常见问题_短信服务-阿里云
设置短信模板__使用手册_短信服务-阿里云
OSS 权限问题及排查__常见错误及排除_最佳实践_对象存储 OSS-阿里云
消息通知__操作指南_批量计算-阿里云
设备端快速接入(MQTT)__快速开始_阿里云物联网套件-阿里云
查询API调用流量数据__API管理相关接口_API_API 网关-阿里云
使用STS访问__JavaScript-SDK_SDK 参考_对象存储 OSS-阿里云