DataX と DB2 のインポートとエクスポートのケース
記事ディレクトリ
0. 前に書く
- Linux バージョン:
CentOS-7.5-x86_64-DVD-1804
- DB2 バージョン:
LINUXX8664 11.5.4.0
(node02 マシン) - DataX バージョン:
- Python バージョン:
Python 2.7.5
- DataX スキーマ:
单机
バージョン (node01 マシン) - ファイアウォールをオフにする
- SELinuxを閉じる
- ローカル yum ソースを構成する
1. DB2 の概要
DB2 は、 1983 年に IBM によって開発された
关系型数据库系统
リレーショナル データベース管理システム (Relational Database Management System)です。主に大規模なアプリケーション システムで使用され、優れたスケーラビリティを備えています。DB2 は、IBM が立ち上げた 2 番目のリレーショナル データベースであるため、db2 と呼ばれます。DB2 は、プラットフォームに依存しない基本機能と SQL コマンド実行環境により、高レベルのデータ使用率、整合性、セキュリティ、並列処理、回復可能性、および小規模から大規模のアプリケーション実行機能を提供します。Linux、UNIX、Windows などの異なるオペレーティング システムで同時に使用できます。
2. DB2 データベース オブジェクトの関係
-
インスタンスでは、複数の DB2 インスタンスを同じマシンにインストールできます。
-
データベース、複数のデータベースを同じインスタンスの下に作成できます。
-
schema、複数のスキーマを同じデータベースの下に構成できます。
-
同じスキーマの下に複数のテーブルを作成できます。
3. 設置前の準備
3.1 インストールの依存関係
sudo yum install -y bc binutils compat-libcap1 compat-libstdc++33 elfutils-libelf elfutils-libelf-devel fontconfig-devel glibc glibc-devel ksh libaio libaio-devel libX11 libXau libXi libXtst libXrender libXrender-devel libgcc libstdc++ libstdc++- devel libxcb make smartmontools sysstat kmod* gcc-c++ compat-libstdc++-33 libstdc++.so.6 kernel-devel pam-devel.i686 pam.i686 pam32*
3.2 設定ファイル sysctl.conf の変更
[root@node02 module]# vim /etc/sysctl.conf
内部のコンテンツを削除し、次のコンテンツを追加します。
net.ipv4.ip_local_port_range = 9000 65500
fs.file-max = 6815744
kernel.shmall = 10523004
kernel.shmmax = 6465333657
kernel.shmmni = 4096
kernel.sem = 250 32000 100 128
net.core.rmem_default=262144
net.core.wmem_default=262144
net.core.rmem_max=4194304
net.core.wmem_max=1048576
fs.aio-max-nr = 1048576
3.3 構成ファイルの limits.conf を変更する
[root@node02 module]# vim /etc/security/limits.conf
ファイルの最後に次を追加します。
* soft nproc 65536
* hard nproc 65536
* soft nofile 65536
* hard nofile 65536
注: node02 を再起動して有効にします
4. インストール
4.1 事前チェック
- 以下のコマンドを実行して、事前チェックを開始します
[root@node02 server_dec]# ./db2prereqcheck -l -s
需求与 Db2 数据库 "Server" 不匹配。版本:"11.5.4.0"。 当前系统上未满足的先决条件的摘要: DBT3514W db2prereqcheck 实用程序未能找到以下 32 位库文件:"/lib/libpam.so*"。
需求与 Db2 数据库 "Server" 带 pureScale 功能部件 不匹配。版本:"11.5.4.0"。 当前系统上未满足的先决条件的摘要: DBT3613E db2prereqcheck 实用程序无法验证对应 TSA 的先决条件。请确保您的机器满足所有 TSA 安装先决条件。
DBT3507E db2prereqcheck 实用程序未能找到以下程序包或文件:"kernel-source"。
エラーが表示されます: Missing
「 32 位库文件:"/lib/libpam.so*"」
- このエラーに関して、
pam
関連する依存関係が正常にインストールされているかどうかを確認してください
[root@node02 server_dec]# rpm -qa | grep pam
pam-1.1.8-22.el7.x86_64
[root@node02 server_dec]# rpm -qa | grep pam-devel
いいえ
pam-devel
、依存関係を再インストールします
[root@node02 server_dec]# yum install -y pam-devel.i686
- 再度事前確認
[root@node02 server_dec]# ./db2prereqcheck -l -s
DBT3533I db2prereqcheck 实用程序已确认所有安装先决条件均已满足。 需求与 Db2 数据库 "Server" 带 pureScale 功能部件 不匹配。版本:"11.5.4.0"。 当前系统上未满足的先决条件的摘要: DBT3613E db2prereqcheck 实用程序无法验证对应 TSA 的先决条件。请确保您的机器满足所有 TSA 安装先决条件。
DBT3507E db2prereqcheck 实用程序未能找到以下程序包或文件:"kernel-source"。
このコマンドの実行結果に含まれる 2 つの依存関係 "DBT3533I, DBT3507E" を除き、インストールに失敗しても DB2 の使用には影響しません。正常にインストールされていない依存パッケージが他にある場合は、これらの依存関係を最初にインストールする必要があります。
4.2 グループとユーザーを追加する
ユーザー・グループ db2inst1 および db2fenc1 を追加し、ユーザー db2iadm1 および db2iadm1 を追加し、2 つの新しいユーザーを対応する新しいグループに追加し、最後に 2 つの新しいユーザーのパスワードを設定します。
[root@node02 server_dec]# groupadd -g 2000 db2iadm1
[root@node02 server_dec]# groupadd -g 2001 db2fadm1
[root@node02 server_dec]# useradd -m -g db2iadm1 -d /home/db2inst1 db2inst1
[root@node02 server_dec]# useradd -m -g db2iadm1 -d /home/db2fenc1 db2fenc1
[root@node02 server_dec]# passwd db2inst1
更改用户 db2inst1 的密码 。
新的 密码:
无效的密码: 密码少于 8 个字符
重新输入新的 密码:
passwd:所有的身份验证令牌已经成功更新。
[root@node02 server_dec]# passwd db2fenc1
更改用户 db2fenc1 的密码 。
新的 密码:
无效的密码: 密码少于 8 个字符
重新输入新的 密码:
passwd:所有的身份验证令牌已经成功更新。
db2inst1: インスタンス所有者
db2fenc1: フェンシングされたユーザー
4.3 インスタンスの作成
- db2 のデフォルトのサービス ポートは 50000 です
- db2 インストール ディレクトリの下にあるインスタンス ディレクトリを入力します。
- コマンドを実行して
db2icrt
インスタンスを作成しますThe execution completed successfully.
代表インスタンスが正常に作成されたことを確認する
[root@node02 ~]# cd /opt/ibm/db2/V11.5/instance
[root@node02 instance]# ./db2icrt -p 50000 -u db2fenc1 db2inst1
DBI1446I The db2icrt command is running.
DB2 installation is being initialized.
Total number of tasks to be performed: 4
Total estimated time for all tasks to be performed: 309 second(s)
Task #1 start
Description: Setting default global profile registry variables
Estimated time 1 second(s)
Task #1 end
Task #2 start
Description: Initializing instance list
Estimated time 5 second(s)
Task #2 end
Task #3 start
Description: Configuring DB2 instances
Estimated time 300 second(s)
Task #3 end
Task #4 start
Description: Updating global profile registry
Estimated time 3 second(s)
Task #4 end
The execution completed successfully.
For more information see the DB2 installation log at "/tmp/db2icrt.log.55121".
DBI1070I Program db2icrt completed successfully.
4.4 インスタンス ライブラリの作成とサービスの開始
インスタンス ライブラリを作成する
db2inst1
ユーザーに切り替える- db2 インストール ディレクトリの下にあるインスタンス ディレクトリを入力します。
db2sampl
コマンドを実行してインスタンス ライブラリを作成する
[root@node02 instance]# su - db2inst1
上一次登录:六 1月 14 17:07:30 CST 2023pts/0 上
[db2inst1@node02 ~]$ cd /opt/ibm/db2/V11.5/instance/
[db2inst1@node02 instance]$ db2sampl
注:
db2sampl
このコマンドは、sample
下の図に示すような名前のデータベース インスタンスを自動的に作成します。
上図のように、インスタンスライブラリが正常に作成されたことを意味します。
- サービス開始
db2start
このコマンドは、db2 サービスを開始するために使用されます
[db2inst1@node02 instance]$ db2start
01/14/2023 17:16:08 0 0 SQL1063N DB2START processing was successful.
SQL1063N DB2START processing was successful.
4.5 接続
- インタラクティブな環境に入る
[db2inst1@node02 instance]$ db2
(c) Copyright IBM Corporation 1993,2007
Command Line Processor for DB2 Client 11.5.4.0
You can issue database manager commands and SQL statements from the command
prompt. For example:
db2 => connect to sample
db2 => bind sample.bnd
For general help, type: ?.
For command help, type: ? command, where command can be
the first few keywords of a database manager command. For example:
? CATALOG DATABASE for help on the CATALOG DATABASE command
? CATALOG for help on all of the CATALOG commands.
To exit db2 interactive mode, type QUIT at the command prompt. Outside
interactive mode, all commands must be prefixed with 'db2'.
To list the current command option settings, type LIST COMMAND OPTIONS.
For more detailed help, refer to the Online Reference Manual.
db2 =>
- データベース インスタンスに接続する
db2 => connect to sample
Database Connection Information
Database server = DB2/LINUXX8664 11.5.4.0
SQL authorization ID = DB2INST1
Local database alias = SAMPLE
- サンプル ライブラリ sample の下にあるすべてのテーブルを表示する
注: SQL ステートメントの後にセミコロンを追加しないでください。
db2 => list tables
Table/View Schema Type Creation time
------------------------------- --------------- ----- --------------------------
ACT DB2INST1 T 2023-01-14-17.14.29.830759
ADEFUSR DB2INST1 S 2023-01-14-17.14.31.218932
CATALOG DB2INST1 T 2023-01-14-17.14.33.002045
CL_SCHED DB2INST1 T 2023-01-14-17.14.29.299734
CUSTOMER DB2INST1 T 2023-01-14-17.14.32.839163
DEPARTMENT DB2INST1 T 2023-01-14-17.14.29.340559
DEPT DB2INST1 A 2023-01-14-17.14.29.422197
EMP DB2INST1 A 2023-01-14-17.14.29.487346
EMPACT DB2INST1 A 2023-01-14-17.14.29.829392
EMPLOYEE DB2INST1 T 2023-01-14-17.14.29.423121
EMPMDC DB2INST1 T 2023-01-14-17.14.31.348910
EMPPROJACT DB2INST1 T 2023-01-14-17.14.29.801185
EMP_ACT DB2INST1 A 2023-01-14-17.14.29.830162
EMP_PHOTO DB2INST1 T 2023-01-14-17.14.29.488199
EMP_RESUME DB2INST1 T 2023-01-14-17.14.29.577152
INVENTORY DB2INST1 T 2023-01-14-17.14.32.792380
IN_TRAY DB2INST1 T 2023-01-14-17.14.29.888552
ORG DB2INST1 T 2023-01-14-17.14.29.914447
PRODUCT DB2INST1 T 2023-01-14-17.14.32.707200
PRODUCTSUPPLIER DB2INST1 T 2023-01-14-17.14.33.135046
PROJ DB2INST1 A 2023-01-14-17.14.29.744731
PROJACT DB2INST1 T 2023-01-14-17.14.29.746236
PROJECT DB2INST1 T 2023-01-14-17.14.29.670584
PURCHASEORDER DB2INST1 T 2023-01-14-17.14.32.919101
SALES DB2INST1 T 2023-01-14-17.14.29.959681
STAFF DB2INST1 T 2023-01-14-17.14.29.936877
STAFFG DB2INST1 T 2023-01-14-17.14.31.033939
STUDENT DB2INST1 T 2023-01-14-17.19.57.468544
SUPPLIERS DB2INST1 T 2023-01-14-17.14.33.069115
VACT DB2INST1 V 2023-01-14-17.14.29.999212
VASTRDE1 DB2INST1 V 2023-01-14-17.14.30.013130
VASTRDE2 DB2INST1 V 2023-01-14-17.14.30.016328
VDEPMG1 DB2INST1 V 2023-01-14-17.14.30.006266
VDEPT DB2INST1 V 2023-01-14-17.14.29.983567
VEMP DB2INST1 V 2023-01-14-17.14.29.992888
VEMPDPT1 DB2INST1 V 2023-01-14-17.14.30.009309
VEMPLP DB2INST1 V 2023-01-14-17.14.30.046463
VEMPPROJACT DB2INST1 V 2023-01-14-17.14.30.004078
VFORPLA DB2INST1 V 2023-01-14-17.14.30.032327
VHDEPT DB2INST1 V 2023-01-14-17.14.29.990353
VPHONE DB2INST1 V 2023-01-14-17.14.30.041997
VPROJ DB2INST1 V 2023-01-14-17.14.29.996689
VPROJACT DB2INST1 V 2023-01-14-17.14.30.001257
VPROJRE1 DB2INST1 V 2023-01-14-17.14.30.018638
VPSTRDE1 DB2INST1 V 2023-01-14-17.14.30.023670
VPSTRDE2 DB2INST1 V 2023-01-14-17.14.30.028481
VSTAFAC1 DB2INST1 V 2023-01-14-17.14.30.035293
VSTAFAC2 DB2INST1 V 2023-01-14-17.14.30.038206
48 record(s) selected.
- SQL ステートメントにセミコロンを追加するとエラーが発生します (大文字と小文字を問わず、セミコロンを追加しないでください)
db2 => list tables;
SQL0104N An unexpected token "tables;" was found following "LIST". Expected
tokens may include: "ACTIVE". SQLSTATE=42601
- サンプル ライブラリ sample の下にあるテーブル staff のデータをクエリします。
db2 => select * from staff limit 2;
ID NAME DEPT JOB YEARS SALARY COMM
------ --------- ------ ----- ------ --------- ---------
10 Sanders 20 Mgr 7 98357.50 -
20 Pernal 20 Sales 8 78171.25 612.45
2 record(s) selected.
- テーブルの作成、データの挿入
db2 => CREATE TABLE STUDENT(ID int ,NAME varchar(20));
DB20000I The SQL command completed successfully.
db2 => INSERT INTO STUDENT VALUES(11, 'lisi');
DB20000I The SQL command completed successfully.
db2 => commit;
DB20000I The SQL command completed successfully.
表 STUDENT データ
5. DataX と DB2 のインポート インポート ケース
DataX の公式 Web サイトには、DB2 固有の読み書きのチュートリアルはありませんが、
通用RDBMS(支持所有关系型数据库)
いくつかの読み書きのチュートリアルがあり、次の図に示すように、DB2 は一般的な RDBMS に属します。
公式 Web サイトのリレーショナル データベースの読み書きリンク アドレスは次のとおりです。
https://github.com/alibaba/DataX/blob/master/rdbmsreader/doc/rdbmsreader.md
https://github.com/alibaba/DataX/blob/master/rdbmswriter/doc/rdbmswriter.md
DB2 SAMPLE データベース インスタンスの下の STUDENT テーブル データ
5.1 db2 ドライバーの登録
現時点では、DataX には db2 をサポートするための独立したプラグインがありません。一般的な rdbmsreader または rdbmswriter を使用する必要があります。
rdbmswriter が新しいデータベース サポートを追加する方法:
- rdbmsreader に対応するディレクトリを入力します。ここで、DATAXHOME は Data X のメイン ディレクトリです。つまり、'{DATAX_HOME} は DataX のメイン ディレクトリです。D A T A XHO M EはD a at Xのメインディレクトリ、つまり:' {DATAX_HOME}/plugin/reader/rdbmsreader`
- rdbmsreader プラグイン ディレクトリに plugin.json 構成ファイルがあり、このファイルに特定のデータベース ドライバーを登録し、drivers 配列に配置します。rdbmsreader プラグインは、タスクの実行時にデータベースに接続する適切なデータベース ドライバーを動的に選択します。
- リーダーの db2 ドライバーを登録する
[whybigdata@node01 datax]$ vim /opt/module/datax/plugin/reader/rdbmsreader/plugin.json
#在 drivers 里添加 db2 的驱动类com.ibm.db2.jcc.DB2Driver
"drivers":["dm.jdbc.driver.DmDriver", "com.sybase.jdbc3.jdbc.SybDriver", "com.edb.Driver","com.ibm.db2.jcc.DB2Driver"]
- ライター用の db2 ドライバーを登録する
[whybigdata@node01 datax]$ vim /opt/module/datax/plugin/writer/rdbmswriter/plugin.json
#在 drivers 里添加 db2 的驱动类com.ibm.db2.jcc.DB2Driver
"drivers":["dm.jdbc.driver.DmDriver", "com.sybase.jdbc3.jdbc.SybDriver", "com.edb.Driver","com.ibm.db2.jcc.DB2Driver"]
- DataX の db2 関連の依存関係 (私が使用するバージョンは
db2jcc4.jar
2017 年 1 月 14 日です)
[whybigdata@node01 libs]$ pwd
/opt/module/datax/plugin/reader/rdbmsreader/libs
[whybigdata@node01 libs]$ ll | grep db2
-rwxr-xr-x 1 whybigdata whybigdata 3528544 1月 14 19:28 db2jcc4.jar
[whybigdata@node01 libs]$ pwd
/opt/module/datax/plugin/writer/rdbmswriter/libs
[whybigdata@node01 libs]$ ll | grep db2
-rwxr-xr-x 1 whybigdata whybigdata 3528544 1月 14 19:37 db2jcc4.jar
注: 以下のケースで DB2 からのエクスポートに失敗した場合は、 DB2 接続が正常で、json ファイルが正しい場合に、更新された
db2jcc4.jar
パッケージを置き換えてください。
5.2 DB2 データを HDFS にインポートする
構成ファイルを作成します。ディレクトリに従って DataX を入力します。
[whybigdata@node01 datax]$ vim job/db2-2-hdfs.json
- ファイルの内容は以下の通り
{
"job": {
"content": [
{
"reader": {
"name": "rdbmsreader",
"parameter": {
"column": [
"ID",
"NAME"
],
"connection": [
{
"jdbcUrl": [
"jdbc:db2://node02:50000/SAMPLE"
],
"table": [
"STUDENT"
]
}
],
"username": "db2inst1",
"password": "123456"
}
},
"writer": {
"name": "hdfswriter",
"parameter": {
"column": [
{
"name": "id",
"type": "int"
},
{
"name": "name",
"type": "string"
}
],
"defaultFS": "hdfs://node01:8020",
"fieldDelimiter": "-",
"fileName": "db2.txt",
"fileType": "text",
"path": "/datax-out",
"writeMode": "append"
}
}
}
],
"setting": {
"speed": {
"channel": "1"
}
}
}
}
埋め込む
[whybigdata@node01 datax]$ bin/datax.py job/db2-2-hdfs.json
最終結果:
5.3 DB2 データを MySQL に読み込む
構成ファイルを作成します。ディレクトリに従って DataX を入力します。
[whybigdata@node01 datax]$ vim job/db2-2-mysql.json
- ファイルの内容は以下の通り
{
"job": {
"content": [
{
"reader": {
"name": "rdbmsreader",
"parameter": {
"column": [
"ID",
"NAME"
],
"connection": [
{
"jdbcUrl": [
"jdbc:db2://node02:50000/SAMPLE"
],
"table": [
"STUDENT"
]
}
],
"username": "db2inst1",
"password": "123456"
}
},
"writer": {
"name": "mysqlwriter",
"parameter": {
"column": ["*"],
"connection": [
{
"jdbcUrl": "jdbc:mysql://node01:3306/datax",
"table": ["student"]
}
],
"password": "123456",
"username": "root",
"writeMode": "insert"
}
}
}
],
"setting": {
"speed": {
"channel": "1"
}
}
}
}
埋め込む
[whybigdata@node01 datax]$ bin/datax.py job/db2-2-mysql.json
最終結果:
- MySQL をインポートする前に:
- MySQL をインポートした後:
終了!