このトピックでは、Alibaba のオープンソースツールである DataX を使用して、リレーショナルデータベースから LindormTSDB にデータを移行する方法について説明します。
背景情報
DataX は、Alibaba Group 内で広く使用されているオフラインデータ同期ツールです。MySQL、Oracle、SQL Server、PostgreSQL、HDFS、Hive、ADS、HBase、TableStore (OTS)、MaxCompute (ODPS)、DRDS などの異種データソース間で効率的なデータ同期を提供します。DataX の使用方法の詳細については、DataX の README ドキュメントをご参照ください。
このトピックでは、DataX ツールを紹介し、MySQL を例として LindormTSDB にデータを移行する方法を説明します。この移行タスクには、MySQL Reader と TSDB Writer の 2 つのプラグインが関わります。
MySQL Reader
MySQL Reader は、MySQL からデータを読み取るための DataX プラグインです。
TSDB Writer
TSDB Writer は、データポイントを LindormTSDB に書き込むための DataX プラグインです。
注意事項
LindormTSDB へのネットワーク接続の確保
TSDB Writer は、/api/mput および /api/put HTTP API を呼び出してデータを書き込みます。移行タスクが LindormTSDB によって公開されている HTTP API にアクセスできることを確認してください。そうしないと、Connect Exception エラーが発生します。
MySQL へのネットワーク接続の確保
MySQL Reader は Java Database Connectivity (JDBC) を使用してデータを読み取ります。移行タスクが MySQL によって公開されている JDBC インターフェイスにアクセスできることを確認してください。そうでない場合、Connect Exception エラーが発生します。
事前準備
環境を準備します。
DataX とそのプラグインをダウンロードします。
パッケージは、次のリンクからダウンロードできます。
DataX に含まれるテスト移行タスクを使用して、移行プロセスが正しく機能することを確認します。
この例では、単純な Stream Reader から Stream Writer へのタスクを使用します。これら 2 つのプラグインは外部環境に依存しないため、プロセスが機能していることを確認するのに最適です。Stream Reader はランダムに文字列を生成します。Stream Writer は受信した文字列をコンソールに出力します。これにより、基本的なデータ移行プロセスをシミュレートします。
ツールのデプロイ
ダウンロードしたインストールパッケージをディレクトリに解凍します。このディレクトリは DATAX_HOME として使用されます。次に、テスト移行タスクを実行します。
$ cd ${DATAX_HOME}
$ python bin/datax.py job/job.jsonタスクの成功確認
タスクが完了すると、以下のサマリー情報が表示されます。この出力は、移行タスクが成功したことを示します。
Task start time : 2019-04-26 11:18:07
Task end time : 2019-04-26 11:18:17
Total time : 10s
Average traffic : 253.91KB/s
Record write speed : 10000rec/s
Total records read : 100000
Total read/write failures : 0
MySQL から LindormTSDB への移行タスクの設定と開始
Stream Reader から Stream Writer への移行タスクで DataX プロセスが正しく機能することを確認した後、MySQL Reader から TSDB Writer への移行タスクを開始できます。
パラメーター
設定項目は以下の通りです。
MySQL Reader のパラメーター
名前 | タイプ | 必須 | 説明 | デフォルト値 | 例 |
jdbcUrl | String | はい | データベースの JDBC 接続文字列。 | なし |
|
username | String | はい | データソースのユーザー名。 | なし |
|
password | String | はい | 指定されたユーザー名のパスワード。 | なし |
|
table | String | はい | 同期するテーブル。 | なし |
|
column | Array | はい | テーブルから同期するカラム。 |
|
|
splitPk | String | いいえ | `splitPk` を指定すると、システムは指定されたフィールドをデータパーティションに使用します。 | 空 |
|
TSDB Writer のパラメーター
名前 | タイプ | 必須 | 説明 | デフォルト値 | 例 |
sourceDbType | String | いいえ | 有効な値は `TSDB` と `RDB` です。`TSDB` は OpenTSDB、InfluxDB、Prometheus、TimeScale などの時系列エンジンを指します。`RDB` は MySQL、Oracle、PostgreSQL、DRDS などのリレーショナルデータベースを指します。 |
|
|
column | Array | はい | 同期するカラム。 |
|
|
columnType | Array | はい | リレーショナルデータベーステーブルのフィールドがマップされる LindormTSDB のタイプ。サポートされているタイプは次のとおりです:timestamp:フィールドはタイムスタンプです。tag:フィールドはタグです。metric_num:メトリックの値は数値型です。metric_string:メトリックの値は文字列です。 |
|
|
endpoint | String | はい | LindormTSDB の IP アドレスとポート | なし |
|
multiField | Bool | はい | マルチフィールドモードでデータを書き込むかどうかを指定します。このパラメーターを `true` に設定します。 | false | true |
table | String | はい | LindormTSDB にインポートするテーブルの名前。 | なし | table |
username | String | いいえ | データベースのユーザー名。 | なし | tsdbuser |
password | String | いいえ | データベースのパスワード。 | なし | tsdbpsw |
ignoreWriteError | Bool | はい | 書き込みエラーを無視する | false | true |
database | String | いいえ | TSDB にインポートするデータベースの名前 | default | default |
移行タスクの設定
MySQL データベースから LindormTSDB にデータを同期するタスクを設定します。設定ファイルに mysql2tsdb.json という名前を付けます。完全な設定は次のとおりです。各パラメーターの詳細な説明については、「パラメーター」をご参照ください。
{
"job": {
"content": [
{
"reader": {
"name": "mysqlreader",
"parameter": {
"column": [
"name",
"type",
"create_time",
"price",
"description",
"available"
],
"connection": [
{
"jdbcUrl": [
"jdbc:mysql://127.0.0.1:3306/datax"
],
"table": [
"book"
]
}
],
"password": "xxx",
"splitPk": "id",
"username": "root"
}
},
"writer": {
"name": "tsdbwriter",
"parameter": {
"column": [
"name",
"type",
"create_time",
"price",
"description",
"available"
],
"columnType": [
"tag",
"tag",
"timestamp",
"field_double",
"field_string",
"field_bool"
],
"sourceDbType": "RDB",
"endpoint": "http://localhost:8242",
"table": "my_book",
"multiField": "true",
"username":"xxx",
"password":"xxx",
"ignoreWriteError":"false",
"database":"default"
}
}
}
],
"setting": {
"speed": {
"channel": 1
}
}
}
} カラムの順序を一致させる
TSDB Writer プラグインの `column` パラメーターのフィールドの順序が、MySQL Reader プラグインの `column` パラメーターの順序と同じであることを確認してください。そうでない場合、データが乱れます。
MySQL から LindormTSDB への移行タスクの開始
$ cd ${DATAX_HOME}/..
$ ls
datax/ datax.tar.gz mysql2tsdb.json
$ python datax/bin/datax.py mysql2tsdb.json
タスクの成功確認
タスクが完了すると、以下のサマリー情報が表示されます。この出力は、移行タスクが成功したことを示します。
Task start time : 2019-05-21 18:25:16
Task end time : 2019-05-21 18:25:27
Total time : 11s
Average traffic : 3B/s
Record write speed : 0rec/s
Total records read : 3
Total read/write failures : 0
よくある質問
Q:移行プロセスの JVM メモリサイズを調整できますか?
A:はい、できます。たとえば、MySQL から LindormTSDB にデータを移行するには、次の開始コマンドを使用します。
python datax/bin/datax.py mysql2tsdb.json -j "-Xms4096m -Xmx4096m" Q:LindormTSDB のネットワークホワイトリストを設定するにはどうすればよいですか?
A:詳細については、「ホワイトリストの設定」をご参照ください。
Q:ECS インスタンスで移行タスクを実行する場合、VPC の設定方法と一般的な問題は何ですか?
A:詳細については、「」、「ECS セキュリティグループ構成のユースケース」、および「VPC よくある質問」をご参照ください。