DataX と DB2 のインポートとエクスポートのケース

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.

[外部リンクの画像の転送に失敗しました。ソース サイトにはリーチング防止メカニズムがある可能性があります。画像を保存して直接アップロードすることをお勧めします (img-ORB9aHnQ-1675307254563)(./2.jpeg)]

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下の図に示すような名前のデータベース インスタンスを自動的に作成します。

[外部リンクの画像の転送に失敗しました。ソース サイトにリーチング防止メカニズムがある可能性があります。画像を保存して直接アップロードすることをお勧めします (img-ZggZAlV9-1675307254565)(3.jpeg)]

上図のように、インスタンスライブラリが正常に作成されたことを意味します。

  • サービス開始

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 データ

[外部リンクの画像の転送に失敗しました。ソース サイトにリーチング防止メカニズムがある可能性があります。画像を保存して直接アップロードすることをお勧めします (img-yMcAmygN-1675307254565)(./4.jpeg)]

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 ED 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.jar2017 年 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

最終結果:

[外部リンクの画像の転送に失敗しました。ソース サイトにリーチング防止メカニズムがある可能性があります。画像を保存して直接アップロードすることをお勧めします (img-QDwFhe3K-1675307254567)(6.jpeg)]

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 をインポートする前に:

[外部リンクの画像の転送に失敗しました。ソース サイトにリーチング防止メカニズムがある可能性があります。画像を保存して直接アップロードすることをお勧めします (img-AilMto15-1675307254568)(./7.jpeg)]

  • MySQL をインポートした後:

[外部リンクの画像の転送に失敗しました。ソース サイトにリーチング防止メカニズムがある可能性があります。画像を保存して直接アップロードすることをお勧めします (img-sr2dmh9R-1675307254569)(./8.jpeg)]

終了!

おすすめ

転載: blog.csdn.net/m0_52735414/article/details/128846776