作者: タイチョン
( https://github.com/TCeason ) Databend R&D エンジニア
インターネット アプリケーションがますます複雑になっている現在、どの企業もさまざまなデータベースを所有しています。通常、OLTP を実行するために最適なハードウェアが使用され、サブデータベースとサブテーブルでさえも OLTP で使用されてビジネスが完了します。これは、一部の分析、集計、および並べ替え操作にとって非常に面倒です。これには、異種データベースのデータ同期要件もあります. 今日は、2 つの強力なツールの紹介に焦点を当てます: 異種データ移行: Addax とクラウドネイティブのデータ ウェアハウス Databend を組み合わせて、異種データベースのデータ マージと分析を実現します。
Addax ( https://github.com/wgzhao/Addax ) は、リレーショナル データベース (MySQL、PostgreSQL、Oracle など)、HDFS、Hive、安定した効率的なデータ同期機能を備えたHBase、FTP、およびその他の異種データソース。
Databend ( https://github.com/datafuselabs/databend ) は、企業がコストを削減し、効率を高めることを可能にする、オープン ソースで弾力性のある負荷対応の最新のクラウド データ ウェアハウスです。前回の記事では、Databend をすばやくデプロイする方法を紹介しました ( https://www.databend.cn/blog/deploy-databend-on-minio )。
なぜ Addax は Datax を選ばなかったのでしょうか? 実は今回このプロジェクトを立ち上げた理由は、元のユーザーの環境に Clickhouse があり、Datax が Clickhose の読み書きをサポートしていなかったため、異種移行ツールである Addax のサポートを優先したためです。 . 簡単な演習を通して Addax の使い方を学び、いくつかの高度なケースを通じて Addax の魅力を紹介しましょう。
この記事では、実験の例として Addax の mysqlreader プラグインのみを取り上げ、databendwriter は Addax が提供するすべてのリーダー プラグインをサポートします。
1. Addaxの基本的な使い方
1.1. Addax のインストール
# more info https://wgzhao.github.io/Addax/4.0.11/
wget https://github.com/wgzhao/Addax/releases/download/4.0.11/addax-4.0.11.tar.gz;
tar xvf addax-4.0.11.tar.gz;
Addax は、Docker のインストール ( https://github.com/wgzhao/Addax#use-docker-image ) とコンパイルのインストール ( https://github.com/wgzhao/Addax#compile-and-package ) もサポートしています。
1.2. デモ (MySQL から Databend まで)
MySQL サーバーで移行ユーザーを作成します。(この例で移行するテーブルは db.tb01 です)
mysql> create user 'mysqlu1'@'%' identified by '123';
mysql> grant all on *.* to 'mysqlu1'@'%';
mysql> create database db;
mysql> create table db.tb01(id int, col1 varchar(10));
mysql> insert into db.tb01 values(1, 'test1'), (2, 'test2'), (3, 'test3');
Databend で対応するテーブル構造を作成します。(MySQL の db.tb01 から Databend の migrate_db.tb01 にデータを移行します)
databend> create database migrate_db;
databend> create table migrate_db.tb01(id int null, col1 String null);
次の構成を実行した後、移行を開始できます。
$ cd addax-4.0.11/bin;
$ cat <<EOF > ./mysql2databend.json
{
"job": {
"setting": {
"speed": {
"channel": 4
}
},
"content": {
"writer": {
"name": "databendwriter",
"parameter": {
"preSql": [
"truncate table @table"
],
"postSql": [
],
"username": "u1",
"password": "123",
"database": "migrate_db",
"table": "tb01",
"jdbcUrl": "jdbc:mysql://127.0.0.1:3307/migrate_db",
"loadUrl": ["127.0.0.1:8000","127.0.0.1:8000"],
"fieldDelimiter": "\\x01",
"lineDelimiter": "\\x02",
"column": ["*"],
"format": "csv"
}
},
"reader": {
"name": "mysqlreader",
"parameter": {
"username": "mysqlu1",
"password": "123",
"column": [
"*"
],
"connection": [
{
"jdbcUrl": [
"jdbc:mysql://127.0.0.1:3306/db"
],
"driver": "com.mysql.jdbc.Driver",
"table": [
"tb01"
]
}
]
}
}
}
}
}
EOF
$ ./addax.sh -L debug ./mysql2databend.json
1.3. データの検証
databend> select * from migrate_db.tb01;
+------+-------+
| id | col1 |
+------+-------+
| 1 | test1 |
| 2 | test2 |
| 3 | test3 |
+------+-------+
その他の使用方法については、https: //wgzhao.github.io/Addax/4.0.11/writer/databendwriter/を参照してください。
1.4. まとめ
上記の例は、Addax を介してテーブルを Databend に移行したものですが、簡単な例を通して Addax の一般的なプロセスを感じることができます。
しかし、Addax はこのデモよりもはるかに強力です。さらに、Addax の強みは、パラメーターを使用して構成ファイルを制御できることです。これにより、構成の移行の実装が容易になり、SQL を渡してデータ移行のために指定された間隔を読み取ることさえできます。
2. Addax の高度な使用
Addax 構成フレームワークは、https: //wgzhao.github.io/Addax/4.0.11/setupJob/を参照できます。
ソースとターゲットのみを使用する場合、構成でこの部分に注意を払う必要があります。
"content": {
"reader": {},
"writer": {},
}
さらに、Addax は DataX の設計と使用方法を指し、サポートされている DataX の構文は Addax で使用できます。
参考までに、本番環境で使用できる例をいくつか挙げてみましょう。
-
Case1: 本番環境の 10 テーブルのデータが Databend で 1 つのテーブルにマージされる
-
ケース 2: MySQL のすべてのテーブルを Databend に移行する
-
Case3: SQL を指定して元のテーブルのデータを読み込み、指定したテーブルに移行する
ケース 1: 本番環境の 10 個のテーブルのデータが Databend の 1 つのテーブルにマージされる
この要件は、本番環境では比較的一般的です.分析のためにオンライン データを 1 か所に収集する必要があります.これは、Databend のオブジェクト ベースのストレージと高い圧縮機能を利用することができます. ソースが MySQL データベースで、ターゲットが Databend であると仮定すると、以下は単純化された構成です。
"reader": {
"name": "mysqlreader",
...
"connection": [
...
"table": [
'${dst_table}'
]
]
},
"writer": {
"name": "databendwriter",
...
"table": '${src_table}',
...
}
この構成に基づいて、呼び出すスクリプトを作成する必要があります.たとえば、移行するプレフィックスは 1 から 10 までの sbtest であり、最終的に sbtest にマージされます.呼び出し方法は次のとおりです。
pre_tb="sbtest"
dst_tb="sbtest"
for t in `seq 1 10`
do
tb=$pre_tb$t
echo $tb
./bin/addax.sh ./job/my2databend.json -p "-Dsrc_table=$tb -Ddst_table=$dst_tb"
done
mysql2databend.json 配置参考:databend-workshop/mysql2databend.json at main · wubx/databend-workshop (https://github.com/wubx/databend-workshop/blob/main/addax_mysql2databend/mysql2databend.json)
ケース 2: MySQL のすべてのテーブルを Databend に移行する
上記のケースに基づいて、おそらくルーチンをすでに理解していると推定されます。MySQL から Databend への転送が上記の構成ファイルに基づく場合は、リスト コントロールに移行するテーブルを編成するだけで済みます。完全なデータベース移行の難しさは、テーブル構造の生成にあります.Databend テーブル構造の生成には、フィールド名とタイプのみが必要です.
テーブル構造生成のスクリプト リファレンス: https://github.com/wubx/databend-workshop/blob/main/addax_mysql2databend/mysql_str2databend.py
呼び出し方法:
#python3 g_mysql.py -H MySQL_IP -P MySQL_PORT -u MySQL_User -p mysql_password -d dbname |mysql -h databend_ip -Pdatabend_port -udatabend_user dbname
python3 g_mysql.py -H 172.21.16.9 -P 3306 -u root -p vgypH8nc -d wubx |mysql -h 127.0.0.1 -P3307 -uroot wubx
カスタム移行構成
"reader": {
"name": "mysqlreader",
...
"connection": [
...
"table": [
'${src_table}'
]
]
},
"writer": {
"name": "databendwriter",
...
"table": '${src_table}',
...
}
呼び出し方法
pre_tb="sbtest"
for t in `seq 1 10`
do
tb=$pre_tb$t
echo $tb
./bin/addax.sh ./job/mysql2databend.json -p "-Dsrc_table=$tb"
done
ケース 3: SQL を指定して元のテーブルのデータを読み取り、指定したテーブルに移行する
このシナリオは通常の小規模なバッチ移行に適していますが、注文データの移行など、元のテーブルに時間フィールドが必要です。ここでは Addax データ読み込みで querySQL を指定する機能を利用したい
"content": {
"reader": {
"name": "mysqlreader",
"parameter": {
...
"connection": [
{
"querySql": ["$DS"],
...
}
]
}
},
"writer": {
"name": "databendwriter",
...
"table": '${DT}',
...
}
呼び出し方法:
# 利用 DS 传入读取的 SQL ,通过 DT 指定写入的表名
python3 ./bin/addax.py job/msql.json -p "-DDS='select * from sbtest1 limit 10' -DDT=sbtest"
まとめ
この部分では、Addax のデータ読み取り機能をいくつかのケースで示します。基本的には、柔軟な組み合わせにより、生産におけるさまざまなニーズを満たすことができます。実際の使用では、高速化したい場合は、タスクの構成と autoPK の機能を調整する必要があります。さらに、Addax と Databend を使用して、データベースのアーカイブ ニーズに対応することもできます。
Databend は MySQL プロトコル ( https://databend.rs/doc/integrations/api/mysql-handler ) と互換性があります。Databend を ODS レイヤーとして使用し、元のビッグデータ エコロジーと組み合わせて使用したい場合は、 Addax を使用して mysql ( https://wgzhao.github.io/Addax/4.0.11/reader/mysqlreader/ ) リーダー ( https://wgzhao.github.io/Addax/4.0.11/reader/ ) を直接使用することもできますmysqlreader/ ) Databend でデータを読み取るためのプラグイン。
3.使用上の注意
Addax を使用する特定のデータベースについては、公式のリーダーまたはライターの説明を読み、実際の状況に応じて適切な構成を決定することをお勧めします。In the case here Databend uses the Streaming_load interface to write data. If the single-node databend-query is under pressure, you can also consider multiple databend-queries. Addax は複数の databend-query 書き込みもサポートしています.
上記はすべての参考資料です. それでもニーズを満たすことができない場合、または Addax と Databend がさらに必要な場合は、wx Xiao D: Databend とのオンライン通信を手配することもできます.
私達と接続
Databend は、オブジェクト ストレージに基づいてリアルタイム分析も実行できる、オープン ソースの柔軟で低コストの新しいデータ ウェアハウスです。クラウドネイティブのデータ ウェアハウス ソリューションを一緒に探索して、新世代のオープン ソース データ クラウドを作成しましょう。