Addax を使用して異種データを Databend に移行する

作者: タイチョン

( 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 は、オブジェクト ストレージに基づいてリアルタイム分析も実行できる、オープン ソースの柔軟で低コストの新しいデータ ウェアハウスです。クラウドネイティブのデータ ウェアハウス ソリューションを一緒に探索して、新世代のオープン ソース データ クラウドを作成しましょう。

{{o.name}}
{{m.name}}

おすすめ

転載: my.oschina.net/u/5489811/blog/7180156