从OpenTSDB到TSDB的数据迁移

更新时间:

本文主要介绍如何使用阿里巴巴的开源工具Datax实现从OpenTSDB到TSDB的数据迁移。

背景信息

下面将首先介绍DataX工具本身,以及本次迁移工作涉及到的两个插件(OpenTSDB Reader和TSDB Writer)。DataX相关使用介绍请参阅DataX的README文档

  • DataX

    DataX是阿里巴巴集团内被广泛使用的离线数据同步工具/平台,实现包括MySQL、Oracle、SqlServer、PostgreSQL、HDFS、Hive、ADS、HBase、TableStore(OTS)、MaxCompute(ODPS)、DRDS等各种异构数据源之间高效的数据同步功能。

  • OpenTSDB Reader

    OpenTSDB Reader是DataX的一个插件,实现了从OpenTSDB读取数据。

  • TSDB Writer

    TSDB Writer是DataX的一个插件,实现了将数据点写入到阿里巴巴自研TSDB数据库中。

注意事项

  • 确保与TSDB的网络是连通的。

    因为TSDB Writer写入数据的方式是调用HTTP接口(/api/put)来完成的,所以需要确保迁移任务的进程能正常访问到TSDB暴露出来的HTTP接口。否则,会报错Connect Exception异常。

  • 确保与OpenTSDB底层存储HBase的网络是连通的。

    因为OpenTSDB Reader读取数据是通过直连底层存储HBase的,所以需要确保迁移任务的进程能正常连接到HBase集群。否则,会报错Connect Exception异常。

  • 指定起止时间会自动被转为整点时刻。

    指定起止时间会自动忽略分钟和秒,转为整点时刻,例如 2019-4-18[3:35, 4:55) 会被转为 [3:00, 4:00)

操作步骤

  1. 准备以下环境和工具。

    • Linux

    • 获取JDK(1.8 以上,推荐 1.8),JDK下载链接

    • 获取Python(推荐Python 2.6.x),Python下载链接

    • OpenTSDB(目前只支持兼容2.3.x,其他版本暂不保证兼容。)

    • TSDB(目前只支持兼容 2.4.x 及以上版本,其他版本暂不保证兼容。)

    • 下载DataX及插件,DataX及插件下载链接

  2. 利用DataX自带的迁移任务,检查迁移流程能否走通。

    我们先以最简单的Stream Reader到Stream Writer为例。因为这两个插件不依赖任何的外部环境,特别适合用来检查流程是否能走通。简单介绍下这两个插件,其中Stream Reader会随机地产生字符串,而Stream Writer则会将接受到的字符串输出到控制台,以此模拟一个最简单的数据迁移过程。

    1. 工具部署。

      将下载后的安装包,解压至某个目录(作为DATAX_HOME),即可运行迁移任务。如下:

      $ cd ${DATAX_HOME}
      $ python bin/datax.py job/job.json
    2. 检查任务是否成功。

      下面是任务结束后的汇总信息,看到如下内容,即可表示迁移任务已成功完成:

      任务启动时刻:2019-04-2611:18:07
      任务结束时刻:2019-04-2611:18:17
      任务总计耗时:10s
      任务平均流量:253.91KB/s
      记录写入速度:10000rec/s
      读出记录总数:100000
      读写失败总数:0

      录制的命令行:数据迁移 Quick Start

  3. 配置和启动OpenTSDB到TSDB的迁移任务。

    1. 配置迁移任务。

      配置一个从OpenTSDB数据库同步抽取数据到TSDB的任务,命名为 opentsdb2tsdb.json,完整的配置信息如下:

      {
      "job":{
      "content":[
      {
      "reader":{
      "name":"opentsdbreader",
      "parameter":{
      "endpoint":"http://192.168.1.100:4242",
      "column":[
      "m"
      ],
      "startTime":"2019-01-01 00:00:00",
      "endTime":"2019-01-01 03:00:00"
      }
      },
      "writer":{
      "name":"tsdbhttpwriter",
      "parameter":{
      "endpoint":"http://192.168.1.101:8242"
      }
      }
      }
      ],
      "setting":{
      "speed":{
      "channel":1
      }
      }
      }
      }

      各个配置参数的详细说明如下表所示:

      OpenTSDB Reader相关参数

      名称

      类型

      是否必需

      描述

      默认值

      举例

      endpoint

      String

      OpenTSDB 的HTTP连接地址

      http://127.0.0.1:4242

      column

      Array

      数据迁移任务需要迁移的Metric列表

      []

      ["m"]

      beginDateTime

      String

      和endDateTime配合使用,用于指定哪个时间段内的数据点,需要被迁移

      2019-05-13 15:00:00

      endDateTime

      String

      和beginDateTime配合使用,用于指定哪个时间段内的数据点,需要被迁移

      2019-05-13 17:00:00

      TSDB Writer相关参数

      名称

      类型

      是否必需

      描述

      默认值

      举例

      endpoint

      String

      TSDB的HTTP连接地址

      http://127.0.0.1:8242

      batchSize

      Integer

      每次批量数据的条数,需要保证大于 0

      100

      100

      maxRetryTime

      Integer

      失败后重试的次数,需要保证大于 1

      3

      3

      ignoreWriteError

      Boolean

      多次重试后,如果该参数设置为 true,则忽略错误,继续写入;否则,则会终止写入任务

      false

      false

    2. 启动OpenTSDB 2 TSDB迁移任务。

      $ cd ${DATAX_HOME}/..
      $ ls
        datax/  datax.tar.gz  opentsdb2tsdb.json
      $ python datax/bin/datax.py opentsdb2tsdb.json
    3. 检查任务是否成功。

      下面是任务结束后的汇总信息,看到如下内容,即可表示迁移任务已成功完成:

      任务启动时刻:2019-04-2611:47:06
      任务结束时刻:2019-04-2611:47:16
      任务总计耗时:10s
      任务平均流量:98.92KB/s
      记录写入速度:868rec/s
      读出记录总数:8685
      读写失败总数:0

      录制的命令行:从 OpenTSDB 到 TSDB 数据迁移

FAQ

Q:是否支持调整迁移进程的JVM内存大小?

A:支持。以“从OpenTSDB到TSDB的数据迁移任务”为例,启动命令如下:

python datax/bin/datax.py opentsdb2tsdb.json -j "-Xms4096m -Xmx4096m"

Q:如何给TSDB设置网络白名单?

A:请参考设置网络白名单

Q:如何给HBase设置网络白名单?

A:请参考设置白名单

Q:将迁移任务运行在ECS上的用户,如何配置VPC,以及常见问题有哪些?

A:请参考ECS 安全组配置案例VPC 常见问题