datax otswriter 使用

  • 2022-07-14
  • 浏览 (1529)

OTSWriter 插件文档

1 快速介绍

OTSWriter插件实现了向OTS写入数据,目前支持三种写入方式:

  • PutRow,对应于OTS API PutRow,插入数据到指定的行,如果该行不存在,则新增一行;若该行存在,则覆盖原有行。

  • UpdateRow,对应于OTS API UpdateRow,更新指定行的数据,如果该行不存在,则新增一行;若该行存在,则根据请求的内容在这一行中新增、修改或者删除指定列的值。

  • DeleteRow,对应于OTS API DeleteRow,删除指定行的数据。

OTS是构建在阿里云飞天分布式系统之上的 NoSQL数据库服务,提供海量结构化数据的存储和实时访问。OTS 以实例和表的形式组织数据,通过数据分片和负载均衡技术,实现规模上的无缝扩展。

2 实现原理

简而言之,OTSWriter通过OTS官方Java SDK连接到OTS服务端,并通过SDK写入OTS服务端。OTSWriter本身对于写入过程做了很多优化,包括写入超时重试、异常写入重试、批量提交等Feature。

3 功能说明

3.1 配置样例

  • 配置一个写入OTS作业:
{
    "job": {
        "setting": {
        },
        "content": [
            {
                "reader": {},
                "writer": {
                    "name": "otswriter",
                    "parameter": {
                        "endpoint":"",
                        "accessId":"",
                        "accessKey":"",
                        "instanceName":"",
                        // 导出数据表的表名
                        "table":"",

                        // Writer支持不同类型之间进行相互转换
                        // 如下类型转换不支持:
                        // ================================
                        //    int    -> binary
                        //    double -> bool, binary
                        //    bool   -> binary
                        //    bytes  -> int, double, bool
                        // ================================

                        // 需要导入的PK列名,区分大小写
                        // 类型支持:STRING,INT
                        // 1. 支持类型转换,注意类型转换时的精度丢失
                        // 2. 顺序不要求和表的Meta一致
                        "primaryKey" : [
                            {"name":"pk1", "type":"string"},
                            {"name":"pk2", "type":"int"}
                        ],

                        // 需要导入的列名,区分大小写
                        // 类型支持STRING,INT,DOUBLE,BOOL和BINARY
                        "column" : [
                            {"name":"col2", "type":"INT"},
                            {"name":"col3", "type":"STRING"},
                            {"name":"col4", "type":"STRING"},
                            {"name":"col5", "type":"BINARY"},
                            {"name":"col6", "type":"DOUBLE"}
                        ],

                        // 写入OTS的方式
                        // PutRow : 等同于OTS API中PutRow操作,检查条件是ignore
                        // UpdateRow : 等同于OTS API中UpdateRow操作,检查条件是ignore
                        // DeleteRow: 等同于OTS API中DeleteRow操作,检查条件是ignore
                        "writeMode" : "PutRow"
                    }
                }
            }
        ]
    }
}

3.2 参数说明

  • endpoint

  • accessId

    • 描述:OTS的accessId

    • 必选:是

    • 默认值:无

  • accessKey

    • 描述:OTS的accessKey

    • 必选:是

    • 默认值:无

  • instanceName

    • 描述:OTS的实例名称,实例是用户使用和管理 OTS 服务的实体,用户在开通 OTS 服务之后,需要通过管理控制台来创建实例,然后在实例内进行表的创建和管理。实例是 OTS 资源管理的基础单元,OTS 对应用程序的访问控制和资源计量都在实例级别完成。

    • 必选:是

    • 默认值:无

  • table

    • 描述:所选取的需要抽取的表名称,这里有且只能填写一张表。在OTS不存在多表同步的需求。

    • 必选:是

    • 默认值:无

  • primaryKey

    • 描述: OTS的主键信息,使用JSON的数组描述字段信息。OTS本身是NoSQL系统,在OTSWriter导入数据过程中,必须指定相应地字段名称。

      OTS的PrimaryKey只能支持STRING,INT两种类型,因此OTSWriter本身也限定填写上述两种类型。

      DataX本身支持类型转换的,因此对于源头数据非String/Int,OTSWriter会进行数据类型转换。

      配置实例:

      "primaryKey" : [
                          {"name":"pk1", "type":"string"},
                          {"name":"pk2", "type":"int"}
                      ],
      
    • 必选:是

    • 默认值:无

  • column

    • 描述:所配置的表中需要同步的列名集合,使用JSON的数组描述字段信息。使用格式为

      	{"name":"col2", "type":"INT"},
      

      其中的name指定写入的OTS列名,type指定写入的类型。OTS类型支持STRING,INT,DOUBLE,BOOL和BINARY几种类型 。

      写入过程不支持常量、函数或者自定义表达式。

    • 必选:是

    • 默认值:无

  • writeMode

    • 描述:写入模式,目前支持两种模式,

      • PutRow,对应于OTS API PutRow,插入数据到指定的行,如果该行不存在,则新增一行;若该行存在,则覆盖原有行。

      • UpdateRow,对应于OTS API UpdateRow,更新指定行的数据,如果该行不存在,则新增一行;若该行存在,则根据请求的内容在这一行中新增、修改或者删除指定列的值。

      • DeleteRow,对应于OTS API DeleteRow,删除指定行的数据。

    • 必选:是

    • 默认值:无

3.3 类型转换

目前OTSWriter支持所有OTS类型,下面列出OTSWriter针对OTS类型转换列表:

DataX 内部类型 OTS 数据类型
Long Integer
Double Double
String String
Boolean Boolean
Bytes Binary
  • 注意,OTS本身不支持日期型类型。应用层一般使用Long报错时间的Unix TimeStamp。

4 性能报告

4.1 环境准备

4.1.1 数据特征

2列PK(10 + 8),15列String(10 Byte), 2两列Integer(8 Byte),算上Column Name每行大概327Byte,每次BatchWriteRow写入100行数据,所以当个请求的数据大小是32KB。

4.1.2 机器参数

OTS端:3台前端机,5台后端机

DataX运行端: 24核CPU, 98GB内存

4.2 测试报告

4.2.1 测试报告

并发数 DataX CPU DATAX流量 OTS 流量 BatchWrite前端QPS BatchWriteRow前端延时
40 1027% Speed 22.13MB/s, 112640 records/s 65.8M/s 42 153ms
50 1218% Speed 24.11MB/s, 122700 records/s 73.5M/s 47 174ms
60 1355% Speed 25.31MB/s, 128854 records/s 78.1M/s 50 190ms
70 1578% Speed 26.35MB/s, 134121 records/s 80.8M/s 52 210ms
80 1771% Speed 26.55MB/s, 135161 records/s 82.7M/s 53 230ms

5 约束限制

5.1 写入幂等性

OTS写入本身是支持幂等性的,也就是使用OTS SDK同一条数据写入OTS系统,一次和多次请求的结果可以理解为一致的。因此对于OTSWriter多次尝试写入同一条数据与写入一条数据结果是等同的。

5.2 单任务FailOver

由于OTS写入本身是幂等性的,因此可以支持单任务FailOver。即一旦写入Fail,DataX会重新启动相关子任务进行重试。

6 FAQ

相关文章

datax README 使用

datax adbpgwriter 使用

datax adswriter 使用

datax cassandrareader 使用

datax cassandrawriter 使用

datax dataxPluginDev 使用

datax drdsreader 使用

datax drdswriter 使用

datax elasticsearchwriter 使用

datax ftpreader 使用

1  赞