このトピックでは、DataX を使用して MySQL データベースから Lindorm 時系列データベース (TSDB) データベースにデータを移行する方法について説明します。DataX は、Alibaba Group によって開発されたオープンソースツールです。
背景情報
このトピックでは、DataX を使用して MySQL データベースから TSDB データベースにデータを移行する方法について説明します。DataX は、Alibaba Group によって開発されたオープンソースツールです。
DataX の使用方法の詳細については、「README」をご参照ください。
このセクションでは、DataX、MySQL Reader、および TSDB Writer について説明します。MySQL Reader と TSDB Writer は、データの移行に使用されるプラグインです。
DataX
DataX は、Alibaba Group 内でオフラインデータの同期に広く使用されているツールです。DataX を使用すると、さまざまな種類の異なるデータソース間でデータを効率的に同期できます。DataX は、MySQL、Oracle、SQL Server、PostgreSQL、Hadoop Distributed File System (HDFS)、Hive、AnalyticDB for MySQL、HBase、Tablestore (OTS)、MaxCompute、および PolarDB-X データソースをサポートしています。MaxCompute の以前の名前は Open Data Processing Service (ODPS) です。
MySQL Reader
MySQL Reader は、DataX によって提供されるプラグインです。MySQL Reader を使用して、MySQL データベースからデータをクエリできます。
TSDB Writer
TSDB Writer は、DataX によって提供されるプラグインです。TSDB Writer を使用して、Alibaba Cloud によって開発された TSDB データベースにデータポイントを書き込むことができます。
クイックスタート
手順 1:環境を構成する
Linux
Java Development Kit (JDK) 1.8 以降を使用します。JDK 1.8 を使用することをお勧めします。
Python 2.6.x を使用することをお勧めします。
DataX は MySQL 5.x のみに対応しています。MySQL のバージョンが 5.x 以外の場合、互換性の問題が発生する可能性があります。
DataX は TSDB 2.4.x 以降のみに対応しています。以前のバージョンの TSDB を使用すると、互換性の問題が発生する可能性があります。
手順 2:DataX と関連プラグインをダウンロードする
手順 3:DataX によって提供される組み込みスクリプトを使用して、データが想定どおりに移行できるかどうかをテストする
テストでは、Stream Reader と Stream Writer プラグインが使用されます。Stream Reader と Stream Writer は使いやすく、外部依存関係を必要としません。このように、Stream Reader と Stream Writer を使用して、データが想定どおりに移行できるかどうかをテストできます。Stream Reader と Stream Writer を使用して、単純なデータ移行のプロセスをシミュレートできます。Stream Reader はランダムな文字列を生成します。Stream Writer は文字列を受信し、CLI に出力します。
DataX をインストールする
インストールパッケージを DATAX_HOME に展開します。次に、datax.py スクリプトを実行して移行タスクを開始します。
cd ${DATAX_HOME}
python bin/datax.py job/job.json
データが想定どおりに移行されたかどうかを確認する
データが想定どおりに移行された場合に返される概要情報の例を次に示します。
タスクの開始時刻 : 2019-04-26 11:18:07
タスクの終了時刻 : 2019-04-26 11:18:17
実行時間 : 10秒
平均トラフィック : 253.91KB/秒
書き込み速度 : 10000レコード/秒
取得レコード数 : 100000
読み取りおよび書き込みの失敗 : 0
サンプルコードの詳細については、「データ移行のクイックスタート」をご参照ください。
手順 4:MySQL データベースから TSDB データベースにデータを移行するタスクを構成して開始する
手順 3 では、Stream Reader と Stream Writer を使用すると、データが想定どおりに移行されます。移行結果から、DataX を使用してデータを移行できることがわかります。この場合、MySQL Reader と TSDB Writer を使用して、MySQL データベースから TSDB データベースにデータを移行できます。
データ移行タスクを構成する
mysql2tsdb.json
という名前のタスクを構成して、MySQL データベースから TSDB データベースにデータを移行します。次のサンプルコードを使用してタスクを構成できます。パラメータの詳細については、「パラメータ」セクションをご参照ください。
{
"job": {
"content": [
{
"reader": {
"name": "mysqlreader",
"parameter": {
"column": [
"name",
"type",
"create_time",
"price"
],
"connection": [
{
"jdbcUrl": [
"jdbc:mysql://127.0.0.1:3306/datax"
],
"table": [
"book"
]
}
],
"password": "yuzhouwan",
"splitPk": "id",
"username": "root"
}
},
"writer": {
"name": "tsdbwriter",
"parameter": {
"column": [
"name",
"type",
"create_time",
"price"
],
"columnType": [
"tag",
"tag",
"timestamp",
"metric_num"
],
"sourceDbType": "RDB",
"tsdbAddress": "localhost",
"tsdbPort": 8242
}
}
}
],
"setting": {
"speed": {
"channel": 1
}
}
}
}
MySQL データベースから TSDB データベースにデータを移行するタスクを開始する
cd ${DATAX_HOME}/..
ls
datax/ datax.tar.gz mysql2tsdb.json
python datax/bin/datax.py mysql2tsdb.json
データが想定どおりに移行されたかどうかを確認する
データが想定どおりに移行された場合に返される概要情報の例を次に示します。
タスクの開始時刻 : 2019-05-21 18:25:16
タスクの終了時刻 : 2019-05-21 18:25:27
実行時間 : 11秒
平均トラフィック : 3B/秒
書き込み速度 : 0レコード/秒
取得レコード数 : 3
読み取りおよび書き込みの失敗 : 0
サンプルコードの詳細については、「MySQL データベースから TSDB データベースへのデータの移行」をご参照ください。
パラメータ
次の表にパラメータを示します。
MySQL Reader のパラメータ
パラメータ | タイプ | 必須 | 説明 | デフォルト値 | 例 |
---|---|---|---|---|---|
jdbcUrl | String | はい | Java Database Connectivity (JDBC) が MySQL データベースへの接続に使用するデータベース URL。 | なし |
|
username | String | はい | MySQL データベースへの接続に使用するユーザー名。 | なし |
|
password | String | はい | MySQL データベースへの接続に使用するパスワード。 | なし |
|
table | String | はい | 移行するデータを含むテーブル。 | なし |
|
column | Array | はい | 移行する列の名前。 |
|
|
splitPk | String | いいえ | テーブルシャーディングに使用されるシャードキー。 splitPk 値を構成すると、指定された値に基づいてテーブルがシャーディングされます。 | なし |
|
TSDB Writer のパラメータ
パラメータ | タイプ | 必須 | 説明 | デフォルト値 | 例 |
---|---|---|---|---|---|
sourceDbType | String | いいえ | 有効な値は TSDB と RDB です。TSDB 値は、OpenTSDB、InfluxDB、Prometheus、TimescaleDB など、時系列データを処理するシステムを指定します。RDB 値は、MySQL、Oracle、PostgreSQL、PolarDB-X など、互いに関連するデータポイントを処理するシステムを指定します。 |
|
|
column | Array | はい | 移行する列の名前。 |
|
|
columnType | Array | はい | 列が移行された後の TSDB データベースの列のデータ型。有効な値:timestamp、tag、metric_num、metric_string。値 timestamp は、列にタイムスタンプが含まれていることを指定します。値 tag は、列にタグが含まれていることを指定します。値 metric_num は、列に数値データ型のデータが含まれていることを指定します。値 metric_string は、列に文字列データ型のデータが含まれていることを指定します。 |
|
|
tsdbAddress | String | はい | TSDB データベースの IP アドレス。 | なし |
|
tsdbPort | int | はい | TSDB データベースによって使用されるポート。 | なし | 8242 |
batchSize | int | いいえ | 同時に移行するデータレコードの数。値は 0 より大きい整数である必要があります。 | 100 | 100 |
注
移行タスクの各プロセスが TSDB データベースにアクセスできることを確認してください。
TSDB Writer は HTTP エンドポイント /api/put
を呼び出してデータを書き込みます。データを移行する必要がある場合は、移行タスクの各プロセスが TSDB データベースによって提供される HTTP エンドポイントにアクセスできることを確認してください。そうでない場合、接続例外が報告されます。
移行タスクの各プロセスが MySQL データベースにアクセスできることを確認してください。
MySQL Reader は JDBC を使用してデータを読み取ります。データを移行する必要がある場合は、移行タスクの各プロセスが MySQL データベースによって提供される JDBC API にアクセスできることを確認してください。そうでない場合、接続例外が報告されます。
TSDB Writer と MySQL Reader で構成されている列名の順序は一致している必要があります。
TSDB Writer で構成されている列名の順序は、MySQL Reader で構成されている列名の順序と同じである必要があります。そうでない場合、データは想定どおりに処理されません。
FAQ
移行プロセスの Java Virtual Machine (JVM) メモリサイズを変更できますか?
はい、移行プロセスの JVM メモリサイズを変更できます。MySQL データベースから TSDB データベースにデータを移行するタスクの JVM メモリサイズを変更する場合は、次のコマンドを実行します。
python datax/bin/datax.py mysql2tsdb.json -j "-Xms4096m -Xmx4096m"
TSDB データベースのホワイトリストに IP アドレスを追加するにはどうすればよいですか?
TSDB ドキュメントの説明に基づいて、TSDB データベースのホワイトリストに IP アドレスを追加できます。[クイックスタート] > [IP アドレスホワイトリストの設定] を選択して、説明を表示できます。
移行タスクが Elastic Compute Service (ECS) インスタンスで実行されている場合、仮想プライベートクラウド (VPC) をどのように構成すればよいですか?また、発生する可能性のある一般的な問題は何ですか?
TSDB ドキュメントの「ECS セキュリティグループのユースケース」と「VPC に関する FAQ」のトピックから、VPC を構成し、発生する可能性のある一般的な問題について学ぶことができます。