15 メタデータ・プロバイダの使用
メタデータ・プロバイダの使用方法について説明します。これにより、Replicatパラメータ・ファイルを使用してソースからターゲットに複製できます。
トピック:
15.1 メタデータ・プロバイダについて
メタデータ・プロバイダは、ハンドラがReplicatプロセスで実行されるように構成されている場合にのみ機能します。
Replicatプロセスは、Replicat構成ファイルの構文を使用して、ソース表からターゲット表に、およびソース列からターゲット列にマッピングします。ソース・メタデータ定義は、Oracle GoldenGate証跡ファイルに含まれています(または、12.2以降のリリースのOracle GoldenGateではソース定義ファイルによって)。レプリケーション・ターゲットがデータベースの場合、Replicatプロセスはターゲット・メタデータ定義をターゲット・データベースから取得します。ただし、これは一般的にビッグ・データ・アプリケーションにデータをプッシュする場合やJava配信中には不利です。一般的に、ビッグ・データ・アプリケーションはターゲット・メタデータを提供しないため、Replicatのマッピングは実行できません。この短所に対処するのが、メタデータ・プロバイダです。メタデータ・プロバイダを使用すると、AvroまたはHiveを使用してターゲット・メタデータを定義でき、ソース表からターゲット表へ、およびソース列からターゲット列へのReplicatマッピングが可能になります。
メタデータ・プロバイダの使用はオプションであり、有効にするにはJavaアダプタ・プロパティ・ファイルでgg.mdp.typeプロパティを指定します。ソースのOracle GoldenGate証跡ファイルに含まれるメタデータを出力に利用できる場合、メタデータ・プロバイダは使用しないでください。メタデータ・プロバイダは、次の場合に使用する必要があります。
-
ソース表名を、一致しないターゲット表名にマップする必要があります。
-
ソース列名を、一致しないターゲット列名にマップする必要があります。
-
ソース証跡ファイルの特定の列を含め、それ以外の列を除外する必要があります。
Replicatマッピングの制限は、Replicat構成ファイルに定義されているマッピングが静的であるということです。Oracle GoldenGateには、ソースとしてOracleデータベースを使用するとき、DDL伝播の機能があります。メタデータ・プロバイダとReplicatマッピングを使用する際には、スキーマ展開の適切な処理が問題になることがあります。スキーマ展開のユースケースを考慮したうえで、必要な変更のためにメタデータ・プロバイダとReplicatマッピング構文をどのように更新するかを計画します。
COLMAPを使用してReplicatでマップされる表ごとに、構成されたメタデータ・プロバイダからメタデータが取得され、そのメタデータがReplicatによって列マッピングに使用されます。
HiveおよびAvroのメタデータ・プロバイダのみがサポートされているため、いずれか一方を選択して、メタデータ・プロバイダ実装で使用する必要があります。
シナリオ - いつメタデータ・プロバイダを使用するか
-
次のシナリオでは、メタデータ・プロバイダの構成は必要ありません。
GGというソース・スキーマが、GGADPというターゲット・スキーマにマップされるマッピング。*GG.TCUSTMERというスキーマが、GGADP.TCUSTMER_NEWという表名にマップされるスキーマと表名のマッピングMAP GG.*, TARGET GGADP.*; (OR) MAP GG.TCUSTMER, TARGET GG_ADP.TCUSTMER_NEW;
-
次のシナリオでは、メタデータ・プロバイダの構成が必要です。
ソース列名がターゲット列名と一致しないマッピング。たとえば、ソース列
CUST_CODEは、ターゲット列CUST_CODE_NEWにマップされます。MAP GG.TCUSTMER, TARGET GG_ADP.TCUSTMER_NEW, COLMAP(USEDEFAULTS, CUST_CODE_NEW=CUST_CODE, CITY2=CITY);
親トピック: メタデータ・プロバイダの使用
15.2 Avroメタデータ・プロバイダ
Avroメタデータ・プロバイダは、Avroスキーマ・ファイルから表メタデータを取得する際に使用します。COLMAPを使用してReplicatでマップされる表ごとに、Avroスキーマからメタデータが取得されます。取得されたメタデータは、Replicatによって列マッピングに使用されます。
この項の内容は次のとおりです。
トピック:
親トピック: メタデータ・プロバイダの使用
15.2.1 詳細な機能
Avroメタデータ・プロバイダは、Avroスキーマ定義ファイルを使用してメタデータを使用します。AvroスキーマはJSONを使用して定義されます。process_name. prmファイルでマップされる表ごとに、対応するAvroスキーマ定義ファイルを作成する必要があります。Avroスキーマの定義方法の詳細は、「Defining a Schema」を参照してください。
Avroメタデータ・プロバイダ・スキーマ定義の構文
{"namespace": "[$catalogname.]$schemaname",
"type": "record",
"name": "$tablename",
"fields": [
{"name": "$col1", "type": "$datatype"},
{"name": "$col2 ", "type": "$datatype ", "primary_key":true},
{"name": "$col3", "type": "$datatype ", "primary_key":true},
{"name": "$col4", "type": ["$datatype","null"]}
]
}
namespace - name of catalog/schema being mapped
name - name of the table being mapped
fields.name - array of column names
fields.type - datatype of the column
fields.primary_key - indicates the column is part of primary key.
Representing nullable and not nullable columns:
"type":"$datatype" - indicates the column is not nullable, where "$datatype" is the actual datatype.
"type": ["$datatype","null"] - indicates the column is nullable, where "$datatype" is the actual datatype
Avroメタデータ・プロバイダによってアクセスされるスキーマ・ファイルの名前は、次の形式にする必要があります。
[$catalogname.]$schemaname.$tablename.mdp.avsc $catalogname - name of the catalog if exists $schemaname - name of the schema $tablename - name of the table .mdp.avsc - constant, which should be appended always
サポートされているAvroデータ型
-
boolean
-
bytes
-
double
-
float
-
int
-
long
-
string
https://avro.apache.org/docs/1.7.5/spec.html#schema_primitiveを参照してください。
親トピック: Avroメタデータ・プロバイダ
15.2.2 実行時の前提条件
Replicatプロセスを開始する前に、Replicatのパラメータ・ファイルでマップされるすべての表のAvroスキーマ定義を作成します。
親トピック: Avroメタデータ・プロバイダ
15.2.4 Avroメタデータ・プロバイダの構成
| プロパティ | 必須/オプション | 有効な値 | デフォルト | 説明 |
|---|---|---|---|---|
|
|
必須 |
|
|
Avroメタデータ・プロバイダを選択します |
|
|
必須 |
例: |
|
Avroスキーマ・ファイルのディレクトリのパス |
|
|
オプション |
有効なキャラクタ・セット |
|
文字データ型で列のキャラクタ・セットを指定します。ソース・データを証跡ファイルから正しいターゲット・キャラクタ・セットに変換する場合に使用します。 |
|
|
オプション |
有効なキャラクタ・セット |
|
文字データ型で列のキャラクタ・セットを指定します。ソース・データを証跡ファイルから正しいターゲット・キャラクタ・セットに変換する場合に使用します。 例: Oracleデータベースで |
親トピック: Avroメタデータ・プロバイダ
15.2.5 サンプル構成の確認
Avroメタデータ・プロバイダを構成する例を次に示します。次の表を含むソースを検討します。
TABLE GG.TCUSTMER {
CUST_CODE VARCHAR(4) PRIMARY KEY,
NAME VARCHAR(100),
CITY VARCHAR(200),
STATE VARCHAR(200)
}この表は、ソースの(CUST_CODE (GG.TCUSTMER)をターゲットのCUST_CODE2 (GG_AVRO.TCUSTMER_AVRO)に、およびソースの列CITY (GG.TCUSTMER)をターゲットのCITY2 (GG_AVRO.TCUSTMER_AVRO)にマップします。したがって、process_name. prmファイルでのマッピングは、次のとおりです。
MAP GG.TCUSTMER, TARGET GG_AVRO.TCUSTMER_AVRO, COLMAP(USEDEFAULTS, CUST_CODE2=CUST_CODE, CITY2=CITY);
この例のマッピング定義は、次のとおりです。
-
ソース・スキーマ
GGは、ターゲット・スキーマGG_AVROにマップされる。 -
ソース列
CUST_CODEは、ターゲット列CUST_CODE2にマップされる -
ソース列
CITYは、ターゲット列CITY2にマップされる -
USEDEFAULTSには、列名の残りがソースとターゲットで同じことを指定します(NAME列とSTATE列)。
この例では、次のAvroスキーマ定義ファイルを使用します。
ファイル・パス: /home/ggadp/avromdpGG_AVRO.TCUSTMER_AVRO.mdp.avsc
{"namespace": "GG_AVRO",
"type": "record",
"name": "TCUSTMER_AVRO",
"fields": [
{"name": "NAME", "type": "string"},
{"name": "CUST_CODE2", "type": "string", "primary_key":true},
{"name": "CITY2", "type": "string"},
{"name": "STATE", "type": ["string","null"]}
]
}Javaアダプタ・プロパティ・ファイルの構成には、次の指定が含まれます。
gg.mdp.type = avro gg.mdp.schemaFilesPath = /home/ggadp/avromdp
次のサンプル出力では、区切り文字としてセミコロンを使用する区切りテキスト・フォーマッタが使用されています。
I;GG_AVRO.TCUSTMER_AVRO;2013-06-02 22:14:36.000000;NAME;BG SOFTWARE CO;CUST_CODE2;WILL;CITY2;SEATTLE;STATE;WA
Oracle GoldenGate for Big Dataには、サンプルのReplicat構成ファイル、サンプルのJavaアダプタ・プロパティ・ファイル、サンプルのAvroスキーマが、次の場所に用意されています。
GoldenGate_install_directory/AdapterExamples/big-data/metadata_provider/avro
親トピック: Avroメタデータ・プロバイダ
15.2.6 メタデータ変更イベント
DDLがソース・データベース表で変更された場合は、Avroスキーマ定義と、Replicat構成ファイルでのマッピングを変更する必要がある場合があります。また、メタデータ変更イベントがあった場合には、Replicatプロセスを停止または一時停止することもあります。Replicatプロセスを停止するには、Replicat構成ファイル(process_name. prm)に次の行を追加します。
DDL INCLUDE ALL, EVENTACTIONS (ABORT)
また、Replicatプロセスを一時停止するには、レプリケーション構成ファイルに次の行を追加します。
DDL INCLUDE ALL, EVENTACTIONS (SUSPEND)
親トピック: Avroメタデータ・プロバイダ
15.2.7 制限事項
Avroのbyteデータ型は、主キーとして使用できません。
Replicat構成ファイルに定義されているソースからターゲットへのマッピングは静的です。Oracle GoldenGate 12.2以降では、Oracleデータベースがレプリケーション・ソースの場合に、DDL伝播とソース・スキーマ展開をサポートします。DDL伝播とソース・スキーマ展開を使用する場合、ソース・メタデータの変更をシームレスに処理できなくなります。
親トピック: Avroメタデータ・プロバイダ
15.2.8 トラブルシューティング
この項では、次の問題をトラブルシューティングする方法について説明します。
トピック:
15.2.8.1 無効なスキーマ・ファイルの場所
gg.mdp.schemaFilesPath構成プロパティで指定するAvroスキーマ・ファイル・ディレクトリは、有効なディレクトリである必要があります。パスが有効でない場合、次の例外が発生します。
oracle.goldengate.util.ConfigException: Error initializing Avro metadata provider
Specified schema location does not exist. {/path/to/schema/files/dir}親トピック: トラブルシューティング
15.2.8.2 無効なスキーマ・ファイル名
process_name.prmファイルでマップされる表ごとに、gg.mdp.schemaFilesPathで指定されたディレクトリに対応するAvroスキーマ・ファイルを作成する必要があります。
たとえば、次のシナリオを考えてみます。
マッピング:
MAP GG.TCUSTMER, TARGET GG_AVRO.TCUSTMER_AVRO, COLMAP(USEDEFAULTS, cust_code2=cust_code, CITY2 = CITY);
プロパティ:
gg.mdp.schemaFilesPath=/home/usr/avro/
このシナリオでは、/home/usr/avro/ディレクトリにGG_AVRO.TCUSTMER_AVRO.mdp.avscというファイルを作成する必要があります。
/home/usr/avro/GG_AVRO.TCUSTMER_AVRO.mdp.avscファイルを作成しないと、次の例外が発生します。
java.io.FileNotFoundException: /home/usr/avro/GG_AVRO.TCUSTMER_AVRO.mdp.avsc
親トピック: トラブルシューティング
15.2.8.3 スキーマ・ファイルでの無効なネームスペース
Replicatマッピングで指定するターゲット・スキーマ名は、Avroスキーマ定義ファイルのネームスペースと同じである必要があります。
たとえば、次のシナリオを考えてみます。
マッピング:
MAP GG.TCUSTMER, TARGET GG_AVRO.TCUSTMER_AVRO, COLMAP(USEDEFAULTS, cust_code2 = cust_code, CITY2 = CITY);
Avro Schema Definition:
{
"namespace": "GG_AVRO",
..
}
このシナリオでは、Replicatが次の例外で異常終了します。
Unable to retrieve table matadata. Table : GG_AVRO.TCUSTMER_AVRO
Mapped [catalogname.]schemaname (GG_AVRO) does not match with the schema namespace {schema namespace}親トピック: トラブルシューティング
15.2.8.4 スキーマ・ファイルでの無効な表名
Replicatマッピングで指定するターゲット表名は、Avroスキーマ定義ファイルでの名前と同じである必要があります。
たとえば、次のシナリオを考えてみます。
マッピング:
MAP GG.TCUSTMER, TARGET GG_AVRO.TCUSTMER_AVRO, COLMAP(USEDEFAULTS, cust_code2 = cust_code, CITY2 = CITY);
Avroスキーマ定義:
{
"namespace": "GG_AVRO",
"name": "TCUSTMER_AVRO",
..
}
このシナリオでは、Replicatマッピングで指定したターゲット表名がAvroスキーマ名と一致しない場合、REPLICATが次の例外で異常終了します。
Unable to retrieve table matadata. Table : GG_AVRO.TCUSTMER_AVRO
Mapped table name (TCUSTMER_AVRO) does not match with the schema table name {table name}親トピック: トラブルシューティング
15.3 Java Database Connectivityメタデータ・プロバイダ
Java Database Connectivity (JDBC)メタデータ・プロバイダは、JDBC接続をサポートするターゲット・データベースから表メタデータを取得する際に使用し、データベース・スキーマがあります。JDBCメタデータ・プロバイダは、RDBMSであるターゲット・データベースの優先メタデータ・プロバイダとなりますが、他の様々な非RDBMSターゲットもJDBCドライバを提供します。
トピック:
15.3.1 JDBCの詳細な機能
JDBCメタデータ・プロバイダは、ターゲット・データベースとともに提供されるJDBCドライバを使用します。DBCドライバは、Replicatプロパティ・ファイルでマップされるターゲット表ごとに、メタデータを取得します。Replicatプロセスは、取得されたターゲット・メタデータを使用して列をマップします。
Replicatパラメータ・ファイルでREPERRORプロパティを構成すると、JDBCハンドラでこの機能を有効化できます。また、次のようにJDBCハンドラ・プロパティ・ファイルでRDBMS JDBCターゲットに固有のエラー・コードを定義する必要があります。
表15-1 JDBC REPERRORのコード
| プロパティ | 値 | 必須 |
|---|---|---|
gg.error.duplicateErrorCodes |
重複エラーを示すエラー・コードのカンマ区切りの整数値 |
いいえ |
gg.error.notFoundErrorCodes |
Not Foundエラーを示すエラー・コードのカンマ区切りの整数値 |
いいえ |
gg.error.deadlockErrorCodes |
デッドロック・エラーを示すエラー・コードのカンマ区切りの整数値 |
いいえ |
次に例を示します。
#ErrorCode
gg.error.duplicateErrorCodes=1062,1088,1092,1291,1330,1331,1332,1333
gg.error.notFoundErrorCodes=0
gg.error.deadlockErrorCodes=1213様々なJDBCタイプをデータベース固有のSQLタイプにマップする方法を理解するには、https://docs.oracle.com/javase/6/docs/technotes/guides/jdbc/getstart/mapping.html#table1を参照してください。
15.3.2 Javaクラスパス
gg.classpathプロパティを使用して、JDBC Java Driverの場所をハンドラのクラスパスに含める必要があります。
たとえば、MySQLデータベースの構成は次のようになります。
gg.classpath= /path/to/jdbc/driver/jar/mysql-connector-java-5.1.39-bin.jar
15.3.3 JDBCメタデータ・プロバイダの構成
JDBCメタデータ・プロバイダの構成可能な値は次のとおりです。これらのプロパティは、Javaアダプタ・プロパティ・ファイルにあります(Replicatプロパティ・ファイルにはありません)。
表15-2 JDBCメタデータ・プロバイダのプロパティ
| プロパティ | 必須/オプション | 有効な値 | デフォルト | 説明 |
|---|---|---|---|---|
|
|
必須 |
|
なし |
コマンド・プロンプトで |
|
|
必須 |
|
なし |
ターゲット・データベースのJDBC URL。 |
|
|
必須 |
JDBCドライバのJavaクラス名 |
なし |
JDBCドライバの完全修飾のJavaクラス名。 |
|
|
オプション |
有効なユーザー名の文字列。 |
なし |
JDBC接続のユーザー名。または、 |
|
|
オプション |
有効なパスワードの文字列 |
なし |
JDBC接続のパスワード。または、 |
15.3.4 サンプル構成の確認
MySQLドライバの構成
gg.mdp.type=jdbc gg.mdp.ConnectionUrl=jdbc:oracle:thin:@myhost:1521:orcl gg.mdp.DriverClassName=oracle.jdbc.driver.OracleDriver gg.mdp.UserName=username gg.mdp.Password=password
Netezzaドライバの構成
gg.mdp.type=jdbc gg.mdp.ConnectionUrl=jdbc:netezza://hostname:port/databaseName gg.mdp.DriverClassName=org.netezza.Driver gg.mdp.UserName=username gg.mdp.Password=password
Oracle OCIドライバの構成
ggg.mdp.type=jdbc gg.mdp.ConnectionUrl=jdbc:oracle:oci:@myhost:1521:orcl gg.mdp.DriverClassName=oracle.jdbc.driver.OracleDriver gg.mdp.UserName=username gg.mdp.Password=password
Oracle Teradataドライバの構成
gg.mdp.type=jdbc gg.mdp.ConnectionUrl=jdbc:teradata://10.111.11.111/USER=username,PASSWORD=password gg.mdp.DriverClassName=com.teradata.jdbc.TeraDriver gg.mdp.UserName=username gg.mdp.Password=password
Oracle Thinドライバの構成
gg.mdp.type=jdbc gg.mdp.ConnectionUrl=jdbc:mysql://localhost/databaseName?user=username&password=password gg.mdp.DriverClassName=com.mysql.jdbc.Driver gg.mdp.UserName=username gg.mdp.Password=password
Redshiftドライバの構成
gg.mdp.type=jdbc gg.mdp.ConnectionUrl=jdbc:redshift://hostname:port/databaseName gg.mdp.DriverClassName=com.amazon.redshift.jdbc42.Driver gg.mdp.UserName=username gg.mdp.Password=password
15.4 Hiveメタデータ・プロバイダ
Hiveメタデータ・プロバイダは、Hiveメタストアから表メタデータを取得する際に使用します。メタデータは、Replicatプロパティ・ファイルでマップされているターゲット表ごとに、COLMAPパラメータを使用して、Hiveから取得されます。取得されるターゲット・メタデータは、列マッピング機能のためにReplicatで使用されます。
トピック:
- 詳細な機能
- リモート・メタストア・データベースを使用するHiveの構成
- クラスパス構成
- Hiveメタデータ・プロバイダの構成プロパティ
- サンプル構成の確認
- セキュリティ
- メタデータ変更イベント
- 制限事項
- その他の考慮事項
- トラブルシューティング
親トピック: メタデータ・プロバイダの使用
15.4.1 詳細な機能
Hiveメタデータ・プロバイダは、Hive JDBCとHCatalogの両方のインタフェースを使用して、Hiveメタストアからメタデータを取得します。process_name.prmファイルでマップされる表ごとに、対応する表がHiveに作成されます。
デフォルトのHive構成では、埋込みのローカルのメタストアであるDerbyデータベースが起動します。Apache Derbyは、埋込みデータベースとして設計されているため、単一の接続のみ可能です。このDerbyデータベースの制限は、Hiveメタデータ・プロバイダを使用する場合は機能できないことを意味します。この制限を回避するには、リモート・メタストア・データベースを使用してHiveを構成する必要があります。リモート・メタストア・データベースを使用してHiveを構成する方法の詳細は、https://cwiki.apache.org/confluence/display/Hive/AdminManual+Metastore+Administrationを参照してください。
Hiveは、主キーのセマンティクスをサポートしていないため、Hiveメタストアから取得されるメタデータには、主キー定義が含まれません。Hiveメタデータ・プロバイダを使用する場合は、ReplicatのKEYCOLSパラメータを使用して主キーを定義します。
KEYCOLS
ターゲット・スキーマで主キーを定義するには、KEYCOLSパラメータを使用する必要があります。Oracle GoldenGate HBaseハンドラには、主キーが必要です。したがって、HBaseをターゲットとしてReplicatマッピングを使用する場合は、ターゲット・スキーマで主キーを設定する必要があります。
Avroフォーマッタの出力には、プライマリ列名を保持する配列フィールドがあります。AvroフォーマッタでReplicatマッピングを使用する場合は、KEYCOLSを使用して主キー列を指定することを検討してください。
KEYCOLSの構成例は、サンプル構成の確認を参照してください。
サポートされているHiveデータ型
-
BIGINT -
BINARY -
BOOLEAN -
CHAR -
DATE -
DECIMAL -
DOUBLE -
FLOAT -
INT -
SMALLINT -
STRING -
TIMESTAMP -
TINYINT -
VARCHAR
https://cwiki.apache.org/confluence/display/Hive/LanguageManual+Typesを参照してください。
親トピック: Hiveメタデータ・プロバイダ
15.4.2 リモート・メタストア・データベースを使用するHiveの構成
リモートHiveメタストアの構成に使用できるサポート対象のデータベースのリストは、https://cwiki.apache.org/confluence/display/Hive/AdminManual+MetastoreAdmin#AdminManualMetastoreAdmin-SupportedBackendDatabasesforMetastoreにあります。
次の例では、MySQLデータベースがHive構成ファイル${HIVE_HOME}/conf/hive-site.xmlのプロパティを使用してHiveメタストアとして構成されることを示しています。
注意:
ConnectionURLと、この例で使用しているドライバ・クラスは、MySQLに固有の値です。MySQL以外のデータベースを使用する場合は、構成に応じて値を変更します。
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://MYSQL_DB_IP:MYSQL_DB_PORT/DB_NAME?createDatabaseIfNotExist=false</value>
</property>
<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>com.mysql.jdbc.Driver</value>
</property>
<property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>MYSQL_CONNECTION_USERNAME</value>
</property>
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>MYSQL_CONNECTION_PASSWORD</value>
</property>
リモート・メタストア用にhive-site.xmlファイルで構成するパラメータのリストを確認するには、https://cwiki.apache.org/confluence/display/Hive/AdminManual+MetastoreAdmin#AdminManualMetastoreAdmin-RemoteMetastoreDatabaseを参照してください。
注意:
HiveのクラスパスにMySQL JDBCコネクタJARを追加するには、次のステップを実行します。
-
HIVE_HOME/lib/ディレクトリ内。DB_NAMEは、MySQLで作成されるデータベースの有効な名前に置き換えてください。 -
Hiveサーバーを起動します:
HIVE_HOME/bin/hiveserver2/bin/hiveserver2 -
Hiveリモート・メタストア・サーバーを起動します。
HIVE_HOME/bin/hive --service metastore
親トピック: Hiveメタデータ・プロバイダ
15.4.3 クラスパス構成
Hiveメタデータ・プロバイダをHiveに接続するには、gg.classpath変数でhive-site.xmlファイルと、HiveおよびHDFSクライアントjarを構成する必要があります。クライアントJARは、Hiveメタデータ・プロバイダが接続するHiveのバージョンと一致する必要があります。
たとえば、hive-site.xmlファイルが/home/user/oggadp/dirprmディレクトリに作成される場合、gg.classpathエントリはgg.classpath=/home/user/oggadp/dirprm/です
-
次のプロパティを含む
hive-site.xmlファイルを作成します。<configuration> <!-- Mandatory Property --> <property> <name>hive.metastore.uris</name> <value>thrift://HIVE_SERVER_HOST_IP:9083</value> <property> <!-- Optional Property. Default value is 5 --> <property> <name>hive.metastore.connect.retries</name> <value>3</value> </property> <!-- Optional Property. Default value is 1 --> <property> <name>hive.metastore.client.connect.retry.delay</name> <value>10</value> </property> <!-- Optional Property. Default value is 600 seconds --> <property> <name>hive.metastore.client.socket.timeout</name> <value>50</value> </property> </configuration> -
デフォルトでは、次のディレクトリにHiveおよびHDFSクライアントjarが含まれています。
HIVE_HOME/hcatalog/share/hcatalog/*HIVE_HOME/lib/*HIVE_HOME/hcatalog/share/webhcat/java-client/*HADOOP_HOME/share/hadoop/common/*HADOOP_HOME/share/hadoop/common/lib/*HADOOP_HOME/share/hadoop/mapreduce/*gg.classpathを、ステップ1で示したとおり正確に構成します。hive-site.xmlファイルのパスは、ワイルドカードが付加されていないパスにしてください。hive-site.xmlファイルのパスにワイルドカード(*)を含めると、配置されません。依存関係JARのパスには、そのディレクトリにあるJARファイルがすべて関連するクラスパスに含まれるように、ワイルドカード(*)を含める必要があります。*.jarは使用しないでください。
親トピック: Hiveメタデータ・プロバイダ
15.4.4 Hiveメタデータ・プロバイダの構成プロパティ
| プロパティ | 必須/オプション | 有効な値 | デフォルト | 説明 |
|---|---|---|---|---|
|
|
必須 |
|
|
Hiveメタデータ・プロバイダを選択します |
|
|
必須 |
Kerberos認証を使用せずにフォーマット: j Kerberos認証を使用してフォーマット:
|
|
HiveサーバーのJDBC接続URL |
|
|
必須 |
|
|
完全修飾のHive JDBCドライバ・クラス名 |
|
|
オプション |
有効なユーザー名 |
|
Hiveデータベースに接続するためのユーザー名。Kerberos認証を使用する場合、 |
|
|
オプション |
有効なパスワード |
|
Hiveデータベースに接続するためのパスワード |
|
|
オプション |
有効なキャラクタ・セット |
|
文字データ型を含む列のキャラクタ・セット。ソース・データを証跡ファイルから正しいターゲット・キャラクタ・セットに変換する場合に使用します。 |
|
|
オプション |
有効なキャラクタ・セット |
|
各国語文字データ型を含む列のキャラクタ・セット。ソース・データを証跡ファイルから正しいターゲット・キャラクタ・セットに変換する場合に使用します。 たとえば、このプロパティは、Oracleデータベースで |
|
|
オプション |
Kerberos |
なし |
HiveへのKerberos認証を指定できます。 |
|
|
オプション( |
Kerberosキータブ・ファイルの相対パスまたは絶対パス。 |
|
|
|
|
オプション( |
有効なKerberosプリンシパル名( |
|
Kerberos認証で用いるKerberosプリンシパル名。 |
親トピック: Hiveメタデータ・プロバイダ
15.4.5 サンプル構成の確認
Hiveメタデータ・プロバイダを構成する例を次に示します。次の表でソースを検討してください。
TABLE GG.TCUSTMER {
CUST_CODE VARCHAR(4) PRIMARY KEY,
NAME VARCHAR(100),
CITY VARCHAR(200),
STATE VARCHAR(200)}
この例は、ソースの列CUST_CODE (GG.TCUSTMER)をターゲットのCUST_CODE2 (GG_HIVE.TCUSTMER_HIVE)に、ソースの列CITY (GG.TCUSTMER)をターゲットのCITY2 (GG_HIVE.TCUSTMER_HIVE)にマップします。
process_name. prmファイルのマッピング構成には、次の構成が含まれています。
MAP GG.TCUSTMER, TARGET GG_HIVE.TCUSTMER_HIVE, COLMAP(USEDEFAULTS, CUST_CODE2=CUST_CODE, CITY2=CITY) KEYCOLS(CUST_CODE2);
この例の詳細は次のとおりです。
-
ソース・スキーマ
GGは、ターゲット・スキーマGG_HIVEにマップされます。 -
ソース列
CUST_CODEは、ターゲット列CUST_CODE2にマップされます。 -
ソース列
CITYは、ターゲット列CITY2にマップされます。 -
USEDEFAULTSには、列名の残りがソースとターゲットで同じであることを指定します(NAME列とSTATE列)。 -
KEYCOLSには、CUST_CODE2を主キーとして扱う必要があることを指定します。
HiveのDDLでは主キーを指定できないため、KEYCOLSパラメータを使用して主キーを指定します。
注意:
任意のスキーマ名を選択でき、gg_hive schema名には制限されません。Hiveスキーマは、既存のものでも新規作成してもかまいません。これには、Javaアダプタ・プロパティ・ファイルで接続URL (gg.mdp.connectionUrl)を、Replicat.prmファイルでマッピング構成を、それぞれ変更します。スキーマ名が変更されたら、接続URL (gg.mdp.connectionUrl)と、Replicat.prmファイルのマッピングを更新します。
Hiveにこの例のスキーマおよび表を作成するには、次のコマンドを使用します。Hiveにこの例のスキーマおよび表を作成するには、次のコマンドを使用します。Hive CLIを起動するには、次のコマンドを使用します。
HIVE_HOME/bin/hive
GG_HIVEスキーマをHiveに作成するには、次のコマンドを使用します。
hive> create schema gg_hive; OK Time taken: 0.02 seconds
TCUSTMER_HIVE表をGG_HIVEデータベースに作成するには、次のコマンドを使用します。
hive> CREATE EXTERNAL TABLE `TCUSTMER_HIVE`(
> "CUST_CODE2" VARCHAR(4),
> "NAME" VARCHAR(30),
> "CITY2" VARCHAR(20),
> "STATE" STRING);
OK
Time taken: 0.056 seconds
次のような方法で.propertiesファイルを構成します。
gg.mdp.type=hive
gg.mdp.connectionUrl=jdbc:hive2://HIVE_SERVER_IP:10000/gg_hive
gg.mdp.driverClassName=org.apache.hive.jdbc.HiveDriver
次のサンプル出力では、区切り文字としてカンマを使用する区切りテキスト・フォーマッタが使用されています。
I;GG_HIVE.TCUSTMER_HIVE;2015-10-07T04:50:47.519000;cust_code2;WILL;name;BG SOFTWARE CO;city2;SEATTLE;state;WA
サンプルのReplicat構成ファイル、Javaアダプタ・プロパティ・ファイル、およびHive表作成SQLスクリプトのサンプルは、インストール環境の次の場所に含まれています。
GoldenGate_install_directory/AdapterExamples/big-data/metadata_provider/hive
親トピック: Hiveメタデータ・プロバイダ
15.4.6 セキュリティ
Hiveサーバーは、Kerberos認証を使用して保護できます。Hiveサーバーの保護方法の詳細は、特定のHiveリリースのHiveのドキュメントを参照してください。Hiveメタデータ・プロバイダは、Kerberosで保護されたHiveサーバーに接続できます。
HDFS core-site.xmlファイルおよびhive-site.xmlファイルのパスは、ハンドラのクラスパスに存在することを確認してください。
core-site.xmlファイルの次のプロパティを有効にします。
<property> <name>hadoop.security.authentication</name> <value>kerberos</value> </property> <property> <name>hadoop.security.authorization</name> <value>true</value> </property>
hive-site.xmlファイルの次のプロパティを有効にします。
<property>
<name>hive.metastore.sasl.enabled</name>
<value>true</value>
</property>
<property>
<name>hive.metastore.kerberos.keytab.file</name>
<value>/path/to/keytab</value> <!-- Change this value -->
</property>
<property>
<name>hive.metastore.kerberos.principal</name>
<value>Kerberos Principal</value> <!-- Change this value -->
</property>
<property>
<name>hive.server2.authentication</name>
<value>KERBEROS</value>
</property>
<property>
<name>hive.server2.authentication.kerberos.principal</name>
<value>Kerberos Principal</value> <!-- Change this value -->
</property>
<property>
<name>hive.server2.authentication.kerberos.keytab</name>
<value>/path/to/keytab</value> <!-- Change this value -->
</property>親トピック: Hiveメタデータ・プロバイダ
15.4.7 メタデータ変更イベント
ソース・データベース表が変更された場合は、Hiveメタストアの表を手動で更新、変更または作成する必要があります。メタデータ変更イベントが発生した場合に、Replicatプロセスを終了または一時停止することもあります。Replicatプロセスを終了するには、Replicat構成ファイル(process_name. prm)に次の行を追加します。
DDL INCLUDE ALL, EVENTACTIONS (ABORT)
Replicatプロセスを一時停止するには、レプリケーション構成ファイルに次の行を追加します。
DDL INCLUDE ALL, EVENTACTIONS (SUSPEND)
親トピック: Hiveメタデータ・プロバイダ
15.4.8 制限事項
バイナリ・データ型の列は、主キーとして使用できません。
Replicat構成ファイルに定義されているソースからターゲットへのマッピングは静的です。Oracle GoldenGate 12.2以降のバージョンでは、Oracleデータベースがレプリケーション・ソースの場合に、DDL伝播とソース・スキーマ展開をサポートします。DDL伝播とソース・スキーマ展開を使用する場合、ソース・メタデータの変更をシームレスに処理できなくなります。
親トピック: Hiveメタデータ・プロバイダ
15.4.9 その他の考慮事項
特に一般的なのが、Javaクラスパスに関する問題です。Hiveメタデータ・プロバイダでは、特定のHiveおよびHDFSクライアント・ライブラリをクラスパスで解決する必要があります。
必要なクライアントJARディレクトリは、「クラスパス構成」にリストしてあります。HiveおよびHDFSクライアントJARは、Oracle GoldenGate for Big Dataに付属しません。クライアントJARは、Hiveメタデータ・プロバイダが接続するHiveのバージョンと同じバージョンである必要があります。
Hiveサーバーへの接続を確立するには、クラスパスにhive-site.xmlファイルが存在する必要があります。
親トピック: Hiveメタデータ・プロバイダ
15.4.10 トラブルシューティング
マップされたターゲット表がHiveに存在しない場合、Replicatプロセスは、「Table metadata resolution exception」で終了します。
たとえば、次のマッピングを考えてみます。
MAP GG.TCUSTMER, TARGET GG_HIVE.TCUSTMER_HIVE, COLMAP(USEDEFAULTS, CUST_CODE2=CUST_CODE, CITY2=CITY) KEYCOLS(CUST_CODE2);
このマッピングでは、TCUSTMER_HIVEという表を、HiveメタストアのスキーマGG_HIVEに作成する必要があります。この表がHiveに存在しない場合、次の例外が発生します。
ERROR [main) - Table Metadata Resolution Exception Unable to retrieve table matadata. Table : GG_HIVE.TCUSTMER_HIVE NoSuchObjectException(message:GG_HIVE.TCUSTMER_HIVE table not found)
親トピック: Hiveメタデータ・プロバイダ