1.DataXの紹介
DataX は Alibaba Cloud DataWorks データ統合のオープン ソース バージョンであり、主にデータ間のオフライン同期を実現するために使用されます。DataX は、リレーショナル データベース (MySQL、Oracle など)、HDFS、Hive、ODPS、HBase、FTP などを含む、さまざまな異種データ ソース (つまり、異なるデータベース) 間の安定した効率的なデータ同期の実現に取り組んでいます。
異種データ ソースの同期問題を解決するために、DataX は複雑なメッシュ同期リンクを星形のデータ リンクに変え、DataX はさまざまなデータ ソースを中間伝送キャリアとして接続する役割を担います。このデータ ソースを DataX に接続するだけで、既存のデータ ソースとシームレスなデータとして同期できます。
1. DataX3.0 フレームワークの設計
DataX は、フレームワーク + プラグイン アーキテクチャを採用しています。これは、リーダー/ライター プラグインと呼ばれるデータ ソースの読み取りと書き込みを同期フレームワーク全体に抽象化します。
2. DataX3.0 コア アーキテクチャ
DataX は、ジョブと呼ばれる単一のデータ同期ジョブを完了します. DataX がジョブを受信すると、ジョブ同期プロセス全体を完了するためのプロセスが開始されます. DataX ジョブ モジュールは、単一のジョブの中央管理ノードであり、データ クリーニング、サブタスクの分割、タスク グループの管理などの機能を実行します。
DataX ジョブが開始されると、同時実行を容易にするために、さまざまなソースのセグメンテーション戦略に従ってジョブが複数の小さなタスク (サブタスク) に分割されます。
次に、DataX ジョブはスケジューラ モジュールを呼び出して、構成された同時タスク数に従って、分割されたタスクを TaskGroup (タスク グループ) に再アセンブルします。
各 Task は TaskGroup によって開始され、Task が開始された後、Reader --> Channel --> Writer スレッドが固定的に開始され、タスクの同期が完了します。
DataX ジョブが開始された後、ジョブは TaskGroup を監視します. すべての TaskGroup が完了すると、ジョブは正常に終了します (異常終了した場合、値は 0 ではありません)。
3. DataX スケジューリング プロセス
まず、DataX ジョブ モジュールは、サブデータベースとサブテーブルに従っていくつかのタスクに分割され、構成された同時ユーザーの数に応じて割り当てられる必要があるタスク グループの数を計算します; タスク (タスク) を実行します。
次に、DataX を使用してデータ同期を実現します
たとえば、MySQL から MySQL への同期用のテンプレートを生成するには:
#输出mysql配置模版
[root@192 bin]# python /usr/local/datax/bin/datax.py -r mysqlreader -w mysqlwriter > /usr/local/datax/job/mysql2mysql.json
#根据模板编写 mysql2mysql.json文件
{
"job": {
"content": [
{
"reader": {
"name": "mysqlreader",
"parameter": {
"column": ["id","name"], #"*"表示所有字段
"connection": [
{
"jdbcUrl": ["jdbc:mysql://x.x.x.210:3306/mytest"],
"table": ["user"]
}
],
"password": "root",
"username": "root"
}
},
"writer": {
"name": "mysqlwriter",
"parameter": {
"column": ["id","name"],
"connection": [
{
"jdbcUrl": "jdbc:mysql://192.168.88.192:3306/mytest",
"table": ["user"]
}
],
"password": "root",
"username": "root",
"writeMode": "insert"
}
}
}
],
"setting": {
"speed": {
"channel": "6"
}
}
}
}
確認:
[root@192 job]# python /usr/local/datax/bin/datax.py mysql2mysql.json
2022-04-24 17:39:03.445 [job-0] INFO JobContainer -
任务启动时刻 : 2022-04-24 17:38:49
任务结束时刻 : 2022-04-24 17:39:03
任务总计耗时 : 14s
任务平均流量 : 0B/s
记录写入速度 : 0rec/s
读出记录总数 : 3
读写失败总数 : 0
3. DataX-WEB のインストールと展開
1.DataX-WEB
https://github.com/WeiYe-Jing/datax-web
2. インストール パッケージを解凍します。
選択したインストール ディレクトリで、インストール パッケージを解凍します。
[root@192 ~]# tar -zxvf datax-web-2.1.2.tar.gz -C /usr/local/dataxweb
3. msyql にログインしてデータベースを構築する
次のワンクリック インストールと展開の準備をします。ここで構築したライブラリは dataxweb です (自分で定義し、一貫性を保つだけです)。
mysql> データベース dataxweb を作成します。
4. ワンクリック インストール スクリプトを実行する
解凍したディレクトリに入り、bin ディレクトリの下にある install.sh ファイルを見つけます。対話型インストールを選択した場合は、直接実行します。
[root@192 dataxweb]# cd bin/
[root@192 bin]# pwd
/usr/local/dataxweb/bin
[root@192 bin]# ./install.sh
次に、プロンプトに従います。データベースの初期化が含まれます. mysql コマンドがサービスにインストールされている場合、インストール スクリプトの実行中に次のリマインダーが表示されます:
Scan out mysql command, so begin to initalize the database
Do you want to initalize database with sql: [{INSTALL_PATH}/bin/db/datax-web.sql]? (Y/N)y
Please input the db host(default: 127.0.0.1):
Please input the db port(default: 3306):
Please input the db username(default: root):
Please input the db password(default: ): root
Please input the db name(default: dataxweb)
プロンプトに従って、データベースのアドレス、ポート番号、ユーザー名、パスワード、およびデータベース名を入力します。ほとんどの場合、初期化はすぐに完了します。
mysql コマンドがサービスにインストールされていない場合は、ディレクトリ内の /bin/db/datax-web.sql スクリプトを使用して手動で実行し、完了後に関連する構成ファイルを変更できます。
vi modules/datax-admin/conf/bootstrap.properties
#Database
DB_HOST=127.0.0.1
DB_PORT=3306
DB_USERNAME=root
DB_PASSWORD=root
DB_DATABASE=dataxweb
特定の状況に応じて、対応する値を設定できます。
対話モードでは、各モジュールのパッケージ圧縮パッケージの解凍と configure 構成スクリプトの呼び出しの確認がユーザーに求められます. インストールが成功したかどうかは、プロンプトに従って確認できます. インストールが失敗した場合、もう一度試すことができます; インタラクティブモードを使用したくない場合は、にスキップしてください 確認プロセスの後、次のコマンドを実行してインストールします
./bin/install.sh --force
5. その他の構成
-
メールサービス
プロジェクト ディレクトリ:modules/datax-admin/bin/env.properties
メール サービスを構成します (スキップ可能)。MAIL_USERNAME="" MAIL_PASSWORD=""
このファイルには、server.port などのデフォルトの設定パラメータが含まれています。詳細については、ファイルを確認してください。
-
PYTHON_PATHのパスを指定
vim modules/datax-executor/bin/env.properties
### 执行datax的python脚本地址
PYTHON_PATH=/usr/local/datax/bin/datax.py
### 保持和datax-admin服务的端口一致;默认是9527,如果没改datax-admin的端口,可以忽略
DATAX_ADMIN_PORT=
このファイルには、executor.port、json.path、data.path など、いくつかのデフォルトの構成パラメーターが含まれています。詳細については、ファイルを確認してください。
6. サービスを開始する
6.1 ワンクリックですべてのサービスを開始
[root@192 dataxweb]# cd /usr/local/dataxweb/
[root@192 dataxweb]# ./bin/start-all.sh
一部のモジュールは、起動に失敗したり、途中で動かなくなったりする場合がありますが、繰り返し実行をやめることができます。モジュールのサービス ポート番号を変更する必要がある場合は、次のようにします。
vi ./modules/{module_name}/bin/env.properties
SERVER_PORT 構成項目を見つけて、その値を変更します。もちろん、単一のモジュール サービスを開始することもできます。
./bin/start.sh -m {module_name}
module_name可以为datax-admin或datax-executor
6.2 ワンクリックですべてのサービスを停止
[root@192 dataxweb]# cd /usr/local/dataxweb/
[root@192 dataxweb]# ./bin/stop-all.sh
もちろん、モジュール サービスを個別に停止することもできます。
./bin/stop.sh -m {モジュール名}
6.3 ビュー サービス
Linux 環境で JPS コマンドを使用して、DataXAdminApplication プロセスと DataXExecutorApplication プロセスが表示されるかどうかを確認します。存在する場合は、プロジェクトが正常に実行されていることを意味します。
プロジェクトの起動に失敗した場合は、起動ログを確認してください。
modules/datax-admin/bin/console.out
或者
modules/datax-executor/bin/console.out
4.DataX-WEB操作
1.フロントエンドインターフェース
展開が完了したら、ブラウザに http://ip:port/index.html と入力して、対応するメイン インターフェイスにアクセスします (ip は datax-admin が展開されているサーバーの IP であり、port は指定された実行ポート 9527 です)。 datax-admin 用)
システムに直接アクセスするには、ユーザー名 admin パスワード 123456 を入力します
2.datax-web API
datax-web のデプロイが成功したら、datax-web API 関連のコンテンツ (URL: http://ip:port/doc.html) について学習できます。
DataX-WEB 実行ログ
デプロイが完了したら、modules/対応する project/data/applogs (ユーザーは自分でログを指定し、application.yml で logpath アドレスを変更することもできます) の下で、ユーザーはこれに従ってプロジェクトの実際の起動を追跡できます。ログ
executor の開始が admin よりも速い場合、executor は接続に失敗し、ログは "接続が拒否されました" エラーを報告します. 通常、admin が最初に開始され、次に executor が開始され、接続は 30 秒後に再接続されます。秒. 成功した場合は、この例外を無視してください。
6. DataX-WEBの実践
1.アクチュエータを見る
Web インターフェイスがエグゼキュータを正常に登録したかどうかを確認し、必要に応じてエグゼキュータの名前を変更できます。
2. プロジェクトを作成する
3. ルーティング戦略
アクチュエーターのクラスターがデプロイされると、次のような豊富なルーティング戦略が提供されます。
FIRST(第一个):固定选择第一个机器;
LAST(最后一个):固定选择最后一个机器;
ROUND(轮询):依次分配任务;
RANDOM(随机):随机选择在线的机器;
CONSISTENT_HASH(一致性HASH):每个任务按照Hash算法固定选择某一台机器,且所有任务均匀散列在不同机器上。
LEAST_FREQUENTLY_USED(最不经常使用):使用频率最低的机器优先被选举;
LEAST_RECENTLY_USED(最近最久未使用):最久为使用的机器优先被选举;
FAILOVER(故障转移):按照顺序依次进行心跳检测,第一个心跳检测成功的机器选定为目标执行器并发起调度;
BUSYOVER(忙碌转移):按照顺序依次进行空闲检测,第一个空闲检测成功的机器选定为目标执行器并发起调度;
ブロッキング処理戦略: スケジューリングが集中しすぎてエグゼキューターが処理できない場合の処理戦略
-
スタンドアロン シリアル: スケジューリング リクエストがスタンドアロン エグゼキュータに入ると、スケジューリング リクエストは FIFO キューに入り、シリアル モードで実行されます。
-
後続のスケジューリングを破棄する: スケジューリング リクエストがスタンドアロン エグゼキューターに入った後、エグゼキューターでスケジューリング タスクが実行されていることが検出され、リクエストは破棄され、失敗としてマークされます。
-
スケジューリング前のオーバーライド: スケジューリング要求がスタンドアロン エグゼキュータに入った後、エグゼキュータに実行中のスケジューリング タスクがあることが判明した場合、実行中のスケジューリング タスクを終了し、キューをクリアしてから、ローカル スケジューリング タスクを実行します。
増分追加の場合は、ブロッキング ポリシーを設定して、後続のスケジューリングまたはスタンドアロン シリアルを破棄することをお勧めします。
単機シリアルを設定する場合は、リトライ回数を適度に設定するように注意する必要があります (失敗したリトライ回数 * 1 回の実行時間 < タスクのスケジューリング期間)。たとえば、タスクは 30 秒ごとに 1 回実行され、各実行時間は 20 秒かかり、3 回リトライするように設定されています。以上で、新しいタスクが再び開かれ、新しいタスクの期間がはい 1577755680-1577758680 になります
4. タスクの種類
最初に DataX タスクを選択します. 詳細なタスクを構成した後, 下の図に示すようにそれを変更することができます. 必要に応じて他のタスクを入力することができます.
5. データソース構成
さまざまなデータ ソースに従ってパラメーターを構成します。
6.タスクビルド
ビルドリーダー
上記の操作ではマッピングが生成されず、直接タスク管理を使用 -> 手動設定を追加
{
"job": {
"content": [
{
"reader": {
"name": "mysqlreader",
"parameter": {
"username": "root",
"password": "root",
"column": [
"*"
],
"where": " save_time >= FROM_UNIXTIME(${lastTime}) and save_time < FROM_UNIXTIME(${currentTime})",
"splitPk": "id",
"connection": [
{
"table": [
"uc_op_amazon_api_store_download"
],
"jdbcUrl": [
"jdbc:mysql://x.x.x.210:3306/test_system"
]
}
]
}
},
"writer": {
"name": "mysqlwriter",
"parameter": {
"writeMode": "insert",
"username": "root",
"password": "root",
"column": [
"*"
],
"connection": [
{
"jdbcUrl": "jdbc:mysql://192.168.88.192:3306/mytest?useUnicode=true&characterEncoding=utf8",
"table": [
"uc_op_amazon_api_store_download"
]
}
]
}
}
}
],
"setting": {
"speed": {
"channel": 6
}
}
}
}
-DstartId='%s' -DendId='%s'
# 表名
uc_op_business_reports
#主键
id
#id自增配置条件