Oracle® Fusion Middleware

Oracle GoldenGate for Big Dataの統合

リリース12c (12.2.0.1)

E72569-02(原本部品番号:E65148-03)

2016年6月

Oracle Fusion Middleware Oracle GoldenGate for Big Dataの統合, リリース12c (12.2.0.1)

E72569-02

Copyright © 2015, 2016, Oracle and/or its affiliates All rights reserved

このソフトウェアおよび関連ドキュメントの使用と開示は、ライセンス契約の制約条件に従うものとし、知的財産に関する法律により保護されています。ライセンス契約で明示的に許諾されている場合もしくは法律によって認められている場合を除き、形式、手段に関係なく、いかなる部分も使用、複写、複製、翻訳、放送、修正、ライセンス供与、送信、配布、発表、実行、公開または表示することはできません。このソフトウェアのリバース・エンジニアリング、逆アセンブル、逆コンパイルは互換性のために法律によって規定されている場合を除き、禁止されています。

ここに記載された情報は予告なしに変更される場合があります。また、誤りが無いことの保証はいたしかねます誤りを見つけた場合は、オラクル社までご連絡ください。

このソフトウェアまたは関連ドキュメントを、米国政府機関もしくは米国政府機関に代わってこのソフトウェアまたは関連ドキュメントをライセンスされた者に提供する場合は、次の通知が適用されます。

U.S. GOVERNMENT END USERS: Oracle programs, including any operating system, integrated software, any programs installed on the hardware, and/or documentation, delivered to U.S. Government end users are "commercial computer software" pursuant to the applicable Federal Acquisition Regulation and agency-specific supplemental regulations.As such, use, duplication, disclosure, modification, and adaptation of the programs, including any operating system, integrated software, any programs installed on the hardware, and/or documentation, shall be subject to license terms and license restrictions applicable to the programs.No other rights are granted to the U.S. Government.

このソフトウェアもしくはハードウェアは様々な情報管理アプリケーションでの一般的な使用のために開発されたものです。このソフトウェアもしくはハードウェアは、危険が伴うアプリケーション(人的傷害を発生させる可能性があるアプリケーションを含む)への用途を目的として開発されていません。このソフトウェアもしくはハードウェアを危険が伴うアプリケーションで使用する際、安全に使用するために、適切な安全装置、バックアップ、冗長性(redundancy)、その他の対策を講じることは使用者の責任となります。このソフトウェアもしくはハードウェアを危険が伴うアプリケーションで使用したことに起因して損害が発生しても、オラクル社およびその関連会社は一切の責任を負いかねます。

OracleおよびJavaはOracle Corporationおよびその関連企業の登録商標です。その他の名称は、それぞれの所有者の商標または登録商標です。

Intel、Intel Xeonは、Intel Corporationの商標または登録商標です。すべてのSPARCの商標はライセンスをもとに使用し、SPARC International, Inc.の商標または登録商標です。AMD、Opteron、AMDロゴ、AMD Opteronロゴは、Advanced Micro Devices, Inc.の商標または登録商標です。UNIXはThe Open Groupの登録商標です。

このソフトウェアまたはハードウェア、そしてドキュメントは、第三者のコンテンツ、製品、サービスへのアクセス、あるいはそれらに関する情報を提供することがあります。適用されるお客様とOracle Corporationとの間の契約に別段の定めがある場合を除いて、Oracle Corporationおよびその関連会社は、第三者のコンテンツ、製品、サービスに関して一切の責任を負わず、いかなる保証もいたしません。適用されるお客様とOracle Corporationとの間の契約に定めがある場合を除いて、Oracle Corporationおよびその関連会社は、第三者のコンテンツ、製品、サービスへのアクセスまたは使用によって損失、費用、あるいは損害が発生しても一切の責任を負いかねます。

目次

タイトルおよび著作権情報

はじめに

- 対象読者

- ドキュメントのアクセシビリティについて

- 関連ドキュメント

- 表記規則

1 概要

- 1.1 概要

- 1.2 Java環境設定

- 1.3 プロパティ・ファイル

- 1.4 トランザクションのグループ化

- 1.5 Replicatによる実行

- 1.5.1 Replicat構成

- 1.5.2 Replicatプロセスの追加

- 1.5.3 Replicatのグループ化

- 1.5.4 Replicatのチェックポイント化

- 1.5.5 サポートされないReplicat機能

- 1.5.6 マッピング機能

- 1.6 Extractによる実行

- 1.6.1 Extract構成

- 1.6.2 Extractプロセスの追加

- 1.6.3 Extractのグループ化

- 1.7 ロギング

- 1.7.1 ExtractまたはReplicatプロセスのロギング

- 1.7.2 Java層のロギング

- 1.8 メタデータ変更イベント

- 1.9 構成プロパティCDATA[]のラッピング

- 1.10 正規表現を使用した検索と置換

- 1.10.1 スキーマ・データの置換の使用

- 1.10.2 コンテンツ・データの置換の使用

- 1.11 Oracle GoldenGate資格証明ストアでの識別子の使用

- 1.11.1 資格証明ストアの作成

- 1.11.2 資格証明ストアへのユーザーの追加

- 1.11.3 資格証明ストアにアクセスするためのプロパティの構成

2 HDFSハンドラの使用

- 2.1 概要

- 2.2 Hiveハンドラのサポート

- 2.3 順序ファイル形式でのHDFSへの書き込み

- 2.3.1 Hiveとの統合

- 2.3.2 データ形式の理解

- 2.4 実行時の前提条件

- 2.4.1 クラスパス構成

- 2.4.2 プラガブル・フォーマッタ

- 2.4.3 HDFSハンドラ構成

- 2.4.4 サンプル構成

- 2.4.5 HDFSハンドラのトラブルシューティング

- 2.4.5.1 Javaクラスパス

- 2.4.5.2 HDFS構成プロパティ

- 2.4.5.3 ハンドラとフォーマッタ構成

- 2.4.6 パフォーマンスに関する考慮事項

- 2.4.7 セキュリティ

- 2.5 Avroオブジェクト・コンテナ・ファイル形式でのHDFSへの書き込み

- 2.6 HDFSハンドラの動作保証マトリクス

- 2.7 メタデータ変更イベント

- 2.8 パーティション化

- 2.9 注意点

- 2.10 ベスト・プラクティス

3 HBaseハンドラの使用

- 3.1 概要

- 3.2 HBaseハンドラの動作保証マトリクス

- 3.3 詳細な機能

- 3.4 実行時の前提条件

- 3.4.1 クラスパス構成

- 3.4.2 プラガブル・フォーマッタ

- 3.4.3 HBaseハンドラ構成

- 3.4.4 サンプル構成

- 3.4.5 HBaseハンドラのトラブルシューティング

- 3.4.5.1 Javaクラスパス

- 3.4.5.2 HBase接続プロパティ

- 3.4.5.3 ハンドラ構成のロギング

- 3.4.6 パフォーマンスに関する考慮事項

- 3.4.7 セキュリティ

- 3.5 メタデータ変更イベント

- 3.6 注意点

4 Flumeハンドラの使用

- 4.1 概要

- 4.2 実行時の前提条件

- 4.3 クラスパス構成

- 4.4 プラガブル・フォーマッタ

- 4.5 Flumeハンドラ構成

- 4.6 サンプル構成

- 4.7 トラブルシューティング

- 4.7.1 Javaクラスパス

- 4.7.2 Flumeフロー制御の問題

- 4.7.3 Flumeエージェント構成ファイルが見つからない

- 4.7.4 Flume接続の例外

- 4.7.5 その他のエラー

- 4.8 操作からFlumeイベントへのデータ・マッピング

- 4.8.1 操作モード

- 4.8.2 トランザクション・モードとEventMapsTo操作

- 4.8.3 トランザクション・モードとEventMapsToトランザクション

- 4.9 Flumeハンドラの動作保証マトリクス

- 4.10 パフォーマンスに関する考慮事項

- 4.11 メタデータ変更イベント

- 4.12 Flumeソース構成の例

- 4.12.1 Avro Flumeソース

- 4.12.2 Thrift Flumeソース

- 4.13 高度な機能

- 4.13.1 スキーマの伝播

- 4.13.2 セキュリティ

- 4.13.3 フェイルオーバー機能

- 4.13.4 ロード・バランシング機能

5 Kafkaハンドラの使用

- 5.1 設定と実行

- 5.1.1 実行時の前提条件

- 5.1.2 クラスパス構成

- 5.1.3 プラガブル・フォーマッタ

- 5.1.4 Kafkaハンドラ構成

- 5.1.5 サンプル構成

- 5.1.5.1 Javaアダプタ・プロパティ・ファイル

- 5.1.6 Kafkaプロデューサ構成ファイル

- 5.2 詳細な機能

- 5.2.1 トランザクション・モードと操作モード

- 5.2.2 ブロックとブロック・モード

- 5.2.3 複数トピックへの公開

- 5.3 スキーマの伝播

- 5.4 トラブルシューティング

- 5.4.1 Kafka設定の検証

- 5.4.2 クラスパスの問題

- 5.4.3 Kafkaのバージョンが無効

- 5.4.4 Kafkaプロデューサ・プロパティ・ファイルが見つからない

- 5.4.5 Kafkaの接続の問題

- 5.5 パフォーマンスに関する考慮事項

- 5.6 セキュリティ

- 5.7 Kafkaハンドラの動作保証マトリクス

- 5.8 メタデータ変更イベント

- 5.9 Snappyに関する考慮事項

6 プラガブル・フォーマッタの使用

- 6.1 操作ベースと行ベースのフォーマット

- 6.1.1 操作フォーマッタ

- 6.1.2 行フォーマッタ

- 6.2 区切りテキスト・フォーマッタ

- 6.2.1 メッセージのフォーマットの詳細

- 6.2.2 フォーマットしたメッセージの例

- 6.2.2.1 挿入メッセージの例

- 6.2.2.2 更新メッセージの例

- 6.2.2.3 削除メッセージの例

- 6.2.2.4 切捨てメッセージの例

- 6.2.3 注意点

- 6.2.4 出力形式サマリーのロギング

- 6.2.5 区切りテキスト形式の構成

- 6.2.6 サンプル構成

- 6.2.7 メタデータ変更イベント

- 6.2.8 特別な考慮事項

- 6.2.8.1 主キーの更新

- 6.2.8.2 データの統合

- 6.3 JSONフォーマッタ

- 6.3.1 メッセージのフォーマットの詳細

- 6.3.1.1 操作メタデータ

- 6.3.1.2 操作データ

- 6.3.2 JSONメッセージの例

- 6.3.2.1 挿入メッセージの例

- 6.3.2.2 更新メッセージの例

- 6.3.2.3 削除メッセージの例

- 6.3.2.4 切捨てメッセージの例

- 6.3.3 JSONスキーマ

- 6.3.4 JSONスキーマ構成

- 6.3.5 サンプル構成

- 6.3.6 メタデータ変更イベント

- 6.3.7 主キーの更新

- 6.4 Avro行フォーマッタ

- 6.4.1 メッセージのフォーマットの詳細

- 6.4.1.1 操作メタデータ

- 6.4.1.2 操作データ

- 6.4.2 Avro行メッセージの例

- 6.4.2.1 挿入メッセージの例

- 6.4.2.2 更新メッセージの例

- 6.4.2.3 削除メッセージの例

- 6.4.2.4 切捨てメッセージの例

- 6.4.3 Avroスキーマ

- 6.4.4 Avro行の構成

- 6.4.5 サンプル構成

- 6.4.6 メタデータ変更イベント

- 6.4.7 特別な考慮事項

- 6.4.7.1 トラブルシューティング

- 6.4.7.2 主キーの更新

- 6.4.7.3 汎用のラッパー機能

- 6.5 Avro操作フォーマッタ

- 6.5.1 メッセージのフォーマットの詳細

- 6.5.1.1 操作メタデータ

- 6.5.1.2 操作データ

- 6.5.2 Avro操作メッセージの例

- 6.5.2.1 挿入メッセージの例

- 6.5.2.2 更新メッセージの例

- 6.5.2.3 削除メッセージの例

- 6.5.2.4 切捨てメッセージの例

- 6.5.3 Avroスキーマ

- 6.5.4 Avro操作フォーマッタの構成

- 6.5.5 サンプル構成

- 6.5.6 メタデータ変更イベント

- 6.5.7 特別な考慮事項

- 6.5.7.1 トラブルシューティング

- 6.5.7.2 主キーの更新

- 6.5.7.3 汎用のラッパー・メッセージ

- 6.6 Avroオブジェクト・コンテナ・ファイル・フォーマッタ

- 6.6.1 Avro OCFフォーマッタの構成

- 6.7 XMLフォーマッタ

- 6.7.1 メッセージのフォーマットの詳細

- 6.7.2 XMLメッセージの例

- 6.7.2.1 挿入メッセージの例

- 6.7.2.2 更新メッセージの例

- 6.7.2.3 削除メッセージの例

- 6.7.2.4 切捨てメッセージの例

- 6.7.3 XMLスキーマ

- 6.7.4 XML構成

- 6.7.5 サンプル構成

- 6.7.6 メタデータ変更イベント

- 6.7.7 主キーの更新

7 メタデータ・プロバイダの使用

- 7.1 Avroメタデータ・プロバイダ

- 7.1.1 詳細な機能

- 7.1.2 実行時の前提条件

- 7.1.3 クラスパス構成

- 7.1.4 Avroメタデータ・プロバイダの構成

- 7.1.5 サンプル構成

- 7.1.6 メタデータ変更イベント

- 7.1.7 制限事項

- 7.1.8 トラブルシューティング

- 7.1.8.1 無効なスキーマ・ファイルの場所

- 7.1.8.2 無効なスキーマ・ファイル名

- 7.1.8.3 スキーマ・ファイルでの無効なネームスペース

- 7.1.8.4 スキーマ・ファイルでの無効な表名

- 7.2 Hiveメタデータ・プロバイダ

- 7.2.1 詳細な機能

- 7.2.2 実行時の前提条件

- 7.2.3 クラスパス構成

- 7.2.4 Hiveメタデータ・プロバイダの構成

- 7.2.5 サンプル構成

- 7.2.6 セキュリティ

- 7.2.7 メタデータ変更イベント

- 7.2.8 制限事項

- 7.2.9 注意点

- 7.2.10 トラブルシューティング

A HBaseハンドラ・クライアント依存性

- A.1 HBaseクライアント依存性

- A.1.1 HBase 1.1.1

- A.1.2 HBase 1.0.1.1

B HDFSハンドラ・クライアント依存性

- B.1 Hadoopクライアント依存性

- B.1.1 HDFS 2.7.1

- B.1.2 HDFS 2.6.0

- B.1.3 HDFS 2.5.2

- B.1.4 HDFS 2.4.1

- B.1.5 HDFS 2.3.0

- B.1.6 HDFS 2.2.0

C Flumeハンドラ・クライアント依存性

- C.1 Flumeクライアント依存性

- C.1.1 Flume 1.6.0

- C.1.2 Flume 1.5.2

- C.1.3 Flume 1.4.0

D Kafkaハンドラ・クライアント依存性

- D.1 Kafkaクライアント依存性

- D.1.1 Kafka 0.8.2.1

はじめに

このガイドには、Oracle GoldenGate for Big Dataと構成と実行に関する情報を示します。

対象読者

このガイドは、Oracle GoldenGate for Big Dataを構成および実行するシステム管理者を対象としています。

ドキュメントのアクセシビリティについて

Oracleのアクセシビリティについての詳細情報は、Oracle Accessibility ProgramのWeb サイト(http://www.oracle.com/pls/topic/lookup?ctx=acc&id=docacc)を参照してください。

Oracle Supportへのアクセス

サポート契約がある場合には、My Oracle Supportを通して電子支援をご利用いただけます。詳細情報はhttp://www.oracle.com/pls/topic/lookup?ctx=acc&id=infoか、聴覚に障害のあるお客様はhttp://www.oracle.com/pls/topic/lookup?ctx=acc&id=trsを参照してください。

関連ドキュメント

Oracle GoldenGate for Big Dataドキュメント・セットには、次のドキュメントが含まれます。

- Oracle GoldenGate for Big Dataリリース・ノート

- Oracle GoldenGate for Big Dataの統合

- Oracle GoldenGate Big Dataのインストール

- Oracle GoldenGate for Big Dataの管理

Oracle GoldenGateの完全なドキュメント・セットには、次のコンポーネントが含まれます。

表記規則

このマニュアルでは次の表記規則を使用します。

表記規則

意味

太字

太字は、操作に関連するGraphical User Interface要素、または本文中で定義されている用語および用語集に記載されている用語を示します。

イタリック体

イタリックは、ユーザーが特定の値を指定するプレースホルダ変数を示します。

固定幅フォント

固定幅フォントは、段落内のコマンド、URL、サンプル内のコード、画面に表示されるテキスト、または入力するテキストを示します。

1 概要

この章では、Oracle GoldenGate for Big Dataとその環境設定の方法、ReplicatおよびExtractとともに使用する方法、ロギング・データ、その他の構成の詳細について説明します。内容は次のとおりです。

- 概要

- Java環境設定

- プロパティ・ファイル

- トランザクションのグループ化

- Replicatによる実行

- Extractによる実行

- ロギング

- メタデータ変更イベント

- 構成プロパティCDATA[]のラッピング

- 正規表現を使用した検索と置換

1.1 概要

Oracle GoldenGate for Big Data統合は、Oracle GoldenGate Java Deliveryフレームワークへのプラガブル機能として実行され、Javaアダプタ・フレームワークとも言います。この機能は、Java Deliveryの機能を拡張します。Oracle GoldenGateアプリケーション・アダプタ・ガイドで、Java Deliveryのドキュメントを参照することをお薦めします。ビッグ・データ機能の大半は、Java Deliveryの機能を採用して拡張しています。

1.2 Java環境設定

Oracle GoldenGate for Big Data統合は、実行時にJava仮想マシンのインスタンスを作成します。Oracle GoldenGate for Big DataにはJava 7が必要です。Java 7のインストール・ディレクトリを指すようにJAVA_HOME環境変数を設定することをお薦めします。また、Java Deliveryプロセスはlibjvm.so (Windowsではlibjvm.dll)とlibjsig.so (Windowsではlibjsig.dll)のJava共有ライブラリをロードする必要があります。これらのライブラリは、JREの一部としてインストールされます。これらの共有ライブラリの場所を解決する必要があり、動的なライブラリを解決するように設定された適切な環境変数を、実行時にロードできます(つまり、LD_LIBRARY_PATH、PATHまたはLIBPATH)。

1.3 プロパティ・ファイル

Oracle GoldenGate Java Deliverのユーザー・エグジット(Oracle GoldenGate Javaアダプタとも言う)を実行するために必要なOracle GoldenGateプロパティ・ファイルが、2つあります。ビッグ・データ統合を含むJava統合をホストするOracle GoldenGate Java Deliveryです。Oracle GoldenGate Java Deliveryは、Oracle GoldenGate ReplicatまたはExtractプロセスとともに実行できますが、Replicatプロセスとともに実行するほうが適していると考えられています。ReplicatまたはExtractプロセスを実行するには、ReplicatまたはExtractプロパティ・ファイルが必要です。ReplicatまたはExtractファイルに必要な命名規則は、process_name.prmです。ReplicatまたはExtractプロパティ・ファイルでのエグジット構文には、Javaアダプタ・プロパティ・ファイルの名前と場所を指定します。Javaアダプタの構成プロパティにビッグ・データ統合が含まれるのは、Javaアダプタ・プロパティ・ファイルです。Oracle GoldenGate for Big Data統合を実行するには、両方のプロパティ・ファイルが必要です。あるいは、デフォルト構文process_name.propertiesを使用しても、Javaアダプタ・プロパティは解決できます。Javaアダプタ・プロパティ・ファイルのデフォルトの命名を使用すると、Javaアダプタ・プロパティ・ファイルの名前をReplicatまたはExtractのプロパティ・ファイルから省略できます。

Oracle GoldenGate for Big Data統合のプロパティ・ファイルの例は、次のディレクトリのサブディレクトリにあります。

GoldenGate_install_dir/AdapterExamples/big-data

1.4 トランザクションのグループ化

Oracle GoldenGate for Big Data統合でパフォーマンスを向上させる主な方法が、トランザクションのグループ化を利用する方法です。トランザクションのグループ化では、複数のトランザクションの操作をグループ化し、1つの大きいトランザクションにまとめます。大きいグループにまとめられたトランザクションを実行したほうが、通常は、小さい個別のトランザクションを実行するより効率的だからです。トランザクションのグループ化は、ReplicatとExtractのどちらのプロセスでも可能で、ReplicatまたはExtractプロセスでの実行の詳細は、次の項以降で説明します。

1.5 Replicatによる実行

この項では、Oracle GoldenGate ReplicatプロセスでJavaアダプタを実行する方法について説明します。

1.5.1 Replicat構成

JavaアダプタのReplicatプロセス・プロパティ・ファイルの例を次に示します。

REPLICAT hdfs
TARGETDB LIBFILE libggjava.so SET property=dirprm/hdfs.properties
--SOURCEDEFS ./dirdef/dbo.def
DDL INCLUDE ALL
GROUPTRANSOPS 1000
MAPEXCLUDE dbo.excludetable
MAP dbo.*, TARGET dbo.*;

次に示すのは、Replicat構成エントリの説明です。

REPLICAT hdfs - Replicatプロセスの名前。

TARGETDB LIBFILE libggjava.so SET property=dirprm/hdfs.properties - libggjava.soを終了するときのターゲット・データベースを指定し、Javaアダプタ・プロパティ・ファイルをdirprm/hdfs.propertiesに設定します

--SOURCEDEFS ./dirdef/dbo.def - ソース・データベース定義ファイルを設定します。Oracle GoldenGate 12.2.0.1の証跡ファイルは証跡でメタデータを提供するため、コメント・アウトされています。

GROUPTRANSOPS 1000: ソース証跡ファイルからの1000個のトランザクションを1つのターゲット・トランザクションにグループ化します。これがデフォルトで、ビッグ・データ統合のパフォーマンスが向上します。

MAPEXCLUDE dbo.excludetable - 除外する表を指定します。

MAP dbo.*, TARGET dbo.*; - 入力表から出力表へのマッピングを示します。

1.5.2 Replicatプロセスの追加

ggsciでReplicatプロセスを追加して起動するコマンドは、次のとおりです。

ADD REPLICAT hdfs, EXTTRAIL ./dirdat/gg
START hdfs

1.5.3 Replicatのグループ化

Replicatプロセスは、Replicat構成プロパティGROUPTRANSOPSを提供してトランザクションのグループ化を制御します。デフォルトでは、Replicatプロセスは1000個のトランザクションを1つのターゲット・トランザクションにグループ化します。トランザクションのグループ化をオフにする場合は、ReplicatプロパティGROUPTRANSOPSを1に設定します。

1.5.4 Replicatのチェックポイント化

CHECKPOINTTABLEとNODBCHECKPOINTは、Replicatを使用するJava Deliveryには該当しません。Replicatチェックポイント・ファイル(.cpr)のほか、RDBMSのReplicatにおけるCHECKPOINTTABLEと似た情報を含む追加のチェックポイント・ファイル(dirchk/<group>.cpj)も作成されます。

1.5.5 サポートされないReplicat機能

次のReplicat機能は、このリリースではサポートされません。

- BATCHSQL

- SQLEXEC

- Stored Procedure

- 競合の解決および検出(CDR)

- REPERROR

1.5.6 マッピング機能

Oracle GoldenGate Replicatプロセスは、カスタム・ターゲット・スキーマへのマッピングをサポートしています。この機能は、Oracle GoldenGate Extractプロセスを使用する場合には利用できません。メタデータ・プロバイダ機能を使用して、ターゲット・スキーマ(複数も可)を定義してから、Replicat構成ファイルで標準のReplicatマッピング構文を使用して、マッピングを定義する必要があります。レプリケーション構成ファイルでのReplicatマッピング構文については、Oracle GoldenGate Replicatのドキュメントを参照してください。メタデータ・プロバイダの設定の詳細は、「メタデータ・プロバイダの使用」を参照してください。

1.6 Extractによる実行

この項では、Oracle GoldenGate ExtractプロセスでJavaアダプタを実行する方法について説明します。

1.6.1 Extract構成

次の

EXTRACT hdfs
discardfile ./dirrpt/avro1.dsc, purge
--SOURCEDEFS ./dirdef/dbo.def
CUSEREXIT libjavaue.so CUSEREXIT PASSTHRU, INCLUDEUPDATEBEFORES, PARAMS "dirprm/hdfs.props"
GETUPDATEBEFORES
TABLE dbo.*;

次に示すのは、Replicat構成エントリの説明です。

EXTRACT hdfs - Extractのプロセス名。

discardfile ./dirrpt/avro1.dsc, purge - 破棄ファイルを設定します

--SOURCEDEFS ./dirdef/dbo.def - 12.2の証跡ファイルにはソース定義が必要です。

CUSEREXIT libjavaue.so CUSEREXIT PASSTHRU, INCLUDEUPDATEBEFORES, PARAMS "dirprm/hdfs.props" - エグジット共有ライブラリを設定し、Javaアダプタ・プロパティ・ファイルを指定します

GETUPDATEBEFORES - 操作前イメージを取得します。

TABLE dbo.*; - 複製またはフィルタに除外する表を選択します。

1.6.2 Extractプロセスの追加

ADD EXTRACT hdfs, EXTTRAILSOURCE ./dirdat/gg
START hdfs

1.6.3 Extractのグループ化

Extractプロセスには、トランザクションをグループ化する機能はありません。ただし、Java DeliveryをExtractプロセスと統合すれば、同様にトランザクションのグループ化が可能です。Java Delivery層では、Javaアダプタ・プロパティ・ファイルでの構成を利用してトランザクションをグループ化できます。

1. gg.handler.name.mode
グループ化を有効にするには、このプロパティの値をtxに設定する必要があります。

2. gg.handler.name.maxGroupSize
操作グループによって保持できる操作の最大数を制御します。その操作グループが保持する操作は、1つのトランザクションからのものか複数のトランザクションからのものかは問いません。

操作グループは、トランザクションのコミットを送信し、この操作数に達するとすぐに、グループを終了します。このプロパティで、複数の操作グループ間にトランザクションを分割します。

3. gg.handler.name.minGroupSize
これは、グループを終了する前にグループに存在する必要がある操作の最小数です。

このプロパティを使用すると、複数の小さいトランザクションを1つの操作グループにグループ化して、小さすぎるグループを回避できるので、処理が効率的になります。

注意:

maxGroupSizeは、常にminGroupSize以上でなければなりません。つまり、maxGroupSize >= minGroupSizeとなります。

注意:

ReplicatプロセスでJava Deliveryを実行する場合は、Java層のトランザクションのグループ化は使用しないことをお薦めします。Replicatプロセスで実行する場合は、ReplicatプロパティGROUPTRANSOPSによって制御されるReplicatトランザクションのグループ化を使用する必要があります。

1.7 ロギング

ビッグ・データのターゲットに対して使用するOracle GoldenGate for Big Data統合をトラブルシューティングするには、ロギングが必須です。この項では、Oracle GoldenGate for Big Data統合のログと、ロギングのベスト・プラクティスについて説明します。

1.7.1 ExtractまたはReplicatプロセスのロギング

Oracle GoldenGate for Big Data統合は、Java Deliveryの機能を利用します。Java Deliveryについては、Oracle GoldenGateアプリケーション・アダプタ・ガイドを参照してください。この設定では、Oracle GoldenGateのReplicatまたはExtractプロセスがユーザー・エグジット共有ライブラリをロードします。この共有ライブラリは次に、Java仮想マシンをロードし、それによってJavaインタフェースを提供するターゲットとのインタフェースをとります。したがって、データのフローは次のようになります。

Extractプロセス > ユーザー・イグジット > Javaレイヤー

または

Replicatプロセス > ユーザー・イグジット > Javaレイヤー

ユーザーがログを見直して新しいインストールと統合をトラブルシューティングするには、すべての層で正しくログを記録することが重要です。また、問題が発生してOracleサポートへの連絡が必要になった場合も、ログ・ファイルは問題を効率的に解決するために、Oracleサポートに提供する情報としても重要です。

ReplicatまたはExtractプロセスを実行すると、<GG Home>/dirrptディレクトリにログ・ファイルが作成または裁可されます。ファイルの命名規則は、<Replicat or Extract process name>.rptです。新しいOracle GoldenGateプロセスをデプロイするときに問題が発生した場合は、最初に問題の有無を調べるべきログの候補です。Java層には、ビッグ・データ・アプリケーションとの統合に伴う多くの困難があります。したがって、Oracle GoldenGate Big Data統合の初期設定を実行するとき、Java層では多くの問題が発生する可能性があります。そのため、Java層でのロギングの制御方法を理解する必要があります。

1.7.2 Java層のロギング

Oracle GoldenGate for Big Data製品には、Java層からログを記録できる柔軟性があります。ベスト・プラクティスとしては、Log4jロギングを使用してJava層からログを記録することをお薦めします。単純なLog4jロギングを有効にするには、Javaアダプタ構成ファイルで2つの構成値を設定する必要があります。

gg.log=log4j
gg.log.level=INFO

gg.log設定で、Log4jファイルはGoldenGate_Home/dirrptディレクトリに作成され、ファイル名はReplicat or Extract process name_log level_log4j.logという命名規則に従います。サポートされるLog4jログ・レベルは、ロギングの粒度の順に次のリストになります。

- OFF

- FATAL

- ERROR

- WARN

- INFO

- DEBUG

- TRACE

ロギング・レベルの選択には、粒度が低いほうのロギング・レベルがすべて含まれます(つまり、WARNを選択した場合は、FATAL、ERROR、WARNのログ・メッセージがログ・ファイルに書き込まれます)。Log4jロギングはまた、個々のLog4jプロパティ・ファイルでも制御できます。こうした個別のLog4jプロパティ・ファイルを有効にするには、Javaアダプタ・プロパティ・ファイルでbootoptionsプロパティを編集します。Log4jプロパティ・ファイルの3つの例が、インストール時に追加され、次のクラスパスにも含まれています。

log4j-default.properties
log4j-debug.properites
log4j-trace.properties

これらのファイルのいずれかで、次のようにbootoptionsを変更できます。

javawriter.bootoptions=-Xmx512m -Xms64m -Djava.class.path=.:ggjava/ggjava.jar -Dlog4j.configuration=samplelog4j.properties

カスタマイズした独自のLog4jプロパティ・ファイルを使用してロギングを制御できます。カスタマイズしたLog4jプロパティ・ファイルを、JVMが検索してロードするには、それがJavaクラスパスに存在する必要があります。カスタムLog4jプロパティ・ファイルの例を次に示します。

# Root logger option
log4j.rootLogger=INFO, file

# Direct log messages to a log file
log4j.appender.file=org.apache.log4j.RollingFileAppender

log4j.appender.file.File=sample.log
log4j.appender.file.MaxFileSize=1GB
log4j.appender.file.MaxBackupIndex=10
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n

カスタムのLog4jプロパティ・ファイルを使用する場合には、重要な要件が2つあります。1つ目に、カスタムLog4jプロパティ・ファイルのパスがjavawriter.bootoptionsプロパティに含まれる必要があります。ロギングは、ロギングの書記化後にgg.classpathプロパティの内容が実際にclassloaderに追加されるとき、JVMが初期化されるとただちに初期化されます。2つ目に、プロパティ・ファイルを正しくロードするclasspathは、ワイルドカードを追加していないプロパティ・ファイルを含むディレクトリである必要があります。

1.8 メタデータ変更イベント

Oracle GoldenGate 12.2の新機能の1つが、メタデータ変更イベントをソース・データベースから証跡ファイルに伝播することです。リリース12.2では、この機能はOracle Databaseのレプリケーション・ソースに限定されます。この機能を有効にする方法は、Oracle GoldenGate for Oracle Databaseのドキュメントを参照してください。

Oracle GoldenGate for Big Dataのハンドラとフォーマッタには、メタデータ変更イベントが発生したときにアクションを実行する機能があります。メタデータ変更イベントが発生したときにアクションを実行できる機能は、ソース証跡ファイルで利用できるメタデータ変更イベントによって異なります。Oracle GoldenGate 12.2は、ソースのOracleデータベースからの証跡のメタデータと、DDLデータを伝播をサポートします。ソース証跡ファイルに、証跡のメタデータとDDLデータ(メタデータ変更イベント)がない場合、Oracle GoldenGate for Big Dataはメタデータ変更イベントを処理できません。

1.9 構成プロパティCDATA[]のラッピング

のビッグ・データ・ハンドラおよびフォーマッタでは、値を空白として解釈できるJavaプロパティ・ファイルで、多くのパラメータの構成がサポートされています。Javaアダプタの構成処理では、Java構成ファイルの構成値から空白が削除されます。空白を削除するこの動作は、構成値によっては望ましいこともありますか、別の構成値には望ましくない場合もあります。空白文字を削除する場合、空白のまま残す機能がデフォルトです。一部の構成値で空白が維持されるように、空白値を特殊な構文でラップできる新機能が追加されました。Oracle for Big Dataは、空白を維持するためにCDATA[]のXML構文を借用しています。空白文字と見なされる値を、CDATA[]の内部にラップできます。

区切りテキスト・フォーマッタで、改行を区切り文字として設定しようとする例を次に示します。

gg.handler.{name}.format.lineDelimiter=\n

この構成は成功しません。改行文字は空白として解釈され、構成値から削除されてしまうからです。したがって、gg.handler設定では実質的に、行区切り文字が空白文字列に設定されます。

改行文字の構成を維持するには、次のように、その文字をCDATA[]ラッパーでラップするだけです。

gg.handler.{name}.format.lineDelimiter=CDATA[\n]

CDATA[]のラッピングでパラメータを構成すると、空白が維持され、行区切り文字は改行文字になります。CDATA[]ラッピングをサポートするパラメータを、このドキュメントで明示的にリストします。

1.10 正規表現を使用した検索と置換

個別に構成されるスキーマ・データ(カタログ名、スキーマ名、表名、列名)と列値データの両方についてより強力な検索および置換操作を実行できます。正規表現(regex)は、パターン・マッチングを通じて検索文字列をカスタマイズする文字列です。文字列を1つのパターンまたは正確に一致する部分に一致させることができます。Oracle GoldenGate for Big Dataでは、標準のOracle Java正規表現パッケージjava.util.regexを使用します。詳細は、The Single UNIX Specification, Version 4の「Base Definitions」巻にある正規表現に関する内容を参照してください。

1.10.1 スキーマ・データの置換の使用

gg.schemareplaceregexおよびgg.schemareplacestringパラメータを使用してスキーマ・データを置換できます。gg.schemareplaceregexを使用して正規表現を設定してから、それを使用してカタログ名、スキーマ名、表名、および列名で対応する一致項目を検索します。一致項目はgg.schemareplacestring値の内容に置き換えられます。gg.schemareplacestringのデフォルト値は空の文字列または""です。

たとえば、システム表名の中には、$mytableのようにドル記号から始まるものがあります。ほとんどのビッグ・データ・ターゲットでは表名にドル記号を使用できませんが、これらの表を複製する必要がある場合があります。ドル記号を削除するには、次の置換文字列を構成できます。

gg.schemareplaceregex=[$]
gg.schemareplacestring=

検索および置換された表名の結果の例はmytableです。これらのパラメータはCDATA[]ラッピングもサポートして、構成値の値の空白を保持します。したがって、前と同じ例でCDATA[]ラッピングすると次のようになります。

gg.schemareplaceregex=CDATA[[$]]
gg.schemareplacestring=CDATA[]

スキーマの検索および置換機能は、1つの検索正規表現と1つの置換文字列のみをサポートします。

1.10.2 コンテンツ・データの置換の使用

gg.contentreplaceregexおよびgg.contentreplacestringパラメータを使用してコンテンツ・データを置換し、構成された正規表現を使用して列値を検索して、一致項目を置換文字列で置換できます。たとえば、これは列値の改行文字を置き換えるのに役立ちます。区切りテキスト・フォーマッタが使用された場合、データに含まれる改行文字は分析ツールで行区切り文字として誤って解釈されます。

n個のコンテンツ置換regex検索値を構成できます。regex検索および置換は、構成の順序で実行されます。構成される値は、次の特定の順序に従う必要があります。

gg.conentreplaceregex=some_regex
gg.conentreplacestring=some_value
gg.conentreplaceregex1=some_regex
gg.conentreplacestring1=some_value
gg.conentreplaceregex2=some_regex
gg.conentreplacestring2=some_value

添え字2を使用せずに添え字3を構成すると、添え字3の構成が無視されます。

注意

正規表現の検索と置換にはコンピューティング処理が必要で、Oracle GoldenGate for Big Dataプロセスのパフォーマンスが低下する可能性があります。

改行を空白文字に置き換えるには、次のパラメータ構成を使用できます。

gg.contentreplaceregex=[\n]
gg.contentreplacestring=CDATA[ ]

これによって、列値が次の値から変更されます。

this is
me

変更後の値は次のとおりです。 :

this is me

どちらの値もCDATAラッピングをサポートします。2つ目の値はCDATA[]ラッパーでラップする必要があります。1つの空のスペースは空白と解釈されて、Oracle GoldenGate for Big Data構成層でトリミングされます。さらに、複数の検索および置換文字列を構成できます。たとえば、次の文字列から改行を削除するのに加え、列値から先頭および末尾の空白も削除します。

^\\s+|\\s+$

gg.contentreplaceregex1=^\\s+|\\s+$
gg.contentreplacestring1=CDATA[]

次のようにします。

1.11 Oracle GoldenGate資格証明ストアでの識別子の使用

Oracle GoldenGateの資格証明ストアはユーザーIDおよびその暗号化されたパスワード(ともに資格証明と呼ばれます)を管理します。これらはOracle GoldenGateプロセスにより使用され、ローカル・データベースと対話します。資格証明ストアを使用すると、Oracle GoldenGateのパラメータ・ファイルにユーザー名およびクリアテキスト・パスワードを指定する必要がなくなります。ユーザーIDのかわりにパラメータ・ファイルのオプションの別名を使用して、資格証明ストアのユーザーIDとパスワードのペアにマップすることもできます。資格証明ストアはOracle Credential Store Framework (CSF)内の自動ログイン・ウォレットとして実装されます。LDAPディレクトリの使用は、Oracle GoldenGate資格証明ストアではサポートされていません。自動ログイン・ウォレットは、必要なパスワードを指定するための人の介在を必要とせず、Oracle GoldenGateプロセスの自動再起動をサポートします。

Oracle GoldenGate for Big Dataでは、実際のユーザーIDまたはパスワードではなく、別名およびドメインをプロパティ・ファイルで指定します。

ユーザー資格証明は、セキュアなウォレット・ストレージで管理されます

1.11.1 資格証明ストアの作成

ビッグ・データ環境用の資格証明ストアを作成できます。

GGSCI ADD CREDENTIALSTOREコマンドを使用して、Oracle GoldenGateインストール・ディレクトリ(デフォルト)のdircrd/サブディレクトリにあるcwallet.ssoという名前のファイルを作成します。

資格証明ストアcwallet.ssoファイルの場所を指定するには、GLOBALSファイルのCREDENTIALSTORELOCATIONパラメータで目的の場所を指定します。

資格証明ストアのコマンドの詳細は、『Oracle GoldenGateリファレンスfor Windows and UNIX』を参照してください。

注意:

Oracle GoldenGateインスタンスごとに1つの資格証明ストアのみ使用できます。

1.11.2 資格証明ストアへのユーザーの追加

ビッグ・データ環境の資格証明ストアを作成した後、ストアにユーザーを追加できます。

各ユーザーを作成するにはGGSCI ALTER CREDENTIALSTORE ADD USER userid PASSWORD password [ALIAS alias] [DOMAIN domain]コマンドを実行します。

- useridはユーザー名です。資格証明ストアに配置できるユーザー名のインスタンスは1つのみです(ALIASまたはDOMAINオプションが使用されていない場合)。

- passwordはユーザーのパスワードです。このオプションを使用すると、パスワードはエコーされます(不明瞭化されません)。このオプションを省略すると、コマンドはパスワードを要求しますが、入力時に不明瞭化されます(より安全な方法として推奨されます)。

- aliasはユーザー名の別名です。ログイン資格証明が必要なパラメータとコマンドでは、資格証明のかわりに別名を使用します。ALIASオプションを省略すると、別名はデフォルトでユーザー名に設定されます。

次に例を示します。

ALTER CREDENTIALSTORE ADD USER scott PASSWORD tiger ALIAS scsm2 domain ggadapters

資格証明ストアのコマンドの詳細は、『Oracle GoldenGateリファレンスfor Windows and UNIX』を参照してください。

1.11.3 資格証明ストアにアクセスするためのプロパティの構成

Oracle GoldenGate Java Adapterプロパティ・ファイルでは、実行時に資格証明ストアのユーザー名とパスワード・エントリを解決する固有の構文が必要です。ユーザー名を解決するための構文は次のとおりです。

ORACLEWALLETUSERNAME alias domain_name

パスワードを解決するための構文は次のとおりです。

ORACLEWALLETPASSWORD alias domain_name

次の例は、myaliasという別名とmydomainというドメインで資格証明ストアのエントリを構成する方法を示しています。

注意:

HDFS Hive JDBCでは、ユーザー名とパスワードが暗号化されます。

gg.handler.hdfs.hiveJdbcUsername=ORACLEWALLETUSERNAME[myalias mydomain]
gg.handler.hdfs.hiveJdbcPassword=ORACLEWALLETPASSWORD[myalias mydomain]

資格証明ストアは、ユーザー名とパスワードのペア・タイプの証明書を保存するためのものですが、この機能はさらに一般的に適用できます。ユーザー名とパスワードのエントリは資格証明ストアでアクセス可能な値と見なされます。Java Adapter層で解決される(Cユーザー・イグジット層ではアクセスされない)構成パラメータは資格証明ストアから解決できます。この機能は、機密情報を含む構成エントリを保護する方法に柔軟性を持たせるために開発されました。

2 HDFSハンドラの使用

この章では、HDFSの機能について説明し、その機能の理解に役立つ例を示します。Oracle GoldenGate for Big Data Handler for HDFSは、変更取得データをHadoop Distributed File System (HDFS)にストリーミングする目的で設計されています。

この章の内容は次のとおりです。

- 概要

- 実行時の前提条件

- 順序ファイル形式でのHDFSへの書き込み

- HDFSハンドラの動作保証マトリクス

- メタデータ変更イベント

- パーティション化

- 注意点

- ベスト・プラクティス

2.1 概要

Hadoop Distributed File System (HDFS)は、ビッグ・データのための主要なアプリケーションです。Hadoopは通常、Hadoopクラスタとして機能する複数のマシンにインストールされます。Hadoopでは、きわめて大量のデータをクラスタに格納でき、そのデータはクラスタ内のマシン全体で水平方向にスケーリングします。そのうえで、様々なビッグ・データ・アプリケーションを使用してそのデータの分析を実行できます。

2.2 Hiveハンドラのサポート

Oracle GoldenGate for Big Dataリリース12.2.0.1には、Oracle GoldenGate for Big Dataリリース12.1.2.1.xに含まれていたHiveハンドラが含まれていません。12.1.2.1.xのHiveハンドラは、実際にはHiveとの直接統合に対応していません。Hiveハンドラの機能は、表ごとにパーティション化し、Hiveに適した区切りテキスト形式で、操作データをソース証跡ファイルからHDFSにロードすることです。12.2.0.1のHDFSハンドラには、以前の12.1.2.1.x Hiveハンドラの機能がすべて用意されています。

Hive統合により、表を作成してDDLイベント発生時に表定義を更新できます。この機能は、Avroオブジェクト・コンテナ・ファイル形式でフォーマットされたデータにのみ制限されます。詳細は、「Avroオブジェクト・コンテナ・ファイル形式でのHDFSの書き込み」および「HDFSハンドラ構成」を参照してください。

2.3 順序ファイル形式でのHDFSへの書き込み

HDFS SequenceFileはバイナリ・キーと値のペアで構成されているフラット・ファイルです。gg.handler.name.formatプロパティをsequencefileに設定してデータをSequenceFile形式で書き込むことができます。レコードのkey部分はnullに設定され、実際のデータはvalue部分に設定されます。

Hadoop SequenceFileの詳細は、https://wiki.apache.org/hadoop/SequenceFileを参照してください。

2.3.1 Hiveとの統合

Hive表を作成するDDLには、Hiveで順序ファイルを使用するためのSTORED as sequencefileが含まれています。表作成スクリプトのサンプルを次に示します。

CREATE EXTERNAL TABLE table_name (
col1 string,
...
...
col2 string)
ROW FORMAT DELIMITED
STORED as sequencefile
LOCATION '/path/to/hdfs/file';

注意:

ファイルがHiveで使用されるようにする場合は、gg.handler.name.partitionByTableプロパティをtrueに設定する必要があります。

2.3.2 データ形式の理解

データは各レコードのvalue部分に書き込まれ、区切りText Formatで表されます。区切りテキスト・フォーマッタで説明されているすべてのオプションが、HDFS SequenceFileにデータを書き込む際に適用されます。

次に例を示します。

gg.handler.name.format=sequencefile
gg.handler.name.format.includeColumnNames=true
gg.handler.name.format.includeOpType=true
gg.handler.name.format.includeCurrentTimestamp=true
gg.handler.name.format.updateOpKey=U

2.4 実行時の前提条件

HDFSハンドラを確実に実行するには、Hadoop単一インスタンスまたはHadoopクラスタをインストールして実行する必要があり、HDFSハンドラを実行しているマシンからネットワークにアクセスできなければなりません。Apache Hadoopはオープン・ソースであり、http://hadoop.apache.org/でダウンロードできます。単一ノード・クラスタ(疑似分散操作モードとも言う)またはクラスタ化設定(完全分散操作モードとも言う)のインストール方法は、「Getting Started」リンクをたどってください。

2.4.1 クラスパス構成

HDFSハンドラをHDFSに接続して実行するには、gg.classpath構成変数に2つのものを含める必要があります。1つ目はHDFS core-site.xmlファイル、2つ目はHDFSクライアントjarです。HDFSクライアントjarは、HDFSハンドラが接続するHDFSのバージョンと一致する必要があります。必要なクライアントJARファイルのバージョン別リストは、「HDFSハンドラ・クライアント依存性」を参照してください。

core-site.xmlファイルのデフォルトの場所は、次のとおりです。

Hadoop_Home/etc/hadoop

HDFSクライアントjarのデフォルトの場所は次のディレクトリです。

Hadoop_Home/share/hadoop/common/lib/*

Hadoop_Home/share/hadoop/common/*

Hadoop_Home/share/hadoop/hdfs/lib/*

Hadoop_Home/share/hadoop/hdfs/*

gg.classpathは、指示に従って正確に構成する必要があります。core-site.xmlのパス指定には、ワイルドカードを付けずにcore-site.xmlファイルがあるディレクトリのパスを含めてください。core-site.xml ファイルのパスにワイルドカード(*)を含めると、選択されなくなります。逆に、依存関係jarのパス指定には、そのディレクトリにあるjarファイルがすべて関連するクラスパスに含まれるように、ワイルドカード(*)を含める必要があります。*.jarは使用しないでください正しく構成したgg.classpath変数の例は、次のようになります。

gg.classpath=/ggwork/hadoop/hadoop-2.6.0/etc/hadoop:/ggwork/hadoop/hadoop-2.6.0/share/hadoop/common/lib/*:/ggwork/hadoop/hadoop-2.6.0/share/hadoop/common/*:/ggwork/hadoop/hadoop-2.6.0/share/hadoop/hdfs/*:/ggwork/hadoop/hadoop-2.6.0/share/hadoop/hdfs/lib/*

Kerberosセキュリティを有効にする場合には、HDFS構成ファイルhdfs-site.xmlもクラスパスに存在する必要があります。hdfs-site.xmlファイルは、デフォルトではHadoop_Home/etc/hadoopディレクトリに配置されます。HDFSハンドラがHadoopと同じ場所に配置されていない場合には、どちらか、または両方のファイルを別のマシンにコピーできます。

2.4.2 プラガブル・フォーマッタ

HDFSハンドラは、次のものを含むビッグ・データ・プラガブル・ハンドラをすべてサポートします。

- JSON

- 区切りテキスト

- Avro行

- Avro Operation

- Avroオブジェクト・コンテナ・ファイル行

- Avroオブジェクト・コンテナ・ファイル操作

- XML

フォーマッタの詳細は、「プラガブル・フォーマッタの使用」を参照してください。

2.4.3 HDFSハンドラ構成

Oracle GoldenGate for Big DataのHDFSハンドラの構成プロパティについて、この項で詳細に説明します。

表2-1 HDFSハンドラの構成プロパティ

プロパティ

オプション/必須

有効な値

デフォルト

説明

gg.handlerlist

必須

任意の文字列

いいえ

HDFSハンドラの名前を指定します。HDFSハンドラ名は、この表にリストしたプロパティ名の一部になります。

gg.handler.name.type=hdfs

必須

-

-

HDFSハンドラを選択し、変更データ取得をHDFSにストリーミングします。

gg.handler.name.mode

オプション

tx | op

op

ハンドラの操作(op)モードかトランザクション(tx)モードかを選択します。ほぼどんな場合でも、トランザクション・モードのほうがパフォーマンスは良くなります。

gg.handler.name.maxFileSize

オプション

デフォルトの測定単位はバイトです。k、mまたはgがそれぞれキロバイト、メガバイト、ギガバイトを表すように指定できます。有効な値は、10000、10k、100m、1.1gなどです。

1g

作成されるHDFSファイルの最大ファイル・サイズを選択します。

gg.handler.name.rootFilePath

オプション

HDFSで有効な任意のパス名

/ogg

HDFSハンドラは、データ・ストリーミングをHDFSに格納するために、HDFSにサブディレクトリを作成し、その下にファイルを作成します。

gg.handler.name.fileRollInterval

オプション

デフォルトの測定単位はミリ秒です。ms、s、m、hがそれぞれ、ミリ秒、秒、分、時間を表すように指定できます。有効な値は、10000、10000ms、10s、10m、1.5hなどです。0以下の値を指定すると、ファイルのローリング・オン時間がオフになります。

ファイルのローリング・オン時間がオフ。

タイマーはHDFSファイルが作成されるときにスタートします。間隔が経過したときにまだファイルが開いている場合、そのファイルは閉じられます。新しいファイルはすぐ開かれません。新しいHDFSファイルは、ジャスト・イン・タイム・ベースで作成されます。

gg.handler.name.inactivityRollInterval

オプション

デフォルトの測定単位はミリ秒です。ms、s、m、hがそれぞれ、ミリ秒、秒、分、時間を表すように指定できます。有効な値は、10000、10000ms、10s、10.5m、1hなどです。0以下の値を指定すると、ファイルの非アクティブ・ローリング・オン時間がオフになります。

ファイルの非アクティブ・ローリング・オン時間がオフ。

タイマーは、HDFSファイルへの前回の書込みからスタートします。HDFSファイルへの新しい書込みでカウンタが再開されます。カウンタが経過したときにまだファイルが開いている場合、そのHDFSファイルは閉じられます。新しいファイルはすぐ開かれません。新しいHDFSファイルは、ジャスト・イン・タイム・ベースで作成されます。

gg.handler.name.fileSuffix

オプション

HDFSファイル名の制限に従う任意の文字列。

.txt

これは、HDFSファイル名の最後に追加される接尾辞です。ファイル名は通常、{fully qualified table name}{current time stamp}{suffix}という形式です。

gg.handler.name.partitionByTable

オプション

true | false

true (データは表ごとにパーティション化される)

HDFSに書き込まれるデータを表ごとにパーティション化するかどうかを決定します。trueに設定すると、異なる表のデータは異なるHDFSファイルに書き込まれます。falseの場合、異なる表からのデータが同じHDFSファイルにインタレースされます。

Avroオブジェクト・コンテナ・ファイル・フォーマッタを使用するにはtrueに設定する必要があります。falseに設定すると、初期化時に構成の例外が発生します。

gg.handler.name.rollOnMetadataChange

オプション

true | false

true (HDFSファイルは、メタデータ変更イベント時にロールされます)

メタデータの変更があった場合に、HDFSファイルをロールするかどうかを決定します。trueの場合はHDFSがロールされ、falseの場合はHDFSがロールされません。

Avroオブジェクト・コンテナ・ファイル・フォーマッタを使用するにはtrueに設定する必要があります。falseに設定すると、初期化時に構成の例外が発生します。

gg.handler.name.format

オプション

delimitedtext | json | xml | avro_row | avro_op | avro_row_ocf | avro_op_ocf | sequencefile

delimitedtext

出力データのフォーマット方法について、HDFSハンドラのフォーマッタを選択します

- delimitedtext - 区切りテキスト

- json - JSON

- xml - XML

- avro_row - 行コンパクト形式のAvro

- avro_op - 操作詳細形式のAvro

- avro_row_ocf: Avroオブジェクト・コンテナ・ファイル形式でHDFSに書き込まれる行コンパクト形式のAvro。

- avro_op_ocf: Avroオブジェクト・コンテナ・ファイル形式でHDFSに書き込まれる詳細形式のAvro。

- sequencefile: 順序ファイル形式でHDFSに順番に書き込まれる区切りテキスト。

gg.handler.name.includeTokens

オプション

true | false

false

トークン・フィールドとトークン・キーや値を出力に含める場合はtrueに設定し、トークン出力を表示しない場合はfalseに設定します。

gg.handler.name.partitioner.fully_qualified_table_ name

カンマで区切られた1つ以上の列名と等しい

オプション

完全修飾の表名と列名が存在する必要があります。

-

これは、par_{column name}={column value}という形式で、HDFSのデータをサブディレクトリに分割します。

gg.handler.name.authType

オプション

kerberos

none

このプロパティを

kerberos
に設定すると、Kerberos認証が有効になります。

gg.handler.name.kerberosKeytabFile

オプション(

authType=Kerberos
の場合は必須)

Kerberos keytabファイルの相対パスまたは絶対パス

-

keytabファイルを使用すると、HDFSハンドラがパスワードにアクセスし、Kerberosセキュリティに対してkinit操作を実行できます。

gg.handler.name.kerberosPrincipal

オプション(

authType=Kerberos
の場合は必須)

user/FQDN@MY.REALMなどの有効なKerberosプリンシパル名。

-

Kerberos認証で用いるKerberosプリンシパル名。

gg.handler.name.schemaFilePath

オプション

null

HDFSの有効なパスに設定して、スキーム(使用可能な場合)はHDFSディレクトリに書きこまれるようにします。スキーマは現在AvroおよびJSONフォーマッタでのみ使用できます。メタデータ変更イベントが発生すると、スキーマが上書きされてスキーマの変更が反映されます。

gg.handler.name.compressionType

順序ファイル形式にのみ適用可能

オプション

block | none | record

none

Hadoop順序ファイル圧縮タイプ。gg.handler.name.formatがsequencefileに設定されている場合にのみ適用可能です。

gg.handler.name.compressionCodec

順序ファイルに適用可能で、HDFSへの書き込みはAvro OCF形式のみ

オプション

org.apache.hadoop.io.compress.DefaultCodec | org.apache.hadoop.io.compress. BZip2Codec | org.apache.hadoop.io.compress.SnappyCodec | org.apache.hadoop.io.compress. GzipCodec

org.apache.hadoop.io.compress.DefaultCodec

Hadoop順序ファイル圧縮コーデック。gg.handler.name.formatがsequencefileに設定されている場合にのみ適用可能です。

オプション

null | snappy | bzip2 | xz | deflate

null

Avro OCFフォーマッタ圧縮コード。この構成では、生成されたAvro OCFファイルに使用される圧縮ライブラリの選択を制御します。

SnappyはSnappy JARファイルにネイティブ・バイナリを含み、圧縮または圧縮解除の実行時にJava-nativeトラバーサルを実行します。Snappyを使用することで、Javaを使っているときは発生しない実行時の問題やプラットフォームの移植の問題が生じる場合があります。場合によっては、追加のテストを実施して、Snappyが必要なすべてのプラットフォームで確実に動作するか確認する必要があります。Snappyはオープン・ソース・ライブラリであるため、Oracleは必要なすべてのプラットフォームでの稼動を保証できません。

gg.handler.name.hiveJdbcUrl

オプション

Hive JDBCインタフェースを使用してHiveに接続するための有効なURL。

null (Hive統合は無効)

Avroオブジェクト・コンテナ・ファイル (OCF)フォーマッタにのみ適用できます。

この構成値では、Hive JDBCインタフェースを通じてHiveに接続するためのJDBC URLを指定します。このプロパティを使用するには、gg.classpathにHive JDBCライブラリを含める必要があります。

Hive JDBC接続は、基本の資格証明、SSL/TLS、またはKerberosを介して保護できます。基本の資格証明では、ユーザー名およびパスワードの構成プロパティが指定されます。

SSL/TLSでのHive JDBC URLの生成方法については、Hiveドキュメントを参照してください。

KerberosでのHive JDBC URLの生成方法については、Hiveドキュメントを参照してください(Hive JDBCのセキュリティにKerberosを使用する場合、HDFS接続に対してKerberosを有効にする必要があります。この場合、Hive JDBC接続は同じKerberosプリンシパルを使用してHDFS Kerberos機能でピギーバックすることができます)。

gg.handler.name.hiveJdbcUserName

オプション

Hive JDBC接続が資格証明により保護される場合の有効なユーザー名。

System.getProperty(user.name)からのJavaの呼び出し結果

Avroオブジェクト・コンテナ・ファイル (OCF)フォーマッタにのみ適用できます。

このプロパティは、hiveJdbcUrlプロパティが設定されている場合にのみ関連します。JDBC接続が資格証明により保護されている場合に、環境に必要になる場合があります。Hiveでは、Hive DDL操作がユーザーに関連付けられている必要があります。値を設定しない場合、デフォルトはJavaの呼び出しSystem.getProperty(user.name)の結果になります。

gg.handler.name.hiveJdbcPassword

オプション

完全修飾のHive JDBCドライバ・クラス名

org.apache.hive.jdbc.HiveDriver

Avroオブジェクト・コンテナ・ファイル (OCF)フォーマッタにのみ適用できます。

このプロパティは、hiveJdbcUrlプロパティが設定されている場合にのみ関連します。デフォルトはHive Hadoop2 JDBCドライバ名です。通常、このプロパティは構成が不要で、Apache Hiveに新しいJDBCドライバ・クラスが導入される場合に使用されます。

2.4.4 サンプル構成

Javaアダプタ・プロパティ・ファイルからのHDFSハンドラの構成例を次に示します。

gg.handlerlist=hdfs
gg.handler.hdfs.type=hdfs
gg.handler.hdfs.mode=tx
gg.handler.hdfs.includeTokens=false
gg.handler.hdfs.maxFileSize=1g
gg.handler.hdfs.rootFilePath=/ogg
gg.handler.hdfs.fileRollInterval=0
gg.handler.hdfs.inactivityRollInterval=0
gg.handler.hdfs.fileSuffix=.txt
gg.handler.hdfs.partitionByTable=true
gg.handler.hdfs.rollOnMetadataChange=true
gg.handler.hdfs.authType=none
gg.handler.hdfs.format=delimitedtext

HDFS統合のレプリケーション構成とJavaアダプタ・プロパティ・ファイルの例は、次のディレクトリにあります。

GoldenGate_install_directory/AdapterExamples/big-data/hdfs

2.4.5 HDFSハンドラのトラブルシューティング

HDFSハンドラのトラブルシューティングは、Java log4jファイルの内容から始まります。Javaロギング構成にある指示に従って、Java log4jログ・ファイルを正しく生成するようにランタイムを構成してください。

2.4.5.1 Javaクラスパス

前述したように、Javaクラスパスは非常によくある問題の1つです。クラスパスに問題があることは通例、Java log4jログ・ファイルの、ClassNotFoundExceptionでわかります。この問題のトラブルシューティングに、Java log4jログ・ファイルを使用できます。ログ・レベルをDEBUGに設定すると、ログ・ファイルに記録されるgg.classpathオブジェクトで参照されているjarそれぞれを記録できます。これを利用して、必要な依存性jarがすべて解決されることを確認できます。単にDEBUGレベルのロギングを有効にし、ログ・ファイルで次のようなメッセージを探すだけです。

2015-09-21 10:05:10 DEBUG ConfigClassPath:74 - ...adding to classpath: url="file:/ggwork/hadoop/hadoop-2.6.0/share/hadoop/common/lib/guava-11.0.2.jar

2.4.5.2 HDFS構成プロパティ

HDFS core-site.xmlファイル(デフォルト設定を含んでいる)の内容は、ロギング・レベルを DEBUGまたはTRACEに設定している場合に、Java log4jログ・ファイルに出力されます。これには、HDFSへの接続プロパティが示されます。Java log4jログ・ファイルで次のものを検索します。

2015-09-21 10:05:11 DEBUG HDFSConfiguration:58 - Begin - HDFS configuration object contents for connection troubleshooting.

fs.defaultFSプロパティが次のように設定されている場合(ローカル・ファイル・システムを示している)、core-site.xmlファイルはgg.classpathプロパティで適切に設定されていません。

Key: [fs.defaultFS] Value: [file:///].

適切にHDFSホストおよびポートが指定されたfs.defaultFSは、次のようになります。

Key: [fs.defaultFS] Value: [hdfs://hdfshost:9000].

2.4.5.3 ハンドラとフォーマッタ構成

Java log4jログ・ファイルには、HDFSハンドラおよび選択したフォーマッタの構成状態に関する情報が含まれています。この情報は、INFOログ・レベルで出力されます。サンプルの出力は、次のようになります。

2015-09-21 10:05:11 INFO  AvroRowFormatter:156 - **** Begin Avro Row Formatter -
Configuration Summary ****
Operation types are always included in the Avro formatter output.
The key for insert operations is [I].
The key for update operations is [U].
The key for delete operations is [D].
The key for truncate operations is [T].
Column type mapping has been configured to map source column types to an
appropriate corresponding Avro type.
Created Avro schemas will be output to the directory [./dirdef].
Created Avro schemas will be encoded using the [UTF-8] character set.
In the event of a primary key update, the Avro Formatter will ABEND.
Avro row messages will not be wrapped inside a generic Avro message.
No delimiter will be inserted after each generated Avro message.
**** End Avro Row Formatter - Configuration Summary ****

2015-09-21 10:05:11 INFO  HDFSHandler:207 - **** Begin HDFS Handler -
Configuration Summary ****
Mode of operation is set to tx.
Data streamed to HDFS will be partitioned by table.
Tokens will be included in the output.
The HDFS root directory for writing is set to [/ogg].
The maximum HDFS file size has been set to 1073741824 bytes.
Rolling of HDFS files based on time is configured as off.
Rolling of HDFS files based on write inactivity is configured as off.
Rolling of HDFS files in the case of a metadata change event is enabled.
HDFS partitioning information:
The HDFS partitioning object contains no partitioning information.
HDFS Handler Authentication type has been configured to use [none]
**** End HDFS Handler - Configuration Summary ****

2.4.6 パフォーマンスに関する考慮事項

HDFSハンドラは、書込み永続性を維持する目的で、各トランザクションの最後にHDFSデータノードにデータをフラッシュするために、HDFS書込みストリームでHDFSフラッシュ・メソッドを呼び出します。これは負荷の高いコールです。1つまたは複数の操作のトランザクションで多数のHDFSフラッシュ・コールが発生する場合には特に、パフォーマンスが悪影響を受ける可能性があります。

複数の小さいトランザクションを1つの大きいトランザクションのバッチ処理にまとめると、HDFSハンドラのパフォーマンスが大幅に向上する可能性があります。高いパフォーマンスが必要な場合には、ExtractプロセスまたはReplicatプロセスによって提供されるバッチ処理機能を構成する必要があります。詳細は、「Replicatのグループ化」の項を参照してください。

HDFSクライアント・ライブラリは、HDFSハンドラがオープンするHDFSファイル・ストリームごとにスレッドを生成します。そのため、JMVを実行するスレッドの数は、オープンしているHDFSファイル・ストリームの数に比例して増加します。オープンしているHDFSファイル・ストリームが増えると、HDFSハンドラのパフォーマンスが低下する可能性があります。ソース・レプリケーション表が多い、またはパーティション化を多用しているという理由で、多くのHDFSファイルに書き込むようHDFSハンドラを構成すると、パフォーマンスが低下することがあります。ユースケースによって、多くの表への書込みが必要な場合は、HDFSファイル・ストリームをクローズするロール・オン時間またはロール・オン非アクティブの機能を有効にすることをお薦めします。HDFSファイル・ストリームをクローズすると、HDFSクライアント・スレッドが終了し、関連するリソースをJVMが再利用できるようになります。

2.4.7 セキュリティ

HDFSクラスタは、Kerberos認証を使用して保護できます。Kerberosを使用してHadoopクラスタを保護する方法は、HDFSのドキュメントを参照してください。HDFSハンドラは、Kerberosで保護されたクラスタに接続できます。HDFS core-site.xmlがハンドラのクラスパスにあり、hadoop.security.authenticationプロパティをkerberosに、hadoop.security.authorizationプロパティをtrueに設定する必要があります。また、HDFSハンドラのJava構成ファイルで次のプロパティを設定する必要があります。

gg.handler.name.authType=kerberos
gg.handler.name.keberosPrincipalName=legal Kerberos principal name
gg.handler.name.kerberosKeytabFile=path to a keytab file that contains the password for the Kerberos principal so that the HDFS Handler can programmatically perform the Kerberos kinit operations to obtain a Kerberos ticket

2.5 Avroオブジェクト・コンテナ・ファイル形式でのHDFSへの書き込み

HDFSハンドラには、Avroオブジェクト・コンテナ・ファイル(OCF)形式でHDFSに書き込むための特殊な機能が含まれています。このAvro OCFはAvro仕様の一部です。詳細は次の場所にあるAvroドキュメントを参照してください。

https://avro.apache.org/docs/current/spec.html#Object+Container+Files

次の理由からAvro OCF形式は最適な選択です。

- Apache Hive (HDFSに書き込まれる未加工のAvroはHiveでサポートされない)と統合できる

- スキーマ展開に対する適切なサポートを提供するHDFSにAvro OCF形式で書き込みできるようにするには、次の構成を行います。

行データをHDFSにAvro OCF形式で書き込むには、gg.handler.name.format=avro_row_ocfプロパティを構成します。

操作データをHDFSにAvro OCF形式で書き込むには、gg.handler.name.format=avro_op_ocfプロパティを構成します。

HDFS/Avro OCF統合には、Hiveで対応する表を作成し、メタデータ変更イベントについてスキーマを更新するためのオプション機能が含まれています。構成の項では、Hiveとの統合を有効にするプロパティに関する情報を説明しています。Oracle GoldenGate Hive統合はJDBCインタフェースを使用してHiveにアクセスするため、この統合を有効にするにはHive JDBCサーバーを実行する必要があります

2.6 HDFSハンドラの動作保証マトリクス

12.2.0.1のOracle GoldenGate for Big DataのHDFSハンドラは、次のバージョンのApache Hadoopと連携するように設計されています。

- 2.7.x

- 2.6.0

- 2.5.x

- 2.4.x

- 2.3.0

- 2.2.0

HDFSハンドラは、Apache Hadoopが一緒にパッケージされている次のバージョンのHortonworks Data Platform (HDP)とも連携します。

- HDP 2.4 (HDFS 2.7.1)

- HDP 2.3 (HDFS 2.7.1)

- HDP 2.2 (HDFS 2.6.0)

- HDP 2.1 (HDFS 2.4.0)

- HDP 2.0 (HDFS 2.2.0)

HDFSハンドラは、Apache Hadoop (CDH)を含む次のバージョンのCloudera Distributionとも連携します。

- CDH 5.7.x (HDFS 2.6.0)

- CDH 5.6.x (HDFS 2.6.0)

- CDH 5.5.x (HDFS 2.6.0)

- CDH 5.4.x (HDFS 2.6.0)

- CDH 5.3(HDFS 2.5.0)

- CDH 5.2.x (HDFS 2.5.0)

- CDH 5.1.x (HDFS 2.3.0)

2.7 メタデータ変更イベント

メタデータ変更イベントが、HDFSハンドラによって処理されるようになりました。HDFSハンドラのデフォルトの動作では、メタデータ変更イベントが発生した場合、現在の関連ファイルがロールされます。この動作により、メタデータ変更の結果は少なくとも複数のファイルに分割できます。メタデータ変更に対するファイル・ローリングは設定変更が可能なので、オフにすることができます。

メタデータ変更イベントをサポートするには、ソース・データベースで変更を取得するプロセスが、DDL変更と証跡でのメタデータの両方をサポートする必要があります。Oracle GoldenGateでは、すべてのデータベース実装でDDLレプリケーションがサポートされているわけではありません。DDLレプリケーションがサポートされているかどうかを確認するには、データベース実装ごとのOracle GoldenGateドキュメントを参照してください。

2.8 パーティション化

HDFSハンドラは、1つ以上の列値による表データのパーティション化をサポートしています。パーティション化を有効にする構成構文は、次のとおりです。

gg.handler.name.partitioner.fully qualified table name=one mor more column names separated by commas

次の例で考えてみます。

gg.handler.hdfs.partitioner.dbo.orders=sales_region

この例では、HDFSでファイルが次のように分割されます。

/ogg/dbo.orders/par_sales_region=west/data files
/ogg/dbo.orders/par_sales_region=east/data files
/ogg/dbo.orders/par_sales_region=north/data files
/ogg/dbo.orders/par_sales_region=south/data files

パーティション化する列は、慎重に選択してください。重要なのは、値の候補が少ない(10個以下)列を選択することと、その値がグループ化とデータの分析に有意であることです。たとえばセールス地域は、パーティション化列として適切です。顧客の生年月日などは、パーティション化列に適していません。値の候補が多い列でパーティション化を構成すると、問題が起きる可能性があります。選択を誤ると、数百ものHDFSファイル・ストリームがオープンし、パフォーマンスに関する項で説明したように、パフォーマンスが低下する恐れがあります。また、パーティション化が不適切だと、データの分析を実行する際にも問題が起きます。Apache Hiveで、Hiveデータをパーティション化する場合には、WHERE句のすべてにパーティション基準を指定する必要があります。

2.9 注意点

特に一般的なのが、Javaクラスパスに関する問題です。Oracle HDFSハンドラでは、HDFSにデータをストリーミングする前提条件として、特定のHDFSクライアント・ライブラリをクラスパスで解決する必要があります。

必要なクライアントJARファイルのバージョン別リストは、「HDFSハンドラ・クライアント依存性」を参照してください。HDFSクライアントjarは、Oracle GoldenGate for Big Data製品に付属しません。HDFSハンドラは複数のバージョンのHDFSをサポートし、HDFSクライアントjarはHDFSハンドラが接続するHDFSと同じバージョンである必要があります。HDFSクライアントjarはオープン・ソースであり、Apache HadoopサイトやMaven中央リポジトリなどのサイトから無償でダウンロードできます。

HDFSへの接続を確立するには、HDFSハンドラのクラスパスにHDFS core-site.xmlファイルが存在する必要があります。core-site.xmlファイルがクラスパスに存在しない場合、HDFSクライアント・コードのデフォルトは、ローカル・ファイル・システムに書き込もうとするモードになります。HDFSではなくローカル・ファイル・システムに書き込むと、トラブルシューティングや、連絡ポイント(POC)の構築に、またはHDFS統合を確立するプロセスの手順の1つとして便利です。

もう1つ気を付けたいのは、HDFSハンドラを使用してHDFSにストリーミングされるデータは、Hiveなどのビッグ・データ分析ツールですぐには利用できない場合も多いということです。これは主に、HDFSファイルに対してオープンしている書込みストリームをHDFSハンドラが保有している場合に発生します。デフォルトでは、HDFSは128MBのブロックで書き込みます。構築中のHDFSブロックは、分析ツールが認識されないことがあります。また、HDFSシェルで-ls、-cat、-getの各コマンドを使用するとき、ファイル・サイズ間に矛盾が見られるのも一般的です。これはHDFSストリーミングの異常であり、HDFS仕様にも書かれています。HDFSのこの異常が原因で、分析データにはファイルごとに128MBのブラインド・スポットが発生することがあります。レプリケーション・データのストリームが一定しており、HDFSからの分析データに低レベルのレイテンシが必要なければ、これは問題になりません。ただし、場合によってはこれが問題になることがあります。HDFS書込みストリームをクローズすると、ブロック書込みがファイナライズされます。データは分析ツールですぐに認識され、ファイル・サイズの測定は再び安定します。そのため、HDFSハンドラに追加されたファイル・ローリング機能を使用すると、HDFS書込みストリームをクローズしてすべてのデータを認識させることができます。

注意:

ファイル・ローリング・ソリューションは、それ自体に問題がある場合もあります。ファイル・ローリングを多用すると、HDFSに小さいファイルが大量に発生します。HDFSに小さいファイルが大量にあると、それ自体が分析ツールのパフォーマンス低下の原因になります。

次の場合にも、HDFSに矛盾の問題が発生する可能性があります。

- HDFSハンドラ・プロセスがクラッシュする。

- HDFSハンドラ・プロセスで強制シャットダウンが呼び出される。

- ネットワークの停止、その他の原因でHDFSハンドラ・プロセスが異常終了する。

どの場合にもHDFSハンドラは、HDFS書込みストリームを明示的にクローズして書込みブロックをファイナライズせずに終了する可能性があります。内部プロセスとしてHDFSは、書込みストリームが破損していることを最終的に認識し、HDFSが書込みブロックをファイナライズします。ただし、この場合、HDFSプロセスが書込みブロックをファイナライズする前に短時間の遅延が発生することがあります。

2.10 ベスト・プラクティス

HDFSクラスタは、クラスタ・ノードと呼ばれる専用サーバーで稼働させるのが、ビッグ・データのベスト・プラクティスと考えられています。エッジ・ノードとは、HDFSクラスタ・ノードにデータをストリーミングし、HDFSクラスタ・ノードからデータを取得するアプリケーションをホストするサーバー・マシンです。HDFSクラスタ・ノードとエッジ・ノードの間に存在するこの物理的なアーキテクチャ構造には、次のように様々なメリットがあります。

- HDFSクラスタ・ノードが、クラスタのインタフェースを提供するアプリケーションと、リソースをめぐって競合しない。

- HDFSクラスタ・ノードとエッジ・ノードで要件が異なる可能性がある。この物理トポロジのために、特定のニーズに応じて適切なハードウェアを構成できます。

ベスト・プラクティスとして、HDFSハンドラはエッジ・ノードにインストールして実行し、ネットワーク接続を使用してHDFSクラスタにデータをストリーミングするようにします。HDFSハンドラは、ネットワーク上でHDFSクラスタに認識されればどのマシン上でも実行できます。HDFSハンドラをエッジ・ノードにインストールするには、core-site.xml ファイルと依存性jarをエッジ・ノードにコピーし、HDFSハンドラがアクセスできるようにする必要があります。必要に応じて、HDFSハンドラはHDFSクラスタ・ノード上に共存させることもできます。

3 HBaseハンドラの使用

Oracle GoldenGate for Big Data Handler for HBaseでは、既存のOracle GoldenGateでサポートされている既存のソースからHBase表に移入することができます。

この章は次の項で構成されています:

- 概要

- HBaseハンドラの動作保証マトリクス

- 詳細な機能

- 実行時の前提条件

- メタデータ変更イベント

- 注意点

3.1 概要

HBaseは、リレーショナル・データベース管理システム(RDBMS)の機能をほとんどエミュレートできるオープン・ソースのビッグ・データ・アプリケーションです。Hadoopは、大量の非構造化データを格納する目的で設計されています。逆に、データベースに格納され、Oracle GoldenGateを通じて複製されるデータは、高度に構造化されています。HBaseには、データの重要な構造を維持しながら、Hadoop Distributed File System (HDFS)によって提供される水平方向のスケーリングの利点を活かす方法があります。

3.2 HBaseハンドラの動作保証マトリクス

Cloudera HBase 5.4.x以降にはApache HBase 1.0.0クライアント・インタフェースが完全に採用されていないため、そのHBaseクライアント・インタフェースに下位互換性を提供するApache HBaseコード行と完全に同期しません。つまり、Cloudera HBaseは新しいHBase 1.0.0インタフェースのバイナリ互換性を損ない、Oracle GoldenGate for Big Data HBase Handlerと統合するときに、NoSuchMethodErrorが生じます。これは次の2つの方法のいずれかで解決できます。

- HBaseハンドラ構成プロパティhBase98Compatibleをtrueに設定して0.98.x HBaseインタフェースを使用するようHBaseハンドラを構成します。

- または、CDH 5.4.x以降のHBaseに接続する際に、Apache HBaseクライアント・ライブラリを使用できます。

12.2.0.1 Oracle GoldenGate for Big Data HBase Handlerは、次と連動する設計になっています。

ディストリビューション

バージョン

Apache HBase

hBase98Compatibleプロパティをtrueに設定した場合は0.98.xおよび0.96.x

1.1.xおよび1.0.x

Apache HBaseを含むHortonworks Data Platform (HDP)

HDP 2.4 (HBase 1.1.2)

HDP 2.3 (HBase 1.1.1)

hBase98Compatibleプロパティをtrueに設定した場合はHDP 2.2 (HBase 0.98.4)

Cloudera Apache Hadoop (CDH)

hBase98Compatibleプロパティをtrueに設定した場合はCDH 5.7.x (HBase 1.2.0)

hBase98Compatibleプロパティをtrueに設定した場合はCDH 5.6.x (HBase 1.0.0)

hBase98Compatibleプロパティをtrueに設定した場合はCDH 5.5.x (HBase 1.0.0)

hBase98Compatibleプロパティをtrueに設定した場合はCDH 5.4.x (HBase 1.0.0)

hBase98Compatibleプロパティをtrueに設定した場合はCDH 5.3.x (HBase 0.98.6)

hBase98Compatibleプロパティをtrueに設定した場合はCDH 5.2.x (HBase 0.98.6)

hBase98Compatibleプロパティをtrueに設定した場合はCDH 5.1.x (HBase 9.98.1)

3.3 詳細な機能

HBaseハンドラは、ソース証跡ファイルから操作を取得し、対応する表をHBaseに作成してから、変更取得データをその表にロードします。

HBase表名

HBaseに作成される表名は、ソース証跡ファイルからの操作の対応する表名にマップされます。大文字と小文字は区別されます。

HBase表のネームスペース

表名が2つの部分(スキーマ名と表名)からなる場合、スキーマ名はHBase表のネームスペースにマップされます。Catalog.Schema.MyTableのように表名が3つの部分からなる場合、作成されるHBaseネームスペースはCatalog_Schemaとなります。HBase表のネームスペースは大/小文字が区別されます。NULLスキーマ名もサポートされており、デフォルトのNULLネームスペースにマップされます。

HBase行キー

HBaseには、データベースの主キーと似たHBase行キーという概念があります。HBase行キーは、表の行を示す一意の識別子です。HBaseがサポートするのは1行当たり1つの行キーのみで、空またはNULLにはできません。HBaseハンドラは、主キー値をHBase行キー値にマップします。ソース表に複数の主キーがある場合、主キー値は連結され、パイプ区切り文字(|)で区切られます。HBase行キーの区切り文字を構成できます。

ソース表には、少なくとも1つの主キー列が必要です。主キーのない表を複製すると、HBaseハンドラが異常終了します。

HBaseの列ファミリ

HBaseには、列ファミリという概念があります。、列ファミリは、列データをグループ化するメカニズムです。サポートされるのは、1つの列ファミリのみです。HBaseの各列は、1つの列ファミリに属している必要があります。HBaseハンドラには、表ごとに1つの列ファミリがあり、デフォルトはcfです。列ファミリ名は、ユーザーが設定を変更できます。ただし、いったん特定の列ファミリ名で表を作成した場合、先にその表を変更または削除せずにHBaseサンプルで列ファミリ名を再構成すると、Oracle GoldenGate ExtractおよびReplicatプロセスが異常終了します。

3.4 実行時の前提条件

HBaseは、HBaseハンドラプロセスと同じ場所に配置して稼働しているか、HBaseハンドラ・プロセスをホストしているマシンからネットワーク接続できる別のマシン上で稼働している必要があります。また、HDFSのリポジトリとして機能している基礎となるHDFSの単一インスタンスまたはクラスタ化されたインスタンスが稼働している必要があります。

3.4.1 クラスパス構成

HBaseハンドラをHBaseに接続してデータをストリーミングするには、gg.classpath構成変数に2つのものを含める必要があります。1つ目はhbase-site.xmlファイル、2つ目はHBaseクライアントjarです。HBaseクライアントjarは、HBaseハンドラが接続するHBaseのバージョンと一致する必要があります。HBaseクライアントjarは、Oracle GoldenGate for Big Data製品に付属しません。

バージョンごとに必要なHBaseクライアントjarのリストは、「HBaseハンドラ・クライアント依存性」を参照してください。

hbase-site.xmlファイルのデフォルトの場所は、HBase_Home/confです。

HBaseクライアントJARのデフォルトの場所は、HBase_Home/lib/*です。

HBaseハンドラがWindowsで実行されている場合は、Windowsのクラスパス指定構文に従います。

gg.classpathは、説明に従って正確に構成する必要があります。hbase-site.xmlのパス指定に含めるパスには、ワイルドカードを使用しないでください。hbase-site.xmlファイルのパスにワイルドカード(*)を含めると、アクセスできなくなります。逆に、依存関係jarのパス指定には、そのディレクトリにあるjarファイルがすべて関連するクラスパスに含まれるように、ワイルドカード(*)を含める必要があります。*.jarは使用しないでください正しく構成したgg.classpath変数の例は、次のようになります。

gg.classpath=/var/lib/hbase/lib/*:/var/lib/hbase/conf

3.4.2 プラガブル・フォーマッタ

プラガブル・フォーマッタは、HBaseハンドラには適用されません。データは、プロプライエタリなHBaseクライアント・インタフェースを使用してHBaseにストリーミングされます。

3.4.3 HBaseハンドラ構成

表3-1 HBaseハンドラの構成パラメータ

パラメータ

必須/オプション

有効な値

デフォルト

説明

gg.handlerlist

必須

任意の文字列

いいえ

HBaseハンドラの名前を指定します。HBaseハンドラ名は、この表にリストしたプロパティ名の一部になります。

gg.handler.name.type=hbase

必須

-

-

HBaseハンドラを選択し、変更データ取得をHBaseにストリーミングします

gg.handler.name.hBaseColumnFamilyName

オプション

HBase列ファミリ名として有効な任意の文字列

cf

列ファミリは、HBaseで列をグループ化するメカニズムです。12.2リリースでは、HBaseハンドラは1つの列ファミリのみサポートします。

gg.handler.name.includeTokens

オプション

true | false

false

trueは、HBaseへの出力にトークン値が含まれることを示します。falseは、トークン値が含まれないことを意味します。

gg.handler.name.keyValueDelimiter

オプション

任意の文字列

=

マップにおけるキーと値の間の区切り文字を指定します。たとえば、key=value,key1=value1,key2=value2となります。トークンはマップされた値です。構成値はCDATA[]ラッピングをサポートします。

gg.handler.name.keyValuePairDelimiter

オプション

任意の文字列

,

マップにおけるキー/値ペアの間の区切り文字を指定します。たとえば、key=value,key1=value1,key2=value2key=value,key1=value1,key2=value2となります。トークンはマップされた値です。構成値はCDATA[]ラッピングをサポートします。

gg.handler.name.encoding

オプション

Javaでサポートされるエンコーディング名または別名[1]。サポートされるオプションのリストは、Oracle JavaドキュメントのWebサイトを参照してください

https://docs.oracle.com/javase/8/docs/technotes/guides/intl/encoding.doc.html

Oracle GoldenGateプロセスをホストしているマシンのネイティブのシステム・エンコーディング

HBaseに書き込まれる値のエンコーディングを決めます。HBase値はバイトとして書き込まれます。

gg.handler.name.pkUpdateHandling

オプション

abend | update | delete-insert

abend

HBaseハンドラが、主キーを変更する更新操作をどのように処理するかに関する構成を指定します。主キーを操作するとHBaseハンドラで問題が起きることがあるので、ユーザーは特に慎重を期する必要があります。

- abend - プロセスが異常終了することを示します

- update - プロセスでこれが通常の更新として扱われることを示します

- delete-insert - プロセスでこれが削除および挿入として扱われることを示します。この機能が正常に動作するためには、完全な操作前イメージが必要です。そのためには、Oracleデータベースで完全なサプリメンタル・ロギングを使用します。操作前と操作後の完全な行イメージがない場合、挿入データは不完全になります。

gg.handler.name.nullValueRepresentation

オプション

任意の文字列

NULL

列の値がNULLの場合にHBaseに送信される内容を構成できます。デフォルトはNULLです。構成値はCDATA[]ラッピングをサポートします。

gg.handler.name.authType

オプション

kerberos

いいえ

このプロパティをkerberosに設定すると、Kerberos認証が有効になります。

gg.handler.name.kerberosKeytabFile

オプション(authType=kerberosの場合は必須)

Kerberos keytabファイルの相対パスまたは絶対パス

-

keytabファイルを使用すると、HDFSハンドラがパスワードにアクセスし、Kerberosセキュリティに対してkinit操作を実行できます。

gg.handler.name.kerberosPrincipal

オプション(authType=kerberosの場合は必須)

user/FQDN@MY.REALMなどの有効なKerberosプリンシパル名。

-

Kerberos認証で用いるKerberosプリンシパル名。

gg.handler.name.hBase98Compatible

オプション

true | false

false

この構成プロパティをtrueに設定して、HBase 0.98.xおよび0.96.xリリースとの統合を有効にします。これを使用してCloudera CDH 5.7.x、5.6.x、5.5.xおよび5.4.xとの互換性の問題を解決できます。詳細は、「HBaseハンドラの動作保証マトリクス」を参照してください。

gg.handler.name.rowkeyDelimiter

オプション

任意の文字列

|

HBase Rowkeyが生成されるときに、ソース表からの主キー値の間に区切り文字が構成されます。このプロパティは値のCDATA[]ラッピングをサポートし、ユーザーが受信した主キー値を空白と判断される1つ以上の文字で区切る場合に空白を維持します。

3.4.4 サンプル構成

Javaアダプタ・プロパティ・ファイルからのHBaseハンドラの構成例を次に示します。

gg.handlerlist=hbase
gg.handler.hbase.type=hbase
gg.handler.hbase.mode=tx
gg.handler.hbase.hBaseColumnFamilyName=cf
gg.handler.hbase.includeTokens=true
gg.handler.hbase.keyValueDelimiter=CDATA[=]
gg.handler.hbase.keyValuePairDelimiter=CDATA[,]
gg.handler.hbase.encoding=UTF-8
gg.handler.hbase.pkUpdateHandling=abend
gg.handler.hbase.nullValueRepresentation=CDATA[NULL]
gg.handler.hbase.authType=none

HBase統合のレプリケーション構成とJavaアダプタ・プロパティ・ファイルの例は、次のディレクトリにあります。

GoldenGate_install_directory/AdapterExamples/big-data/hbase

3.4.5 HBaseハンドラのトラブルシューティング

HBaseハンドラのトラブルシューティングは、Java log4jファイルの内容から始まります。Javaロギング構成にある指示に従って、Java log4jログ・ファイルを正しく生成するようにランタイムを構成してください。

3.4.5.1 Javaクラスパス

Javaクラスパスは、非常によくある問題の1つです。クラスパスに問題があることは、Java log4jログ・ファイルの、ClassNotFoundExceptionでわかります。この問題のトラブルシューティングに、Java log4jログ・ファイルを使用できます。ログ・レベルをDEBUGに設定すると、ログ・ファイルに記録されるgg.classpathオブジェクトで参照されているjarそれぞれを記録できます。必要な依存性jarがすべて解決されることを確認できます。単にDEBUGレベルのロギングを有効にし、ログ・ファイルで次のようなメッセージを探すだけです。

2015-09-29 13:04:26 DEBUG ConfigClassPath:74 -  ...adding to classpath:
url="file:/ggwork/hbase/hbase-1.0.1.1/lib/hbase-server-1.0.1.1.jar"

3.4.5.2 HBase接続プロパティ

HDFS hbase-site.xmlファイル(デフォルト設定を含んでいる)の内容は、ロギング・レベルを DEBUGまたはTRACEに設定している場合に、Java log4jログ・ファイルに出力されます。これには、HBaseへの接続プロパティが示されます。Javaのlog4jログ・ファイルで次のものを検索します。

2015-09-29 13:04:27 DEBUG HBaseWriter:449 - Begin - HBase configuration object contents for connection troubleshooting.
Key: [hbase.auth.token.max.lifetime] Value: [604800000].

よくあるエラーは、hbase-site.xmlファイルがクラスパスに含まれていないか、hbase-site.xmlでパス指定にエラーがあるかのいずれかです。この場合、HBaseハンドラはHBaseへの接続を確立できず、Oracle GoldenGateプロセスは異常終了します。Java log4jファイルでは、次のエラーが報告されます。

2015-09-29 12:49:29 ERROR HBaseHandler:207 - Failed to initialize the HBase handler.
org.apache.hadoop.hbase.ZooKeeperConnectionException: Can't connect to ZooKeeper

クラスパスに正しくhbase-site.xmlファイルが含まれており、HBaseが稼働していることを確認してください。

3.4.5.3 ハンドラ構成のロギング

Javaのlog4jログ・ファイルには、HBaseハンドラの構成状態に関する情報が含まれています。この情報は、INFOログ・レベルで出力されます。サンプルの出力は、次のようになります。

2015-09-29 12:45:53 INFO HBaseHandler:194 - **** Begin HBase Handler - Configuration Summary ****
Mode of operation is set to tx.
HBase data will be encoded using the native system encoding.
In the event of a primary key update, the HBase Handler will ABEND.
HBase column data will use the column family name [cf].
The HBase Handler will not include tokens in the HBase data.
The HBase Handler has been configured to use [=] as the delimiter between keys and values.
The HBase Handler has been configured to use [,] as the delimiter between key values pairs.
The HBase Handler has been configured to output [NULL] for null values.
Hbase Handler Authentication type has been configured to use [none]

3.4.6 パフォーマンスに関する考慮事項

トランザクションをコミットするたびに、HBaseハンドラがフラッシュ・コールを実行し、バッファされていたデータをHBaseリージョン・サーバーにフラッシュします。書込み永続性を維持するために、これを実行する必要があります。HBaseリージョン・サーバーへのフラッシュは負荷の高いコールなので、Extractプロセスを使用する場合にJavaアダプタ・バッチ処理機能を導入する、あるいはネイティブのReplicat GROUPTRANSOPSバッチ処理機能を使用すると、パフォーマンスが大幅に向上することがあります。結果は、どちらの場合も似ています。Extractプロセスのバッチ処理機能は、Javaアダプタ・プロパティ・ファイルで制御されるJavaアダプタ・ベースのグループ化を使用します。Replicatベースのバッチ処理は、Replicat構成ファイルでGROUPTRANSOPSという構成構文を使用します。

複数のトランザクションからの操作は、大きいトランザクションにまとめられますが、これはトランザクション・コミットが実行されたグループ化されたトランザクションの最後だけです。

3.4.7 セキュリティ

HBase接続は、Kerberos認証を使用して保護できます。HBaseクラスタを保護するには、HBaseリリースの関連するドキュメントに従ってください。Oracle GoldenGate HBaseハンドラは、Kerberosで保護されたクラスタに接続できます。HBase hbase-site.xmlがハンドラのクラスパスにあり、"hbase.security.authentication"プロパティをkerberosに、"hbase.security.authorization"プロパティをtrueに設定する必要があります。

また、Oracle GoldenGate HBaseハンドラのJava構成ファイルで次のプロパティを設定する必要があります。

gg.handler.{name}.authType=kerberos
gg.handler.{name}.keberosPrincipalName={legal Kerberos principal name}
gg.handler.{name}.kerberosKeytabFile={path to a keytab file that contains the password for the Kerberos principal so that the Oracle GoldenGate HDFS handler can programmatically perform the Kerberos kinit operations to obtain a Kerberos ticket}.

3.5 メタデータ変更イベント

Oracle GoldenGate 12.2は、証跡にメタデータを含み、実行時にメタデータ変更イベントを処理できます。HBaseハンドラも、実行時にメタデータ変更イベントを処理できます。最も一般的なシナリオの1つは、新しい列の追加です。HBaseでの結果としては、メタデータ変更イベントの後に、新しい列とそれに関連するデータのストリーミングが始まります。

注意:

Oracle GoldenGate 12.2のメタデータ変更イベントは、Oracleデータベースによって証跡にのみ書き込まれます。

メタデータ変更イベントを有効にするには、レプリケーション・チェーン全体をOracle GoldenGate 12.2にアップグレードする必要があることに注意してください。12.2のHBaseハンドラは、Oracle GoldenGate 12.1以上で生成された証跡ファイルを処理できます。ただし、これらの証跡ファイルには証跡のメタデータが含まれていないため、メタデータ変更イベントを実行時には処理できません。

3.6 注意点

HBaseは、過去数回のリリースでクライアント・インタフェースが変更されています。HBase 1.0.0では、推奨されるクライアント・インタフェースが新たに導入され、12.2のHBaseハンドラは、最新の変更に対応するように、新しいインタフェースに移行しました。ただし、これで下位互換性の問題は発生しません。HBaseハンドラは、1.0.0より古いバージョンのHBaseとは互換性がありません。Oracle GoldenGateが、0.99.x以下のバージョンのHBaseとの統合を必要とする場合には、12.1.2.1.xのHBaseハンドラを使用する必要があります。12.1.2.1.xのHBaseハンドラのZIPファイルが必要な場合には、Oracleサポートに連絡してください。

HBaseハンドラの初期設定でよくあるエラーは、クラスパス指定の問題です。そのような問題を典型的に示しているのが、Java log4jログ・ファイルに出現するClassNotFoundExceptionです。HBaseクライアントjarは、Oracle GoldenGate for Big Data製品に付属しません。必要なHBaseクライアントjarを解決する必要があります。付録(ここに参照)には、サポートされている各バージョンのHBaseクライアントjarのリストがあります。hbase-site.xml、または1つ以上の必須のクライアントjarがクラスパスに含まれていません。HBaseハンドラのクラスパスの構成については、「クラスパス構成」の項を参照してください。

[1]
Javaの詳細は、https://docs.oracle.com/javase/8/docs/technotes/guides/intl/でJava国際化のサポートを参照してください。

4 Flumeハンドラの使用

この章の内容は次のとおりです。

- 概要

- 実行時の前提条件

- クラスパス構成

- プラガブル・フォーマッタ

- Flumeハンドラ構成

- サンプル構成

- トラブルシューティング

- 操作からFlumeイベントへのデータ・マッピング

- Flumeハンドラの動作保証マトリクス

- パフォーマンスに関する考慮事項

- メタデータ変更イベント

- Flumeソース構成の例

- 高度な機能

4.1 概要

Oracle GoldenGate for Big Data Flume Handlerは、Oracle GoldenGate証跡からFlumeソースに変更取得データをストリーミングするために設計されています。Apache Flumeは、ビッグ・データ・アプリケーションにデータをストリーミングすることを主な目的とするオープン・ソース・アプリケーションです。Flumeアーキテクチャには、ソース、チャネル、シンクという3つの主コンポーネントがあり、その全体がデータのパイプラインになります。Flumeソースは、データをFlumeチャネルに公開します。Flumeシンクは、Flumeチャネルからデータを取得し、そのデータを別のターゲットにストリーミングします。Flumeエージェントは、ソース、チャネル、シンクを所有し管理するコンテナ・プロセスです。単一のFlumeインストールに、複数のエージェント・プロセスをホストできます。Flumeハンドラは、証跡ファイルからAvroまたはThrift RPCのFlumeソースへデータをストリーミングできます。

4.2 実行時の前提条件

Flumeハンドラを実行するには、AvroまたはThrift Flumeソースとともに構成したFlumeエージェントが稼働している必要があります。Oracle GoldenGateは、Flumeと同じ場所に配置することも、別のマシンに配置することもできます。別のマシンに配置する場合は、ネットワーク接続を介してFlumeソースのホストとポートにアクセスできる必要があります。Flumeエージェント・プロセスの構成および起動方法については、次の場所にあるFlumeのユーザーズ・ガイドを参照してください。

https://flume.apache.org/releases/content/1.6.0/FlumeUserGuide.pdf

4.3 クラスパス構成

Flumeソースに接続して実行するには、Flumeハンドラのgg.classpathconfiguration変数で2つのものを構成する必要があります。1つ目はFlumeエージェントの構成ファイル、2つ目はFlumeクライアントjarです。Flumeハンドラは、Flumeエージェント構成ファイルの内容を使用して、Flumeソースに接続する際のホスト、ポートおよびソース・タイプを解決します。Flumeクライアント・ライブラリは、Oracle GoldenGate for Big Dataに付属しません。Flumeクライアント・ライブラリのバージョンは、Flumeハンドラが接続するFlumeのバージョンと一致する必要があります。必要なFlumeクライアントJARファイルのバージョン別リストは、「Flumeハンドラ・クライアント依存性」を参照してください。

Oracle GoldenGateのプロパティgg.classpathは、次のデフォルトの場所を含むように設定する必要があります。

- core-site.xmlファイルのデフォルトの場所は、Flume_Home/confです。

- Flumeクライアントjarのデフォルトの場所は、Flume_Home/lib/*です。

gg.classpathは、上の例に示したとおり正確に構成する必要があります。Flumeエージェント構成ファイルのパス指定に含めるパスには、ワイルドカードを使用しないでください。Flumeエージェント構成ファイルのパスに*wildcardを含めると、アクセスできなくなります。逆に、依存関係jarのパス指定には、そのディレクトリにあるjarファイルがすべて関連するクラスパスに含まれるように、ワイルドカード(*)を含める必要があります。*.jarは使用しないでください正しく構成したgg.classpath変数の例は、次のようになります。

gg.classpath=dirprm/:/var/lib/flume/lib/*

Oracle GoldenGate for Big Data Flume HandlerとFlumeを同じ場所に配置していない場合は、Oracle GoldenGate for Big Data Flume Handlerプロセスをホストしているマシンに、Flumeエージェント構成ファイルとFlumeクライアント・ライブラリをコピーする必要があります。

4.4 プラガブル・フォーマッタ

Oracle GoldenGate for Big Data Flume Handlerは、Oracle GoldenGate for Big Dataリリースに含まれるビッグ・データ・フォーマッタをすべてサポートしています。フォーマッタは、次のとおりです。

- Avro行

- Avro Operation

- JSON

- XML

- 区切りテキスト

4.5 Flumeハンドラ構成

12.2.0.1のFlumeハンドラの構成プロパティの概略を、次に示します。

プロパティ名

プロパティ値

必須

説明

gg.handlerlist

flumehandler (任意の名前を選択)

はい

ハンドラのリスト。グループ化プロパティがONのときは1つのみ許可されます。

gg.handler.flumehandler.type

flume

はい

使用するハンドラのタイプ。

gg.handler.flumehandler.format

フォーマッタ・クラスまたはショート・コード

いいえ。デフォルトはdelimitedtext

使用するフォーマッタ。次のいずれかを指定できます。

- avro_row

- avro_op

- delimitedtext

- xml

- json

あるいは、カスタム・フォーマッタを記述し、完全修飾クラス名をここに含めることもできます。

gg.handler.flumehandler.RpcClientPropertiesFile

任意のファイル名

いいえ。デフォルトはdefault-flume-rpc.properties

デフォルトのdefault-flume-rpc.properties、または指定したカスタムのRPCクライアント・プロパティ・ファイルがクラスパスに存在する必要があります。

gg.handler.flumehandler.mode

op|tx

いいえ。デフォルトはop

操作モードまたはトランザクション・モード。Javaアダプタのグループ化オプションは、txモードでのみ使用できます。

gg.handler.flumehandler.EventHeaderClass

カスタム実装の完全修飾クラス名

いいえ。デフォルトはDefaultFlumeEventHeader

flumeイベントにどんなヘッダー・プロパティを追加するかを決めるクラス。

gg.handler.flumehandler.EventMapsTo

op|tx

いいえ。デフォルトはop

各flumeイベントが操作かトランザクションかを定義する。handler mode = opの場合、EventMapsToは常にopです。

gg.handler.flumehandler.PropagateSchema

true|false

いいえ。デフォルトはfalse

trueに設定すると、Flumeハンドラはスキーマ・イベントを公開し始めます。

gg.handler.flumehandler.includeTokens

true|false

いいえ。デフォルトはfalse

trueに設定すると、ソース証跡ファイルからのトークン・データが出力に含まれます。falseに設定すると、ソース証跡ファイルからのトークン・データが出力から除外されます。

4.6 サンプル構成

gg.handlerlist = flumehandler
gg.handler.flumehandler.type = flume
gg.handler.flumehandler.RpcClientPropertiesFile=custom-flume-rpc.properties
gg.handler.flumehandler.format =avro_op
gg.handler.flumehandler.mode =tx
gg.handler.flumehandler.EventMapsTo=tx
gg.handler.flumehandler.PropagateSchema =true
gg.handler.flumehandler.includeTokens=false

Flume統合のレプリケーション構成とJavaアダプタ・プロパティ・ファイルの例は、次のディレクトリにあります。

GoldenGate_install_directory/AdapterExamples/big-data/flume

4.7 トラブルシューティング

4.7.1 Javaクラスパス

Javaクラスパスは、非常によくある問題の1つです。クラスパスに問題があることは、Oracle GoldenGate Java log4jログ・ファイルの、ClassNotFoundExceptionでわかります。この問題のトラブルシューティングに、Java log4jログ・ファイルを使用できます。ログ・レベルをDEBUGに設定すると、ログ・ファイルに記録されるgg.classpathオブジェクトで参照されているjarそれぞれを記録できます。これを利用して、必要な依存性jarがすべて解決されることを確認できます。

4.7.2 Flumeフロー制御の問題

特定の状況で、Flumeハンドラは、Flumeシンクがメッセージをディスパッチするより早くFlumeソースに書込みを行う場合があります。この場合、Flumeハンドラはしばらく動作しますが、いったんFlumeがメッセージを受け付けなくなると、異常終了します。Oracle GoldenGate Javaログ・ファイルはEventDeliveryExceptionとなる可能性があり、これはFlumeハンドラがイベントを送信できなかったことを示します。問題の正確な原因は、Flumeのログを確認してください。FlumeエージェントでOutOfMemoryExceptionが発生している場合には、Flumeチャネルを構成して、Javaヒープの容量を増やすか、構成を増やすことができます。ただし、これで問題が完全に解決しない場合もあります。Flumeシンクがメッセージをディスパッチするより早くFlumeハンドラがFlumeソースにデータをプッシュする場合は、いずれかを変更すれば、エラーになるまでOracle GoldenGateが稼働する期間が広がります。

4.7.3 Flumeエージェント構成ファイルが見つからない

Flumeエージェント構成ファイルがクラスパスにない場合は、Flumeハンドラが起動時に異常終了します。その結果、通常は、Flumeプロデューサのプロパティをロードする際のエラーとしてConfigExceptionに問題がリストされます。gg.handler.{name}をチェックします。 RpcClientProperites構成ファイルで、Flumeエージェント・プロパティ・ファイルの命名が正しいことを確認します。GoldenGateのgg.classpathプロパティをチェックして、Flumeエージェント・プロパティ・ファイルを含むディレクトリがクラスパスに存在することを確認します。また、クラスパスをチェックして、Flumeエージェント・プロパティ・ファイルのパスがワイルドカード(*)文字で終わっていないことも確認します。

4.7.4 Flume接続の例外

Flumeソースに接続できない場合、Flumeハンドラが起動時に異常終了します。この問題の根本原因は、Oracle GoldenGate Java log4jファイルでIOExeptionとしてレポートされ、特定のホストおよびポートでFlumeに接続できなかったことを示します。次の点を確認します。

- Flumeエージェント・プロセスが実行されていること。

- Oracle for Big DataのFlumeハンドラがアクセスするFlumeエージェント構成ファイルに、正しいホストとポートが指定されていること。

4.7.5 その他のエラー

Oracle GoldenGate Java log4jファイルの内容を確認します。

4.8 操作からFlumeイベントへのデータ・マッピング

この項では、Oracle GoldenGate証跡ファイルからの操作データが、異なる構成に基づいてFlumeハンドラによってどのようにFlumeイベントにマップされるかを説明します。Flumeイベントとは、Flumeエージェントを通過するデータの単位です。イベントはソースからチャネルへ、チャネルからシンクへと移動し、イベント・インタフェースの実装として表されます。イベントは、オプションでヘッダー(文字列属性)のセットを伴うペイロード(バイト配列)を搬送します。

4.8.1 操作モード

Oracle GoldenGate Java構成ファイルで、Flumeハンドラの構成は次のとおりです。

gg.handler.{name}.mode=op

Oracle GoldenGate証跡ファイルからの個々の操作のデータが、1つのFlumeイベントにマップされます。各イベントはすぐにFlumeにフラッシュされます。各Flumeイベントには、次のヘッダーがあります。

- TABLE_NAME: 操作の表名。

- SCHEMA_NAME: 操作のカタログ名(使用可能な場合)とスキーマ名。

- SCHEMA_HASH: Avroスキーマのハッシュ・コード。(Avro行フォーマッタとAvro操作フォーマッタにのみ該当します。)

4.8.2 トランザクション・モードとEventMapsTo操作

Oracle GoldenGate Java構成ファイルで、Flumeハンドラの構成は次のとおりです。

gg.handler.flume_handler_name.mode=tx
gg.handler.flume_handler_name.EventMapsTo=op

Oracle GoldenGate証跡ファイルからの個々の操作のデータが、1つのFlumeイベントにマップされます。イベントは、トランザクションのコミット時にFlumeにフラッシュされます。各Flumeイベントには、次のヘッダーがあります。

- TABLE_NAME: 操作の表名。

- SCHEMA_NAME: 操作のカタログ名(使用可能な場合)とスキーマ名。

- SCHEMA_HASH: Avroスキーマのハッシュ・コード。(Avro行フォーマッタとAvro操作フォーマッタにのみ該当します。)

データをAvroまたは区切りテキストとしてフォーマットする場合には、このモードを使用することをお薦めします。ExtractまたはReplicatのバッチ処理機能を構成すると、1回のトランザクションで処理される操作の数が増えることに注意してください。

4.8.3 トランザクション・モードとEventMapsToトランザクション

Oracle GoldenGate Java構成ファイルで、Flumeハンドラの構成は次のとおりです。

gg.handler.flume_handler_name.mode=tx
gg.handler.flume_handler_name.EventMapsTo=tx

ソース証跡ファイルからのトランザクションの操作すべてのデータが、連結されて1つのFlumeイベントにマップされます。イベントはトランザクションのコミット時にフラッシュされます。各Flumeイベントには、次のヘッダーがあります。

- GG_TRANID: トランザクションのトランザクションID

- OP_COUNT: このFlumeペイロード・イベントに含まれる操作の数

JSONやXMLなど自己記述型のフォーマットを使用する場合には、このモードを使用することをお薦めします。ExtractまたはReplicatのバッチ処理機能を構成すると、1回のトランザクションで処理される操作の数が増えることに注意してください。

4.9 Flumeハンドラの動作保証マトリクス

Oracle GoldenGate for Big DataのFlumeハンドラは、バージョン1.6.x、1.5.x、1.4.xのApache Flumeと連携して機能します。1.4.0より前のバージョンのFlumeについては、互換性は保証されません。

Flumeハンドラは、次のバージョンのHortonworks Data Platform (HDP)と互換性があります。

- HDP 2.4 (Flume 1.5.2)

- HDP 2.3 (Flume 1.5.2)

- HDP 2.2 (Flume 1.5.2)

- HDP 2.1 (Flume 1.4.0)

のFlumeハンドラは、次のバージョンのCloudera Distributions of Hadoop (CDH)と互換性があります。

- CDH 5.7.x (Flume 1.6.0)

- CDH 5.6.x (Flume 1.6.0)

- CDH 5.5.x (Flume 1.6.0)

- CDH 5.4.x (Flume 1.5.0)

- CDH 5.3.x (Flume 1.5.0)

- CDH 5.2.x (Flume 1.5.0)

- CDH 5.1.x (Flume 1.5.0)

4.10 パフォーマンスに関する考慮事項

- パフォーマンス向上のために、Replicatベースのグループ化を使用することをお薦めします。

- Extractベースのグループ化は、Javaアダプタでのグループ化を利用します。Javaアダプタを使用するメッセージ・サイズ・ベースのグループ化は、操作数ベースのグループ化より遅くなる場合があります。アダプタ・ベースのグループ化が本当に必要な場合、操作数に基づくグループ化をお薦めします。

- gg.handler.flume_handler_nameのトランザクション・モード。最高のパフォーマンスを得るためには、 EventMapsTo=tx設定が推奨されます。

- Flumeハンドラの最大ヒープ・サイズがパフォーマンスに影響する場合があります。ヒープが小さすぎると、JVMによるガベージ・コレクションが頻繁に発生することがあります。Oracle GoldenGate Javaプロパティ・ファイルで最大ヒープ・サイズを増やすと、パフォーマンスが向上する場合があります。

4.11 メタデータ変更イベント

Oracle GoldenGate for Big Data 12.2.0.1のFlumeハンドラは、ソースのDDLでの変更に適応します。ただし、この機能はソースで複製されるデータベースとアップストリームのOracle GoldenGate Captureプロセスを利用してDDLイベントを取得し、複製します。この機能は、Oracle GoldenGate 12.2のすべてのデータベース実装ですぐに利用できるわけではありません。DDLレプリケーションの詳細は、データベース実装に関するOracle GoldenGateドキュメントを参照してください。

メタデータの変更がソースで発生する場合、Flumeハンドラはそのメタデータ変更イベントを、対応するフォーマッタに通知します。フォーマッタがその表のために保持しているキャッシュ済のスキーマがある場合には、削除されます。対応するフォーマッタで、その表に対する操作が次に発生したとき、スキーマが再生成されます。

4.12 Flumeソース構成の例

4.12.1 Avro Flumeソース

Flumeエージェント構成ファイルからのAvro Flumeソースの構成例を次に示します。

client.type = default
hosts = h1
hosts.h1 = host_ip:host_port
batch-size = 100
connect-timeout = 20000
request-timeout = 20000

4.12.2 Thrift Flumeソース

Flumeエージェント構成ファイルからのAvro Flumeソースの構成例を次に示します。

client.type = thrift
hosts = h1
hosts.h1 = host_ip:host_port

4.13 高度な機能

4.13.1 スキーマの伝播

FlumeハンドラはFlumeにスキーマを伝播できます。これがサポートされているのは現在、Avroの行フォーマッタと操作フォーマッタのみです。この機能を有効にするには、次のプロパティを設定します。

gg.handler.flume_handler_name.propagateSchema=true

Avro行フォーマッタまたは操作フォーマッタは、ジャスト・イン・タイム・ベースでAvroスキーマを生成します。Avroスキーマは、表に対する操作が最初に発生したときに生成されます。メタデータ変更イベントがあると、クリアする表に対するスキーマ参照が発生するため、新しいスキーマは、その表で次に操作が発生したときに生成されます。

スキーマの伝播を有効にすると、FlumeハンドラはAvroイベントが発生したときにスキーマを伝播します。

Avroに対するデフォルトのFlumeスキーマ・イベント・ハンドラには、次の情報が含まれます。

- SCHEMA_EVENT: TRUE

- GENERIC_WRAPPER: TRUE/FALSE

- TABLE_NAME: 証跡に表れる表名

- SCHEMA_NAME: カタログ名(使用可能な場合)とスキーマ名

- SCHEMA_HASH: Avroスキーマのハッシュ・コード

4.13.2 セキュリティ

Oracle GoldenGate for Big Data FlumeハンドラからFlumeソースへの接続ではKerberos認証が機能しますが、この機能は、Thrift Flumeソースを使用するFlume 1.6.0 (およびそれ以上を想定)でしかサポートされません。この機能を有効にするには、Flumeエージェント構成ファイルでFlumeソースの構成を変更するしかありません。Flumeエージェント構成ファイルで、Kerberos認証を有効にするFlumeソース構成の例を次に示します。クライアントとサーバーのKerberosプリンシパル名を指定する必要があります。クライアント・プリンシパルのパスワードを実行時に解決できるように、Kerberosキータブ・ファイルのパスを指定する必要があります。Kerberosの認証方法、Kerberosプリンシパルおよび対応するパスワード、Kerberosキータブ・ファイルの作成については、Kerberosのドキュメントを参照してください。

client.type = thrift
hosts = h1
hosts.h1 =host_ip:host_port
kerberos=true
client-principal=flumeclient/client.example.org@EXAMPLE.ORG
client-keytab=/tmp/flumeclient.keytab
server-principal=flume/server.example.org@EXAMPLE.ORG

4.13.3 フェイルオーバー機能

Flumeハンドラは、プライマリのFlumeソースが使用できなくなった場合にフェイルオーバーするように構成できます。この機能は現在、Avro Flumeソースを使用するFlume 1.6.0 (およびそれ以上を想定)でのみサポートされています。この機能を有効にする方法は、Flumeエージェント構成ファイルでのFlumeソースの構成のみです。フェイルオーバー機能を有効にする構成例を次に示します。

client.type=default_failover
hosts=h1 h2 h3
hosts.h1=host_ip1:host_port1
hosts.h2=host_ip2:host_port2
hosts.h3=host_ip3:host_port3
max-attempts = 3
batch-size = 100
connect-timeout = 20000
request-timeout = 20000

4.13.4 ロード・バランシング機能

発生するFlumeイベントが、複数のFlumeソース間でロード・バランシングされるように、Oracle GoldenGate for Big DataのFlumeハンドラを構成することができます。この機能は現在、Avro Flumeソースを使用するFlume 1.6.0 (およびそれ以上を想定)でのみサポートされています。この機能を有効にする方法は、Flumeエージェント構成ファイルでのFlumeソースの構成のみです。ロード・バランシング機能を有効にする構成例を次に示します。

client.type = default_loadbalance
hosts = h1 h2 h3
hosts.h1 = host_ip1:host_port1
hosts.h2 = host_ip2:host_port2
hosts.h3 = host_ip3:host_port3
backoff = false
maxBackoff = 0
host-selector = round_robin
batch-size = 100
connect-timeout = 20000
request-timeout = 20000

5 Kafkaハンドラの使用

Oracle GoldenGate for Big Data Kafka Handlerは、Oracle GoldenGate証跡からKafkaトピックに変更取得データをストリーミングするために設計されています。またKafkaハンドラには、メッセージに対応するスキーマを別のスキーマ・トピックに公開するオプションの機能もあります。スキーマの公開が現在サポートされているのは、Avroスキーマだけです。AvroメッセージはAvroスキーマに直接依存しているためです。

Apache Kafkaは、オープン・ソースで、パーティション化および複製された分散型のメッセージング・サービスです。Kafkaとその関連ドキュメントは、www.kafka.apache.orgを参照してください。

Kafkaは、単一インスタンスとしても、複数サーバー上のクラスタとしても実行できます。Kafkaの各サーバー・インスタンスは、ブローカと呼ばれます。Kafkaにおけるトピックは、メッセージがプロデューサによって公開され、コンシューマによって取得されるときのカテゴリ、またはフィード名です。

Kafkaハンドラは、シリアライズされた変更取得データを複数の表から1つのトピックに書き込むKafkaプロデューサを実装します。

この章は次の項で構成されています:

- 設定と実行

- 詳細な機能

- スキーマの伝播

- トラブルシューティング

- パフォーマンスに関する考慮事項

- セキュリティ

- Kafkaハンドラの動作保証マトリクス

- メタデータ変更イベント

- Snappyに関する考慮事項

5.1 設定と実行

ここでは、Kafkaハンドラの各コンポーネントの設定とハンドラの実行について説明します。

5.1.1 実行時の前提条件

- KafkaおよびKafkaブローカ(単数または複数)の前提条件となるコンポーネントであるZooKeeperが稼働している必要があります。

- データ・トピックとスキーマ・トピック(該当する場合)は、実行中のKafkaブローカで事前に構成されていることを、ベスト・プラクティスとしてお薦めします。Kafkaトピックを動的に作成することはできますが、そのためにはKafkaブローカが動的トピックを許可するように構成されている必要があります。

- Kafkaブローカが、Oracle GoldenGate for Big Data Kafka Handlerプロセスと同じ場所に配置されていない場合は、Kafkaハンドラを実行しているマシンから、リモートのホスト:ポートにアクセスできる必要があります。

5.1.2 クラスパス構成

KafkaハンドラをKafkaに接続して実行するには、gg.classpath構成変数に2つのものを含める必要があります。必要なのは、Kafkaプロデューサ・プロパティ・ファイルと、Kafkaクライアントjarです。Kafkaクライアントjarは、Kafkaハンドラが接続するKafkaのバージョンと一致する必要があります。必要なクライアントJARファイルのバージョン別リストは、「Kafkaハンドラ・クライアント依存性」を参照してください。

Kafkaプロデューサ・プロパティ・ファイルの格納場所として推奨されるのは、Oracle GoldenGateのdirprmディレクトリです。

Kafkaクライアントjarのデフォルトの場所は、Kafka_Home/libs/*です。

gg.classpathは、指示に従って正確に構成する必要があります。Kafkaプロデューサ・プロパティ・ファイルのパス指定に含めるパスには、ワイルドカードを使用しないでください。Kafkaプロデューサ・プロパティ・ファイルのパスにワイルドカード(*)を含めると、選択されなくなります。逆に、依存関係jarのパス指定には、そのディレクトリにあるjarファイルがすべて関連するクラスパスに含まれるように、ワイルドカード(*)を含める必要があります。*.jarは使用しないでください。 正しく構成されたクラスパスの例を次に示します。

gg.classpath=dirprm:/ggwork/kafka/lib/*

5.1.3 プラガブル・フォーマッタ

Kafkaハンドラは、次のものを含めてすべてのビッグ・データ・フォーマッタをサポートします。

- Avro行

- Avro Operation

- JSON

- XML

- 区切りテキスト

5.1.4 Kafkaハンドラ構成

Kafkaハンドラの設定可能な値は次のとおりです。これらのプロパティは、Java Adapterプロパティ・ファイルにあり、Replicatプロパティ・ファイルにはありません。

表5-1 12.2.0.1 Kafkaハンドラの構成プロパティ

プロパティ名

プロパティ値

必須

説明

gg.handlerlist

kafkahandler (任意の名前を選択)

はい

使用するハンドラのリスト。

gg.handler.kafkahandler.Type

kafka

はい

使用するハンドラのタイプ。Kafka、Flume、HDFSなど。

gg.handler.kafkahandler.KafkaProducerConfigFile

任意のカスタム・ファイル名

いいえ。デフォルトはkafka-producer-default.properties

クラスパスにあるファイル名は、Apache Kafkaプロデューサを構成するApache Kafkaプロパティを保持します。

gg.handler.kafkahandler.TopicName

TopicName

はい

ペイロード・レコードが送信されるKafkaトピックの名前。

gg.handler.kafkahandler.Format

フォーマッタ・クラスまたはショート・コード

いいえ。デフォルトはdelimitedtext。

ペイロードのフォーマットに使用するフォーマッタ。xml、delimitedtext、json、avro_row、avro_opのいずれかです

gg.handler.kafkahandler.SchemaTopicName

スキーマ・トピックの名前

はい。スキーマ配信が必要な場合

スキーマ・データが配信されるトピック名。このプロパティを設定する場合、スキーマは伝播されません。スキーマが伝播されるのは、Avroフォーマッタの場合のみです。

gg.handler.kafkahandler.SchemaPrClassName

Oracle GoldenGate for Big Data Kafka HandlerのCreateProducerRecord Javaインタフェースを実装するカスタム・クラスの完全修飾クラス名

いいえ。デフォルトの実装クラスoracle.goldengate.handler.kafkaになります。デフォルトはProducerRecord

スキーマはProducerRecordとして伝播もされます。ここでのデフォルトのキーは、完全修飾の表名です。これをスキーマ・レコードから変更する必要がある場合は、CreateProducerRecordインタフェースのカスタム実装を作成する必要があり、このプロパティは新しいクラスの完全修飾名を示すように設定する必要があります。

gg.handler.kafkahandler.BlockingSend

true | false

いいえ。デフォルトはfalse

このプロパティをtrueに設定すると、Kafkaへの配信は完全に非同期のモデルで動作します。次のペイロードは、現在のペイロードが目的のトピックに出力され、確認が受信されてから送信されます。そのための、トランザクション・モードでは厳密に1回のセマンティックが提供されます。このプロパティをfalseに設定すると、Kafkaへの配信は非同期モデルで動作します。ペイロードは、確認を待たずに順次送信されます。Kafkaの内部キューでコンテンツをバッファすると、スループットを増やすことができます。チェックポイントは、Javaコールバックを使用してKafkaブローカから確認が受信されたときにのみ作成されます。

gg.handler.kafkahandler.ProducerRecordClass

Oracle GoldenGate for Big Data Kafka HandlerのCreateProducerRecord Javaインタフェースを実装するカスタム・クラスの完全修飾クラス名

いいえ。そのまま使用できるデフォルトの実装クラスoracle.goldengate.handler.kafka.DefaultProducerRecordになります

Kafkaでのデータの単位 - ProducerRecordには、キー・フィールドが保持され、その値がペイロードを表します。このキーは、変更取得データを保持するKafkaプロデューサ・レコードのパーティション化に使用されます。デフォルトでは、完全修飾の表名を使用してレコードをパーティション化します。このキーまたは動作を変更するには、CreateProducerRecord Kafkaハンドラ・インタフェースを実装する必要があり、このプロパティはカスタムProducerRecordクラスの完全修飾名を示すように設定する必要があります。

gg.handler.kafkahandler.Mode

tx/op

いいえ。デフォルトはtx

Kafkaハンドラが操作モードの場合、変更取得データレコード(Insert、Update、Deleteなど)の各ペイロードはKafkaプロデューサ・レコードとして表され、一度に1つずつフラッシュされます。Kafkaハンドラがトランザクション・モードの場合、ソース・トランザクション内の操作はすべて、1つのKafkaプロデューサ・レコードとして表されます。組み合されたこのバイト・ペイロードが、トランザクション・コミット・イベント時にフラッシュされます。

gg.handler.kafkahandler.topicPartitioning

none | table

いいえ

Kafkaに公開されるデータを表ごとにパーティション化するかどうかを決定します。

tableに設定すると、異なる表のデータは異なるKafkaトピックに書き込まれます。

noneに設定すると、異なる表のデータはtopicNameプロパティで構成した同じトピックにインタレースされます。

5.1.5 サンプル構成

プロパティ・ファイルについては、これ以降のセクションで説明します。

5.1.5.1 Javaアダプタ・プロパティ・ファイル

アダプタ・プロパティ・ファイルからのKafkaハンドラの構成例を次に示します。

gg.handlerlist = kafkahandler
gg.handler.kafkahandler.Type = kafka
gg.handler.kafkahandler.KafkaProducerConfigFile = custom_kafka_producer.properties
gg.handler.kafkahandler.TopicName = oggtopic
gg.handler.kafkahandler.Format = avro_op
gg.handler.kafkahandler.SchemaTopicName = oggSchemaTopic
gg.handler.kafkahandler.ProducerRecordClass = com.company.kafka.CustomProducerRecord
gg.handler.kafkahandler.SchemaPrClassName = com.company.kafkaProdRec.SchemaRecord
gg.handler.kafkahandler.Mode = tx
gg.handler.kafkahandler.BlockingSend = true

Kafka統合のレプリケーション構成とJavaアダプタ・プロパティ・ファイルの例は、次のディレクトリにあります。

GoldenGate_install_directory/AdapterExamples/big-data/kafka

5.1.6 Kafkaプロデューサ構成ファイル

Kafkaハンドラは、メッセージをKafkaに公開するために、Kafkaプロデューサ構成ファイルにアクセスする必要があります。Kafkaプロデューサ構成ファイルのファイル名は、Kafkaハンドラ・プロパティの次の構成によって制御されます。

gg.handler.kafkahandler.KafkaProducerConfigFile=custom_kafka_producer.properties

Kafkaハンドラは、Javaのクラスパスを使用してKafkaプロデューサ構成ファイルを検索およびロードしようとします。したがって、Javaのクラスパスに、Kafkaプロデューサ構成ファイルがあるディレクトリが含まれている必要があります。

Kafkaプロデューサ構成ファイルには、Kafka専有のプロパティがあります。0.8.2.0のKafkaプロデューサ・インタフェース・プロパティについては、Kafkaドキュメントに構成情報が記載されています。Kafkaハンドラは、これらのプロパティを使用してKafkaブローカのホストおよびポートを解決し、Kafkaプロデューサ・クライアントとKafkaブローカとの間のインタフェースの動作は、Kafkaプロデューサ構成ファイルにあるプロパティによって制御されます。

Kafkaプロデューサのサンプル構成ファイルは、次のようになります。

bootstrap.servers=localhost:9092
acks = 1
compression.type = gzip
reconnect.backoff.ms = 1000

value.serializer = org.apache.kafka.common.serialization.ByteArraySerializer
key.serializer = org.apache.kafka.common.serialization.ByteArraySerializer
# 100KB per partition
batch.size = 102400
linger.ms = 10000
max.request.size = 5024000
send.buffer.bytes = 5024000

5.2 詳細な機能

この項では、Kafkaハンドラの操作のモードの詳細について説明します。

5.2.1 トランザクション・モードと操作モード

Kafkaハンドラは、Kafka ProducerRecordクラスのインスタンスをKafkaプロデューサAPIに送信し、次にそれがProducerRecordをKafkaトピックに公開します。Kafka ProducerRecordは、実質的に1つのKafkaメッセージの実装です。ProducerRecordには、キーと値の2つのコンポーネントがあります。キーと値のどちらも、Kafkaハンドラによってバイト配列として表されます。この項では、Kafkaハンドラがデータを公開する方法について説明します。

トランザクション・モード

トランザクション・モードは、Kafkaハンドラの次の構成によって示されます。

gg.handler.name.Mode=tx

トランザクション・モードでは、ソースOracle GoldenGate証跡ファイルからのトランザクションにおける各操作のシリアライズ・データが連結されます。連結された操作データの内容は、KafkaのProducerRecordオブジェクトの値です。Kafka ProducerRecordオブジェクトのキーはNULLです。結果として、Kafkaメッセージはには1からNまでの操作のデータが含まれます。Nは、トランザクションにおける操作の数です。グループ化されたトランザクションの場合、グループ化されたトランザクションの全操作の全データが1つのKafkaメッセージとして連結されます。そのため、Kafkaメッセージは大量の操作のデータを含んで非常に大きいメッセージになる可能性がある。

操作モード

操作モードは、Kafkaハンドラの次の構成によって示されます。

gg.handler.name.Mode=op

操作モードでは、各操作のシリアライズ・データは個々のProducerRecordオブジェクトに値として配置されます。ProducerRecordキーは、ソース操作の完全修飾表名です。ProducerRecordは、KafkaプロデューサAPIを使用してすぐに送信されます。つまり、着信する操作と、生成されるKafkaメッセージの数との間には1対1の関係があります。

5.2.2 ブロックとブロック・モード

Kafkaハンドラは、ブロック・モード(同期)または非ブロック・モード(非同期)で、Kafkaにメッセージを送信できます。

ブロック・モード

ブロック・モードは、Kafkaハンドラの次の構成によって設定されます。

gg.handler.name.BlockingSend=true

このモードでは、メッセージは同期ベースでKafkaに配信されます。Kafkaハンドラは、現在のメッセージが目的のトピックに書き込まれて確認が受信されるまで、次のメッセージを送信しません。ブロック・モードでは、メッセージ配信が最も確実に保証されますが、負荷が高いためパフォーマンスは下がります。

ブロック・モードでは、Kafkaプロデューサにlinger.ms変数は設定しないでください。そうすると、KafkaプロデューサはKafkaブローカにメッセージを送信する前にタイムアウト期間ずっと待機します。この場合、Kafkaブローカに送信されるメッセージをKafkaプロデューサがバッファすると同時に、メッセージが送信されたという確認を、Kafkaハンドラは待機しています。したがって、これらの設定は矛盾します。

非ブロック・モード

非ブロック・モードは、Kafkaハンドラの次の構成によって設定されます。

gg.handler.name.BlockingSend=false

このモードでは、メッセージは非同期ベースでKafkaに配信されます。Kafkaメッセージは、確認を待たずに順次送信されます。Kafkaプロデューサ・クライアントは、スループットを高めるために着信メッセージをバッファできます。

トランザクションがコミットされるたびに、Kafkaプロデューサに対するブロック・コールを呼び出し、内部でバッファしている可能性があるKafkaプロデューサ・クライアントの操作をすべてフラッシュします。そのため、Kafkaハンドラは安全なチェックポイントでデータの損失をゼロにします。トランザクション・コミットを呼び出すたびに、最悪の場合でも最大でlinger.msの間ブロックが実行されます。ミリ秒間隔の単位で、linger.msの時間は短く設定することをお薦めします。

KafkaプロデューサがデータをKafkaブローカにフラッシュするタイミングは、Kafkaプロデューサ構成ファイルにある変更可能な多数の構成プロパティによって制御できます。Kafkaプロデューサによるメッセージの一括送信を有効にするには、Kafkaプロデューサ構成ファイルでbatch.sizeとlinger.msの両方のKafkaプロデューサ・プロパティを設定する必要があります。Kafkaへの送信前にバッファする最大バイト数はbatch.sizeによって制御され、データ送信前に待機する最大時間(ミリ秒)はlinger.ms変数によって制御されます。batch.sizeに達するか、linger.msの時間が経過するか、どちらか早いほうの条件が満たされると、データはKafkaに送信されます。batch.size変数のみを設定すると、メッセージはただちにKafkaに送信されます。

5.2.3 複数トピックへの公開

Kafkaハンドラではソース証跡ファイルからの操作データを、操作データの対応する表名に基づいて個々のトピックに公開できます。この機能を使用して、ソース証跡ファイルからの操作データをソース表名別に分類できます。この機能は、Java Adapterプロパティ・ファイルで次のように構成を設定して有効にします。

gg.handler.kafka.topicPartitioning=table
gg.handler.kafka.mode=op

モードはopに設定する必要があります。また使用するKafkaトピックはソース操作の完全修飾の表名です。

Kafkaハンドラを使用して複数のトピックに公開できます。たとえば、gg.handler.kafkahandler.topicPartitioningプロパティをtableに設定してテーブルごとに1つのトピックを公開できます。

トピックは自動的に作成されて、完全修飾の表名と同じトピック名が使用されます。

Kafkaブローカ設定

トピックの自動作成を有効にするには、Kafkaブローカ構成でauto.create.topics.enableプロパティをtrueに設定します。このプロパティのデフォルト値はtrueです。

Kafkaブローカ構成でauto.create.topics.enableプロパティがfalseに設定されている場合、Replicatプロセスを開始する前に必要なすべてのトピックを手動で作成する必要があります。

スキーマの伝播

すべての表のスキーマ・データが、schemaTopicNameプロパティで構成されたスキーマ・トピックに提供されます。詳細は、「スキーマの伝播」を参照してください。

注意: 複数のトピックがopモードでのみサポートされます。たとえば、gg.handler.kafkahandler.topicPartitioningがtableに設定されている場合は、gg.handler.kafkahandler.modeをopに設定する必要があります。

5.3 スキーマの伝播

Kafkaハンドラには、スキーマをスキーマ・トピックに公開する機能があります。現在、スキーマ公開が有効なのは、Avro行フォーマッタとAvro操作フォーマッタのみです。KafkaハンドラのschemaTopicNameプロパティが設定されている場合、スキーマは次のイベントで公開されます。

- 特定の表のAvroスキーマは、その表に対する最初の操作が発生するときに公開されます。

- Kafkaハンドラがメタデータ変更イベントを受信すると、スキーマはフラッシュされます。特定の表について生成されるAvroスキーマは、その表に対する次の操作が発生するときに公開されます。

- Avroのラッピング機能を有効にしている場合、汎用のラッパーAvroスキーマは、任意の操作が最初に発生するときに公開されます。汎用のラッパーAvroスキーマの機能は、Avroフォーマッタの構成で有効にできます。正確な手順については、このドキュメントの「Avro行フォーマッタ」または「Avro操作フォーマッタ」の項を参照してください。

KafkaのProducerRecord値はスキーマになり、キーは完全修飾の表名になります。

Kafka上でAvroを使用すると、Avroスキーマに対するAvroメッセージの直接依存性が原因で問題が発生する可能性があります。Avroメッセージはバイナリなので、人間が読める形式ではありません。Avroメッセージをデシリアライズするには、まず受信者に正しいAvroスキーマが必要です。ソース・データベースからの各表が個々のAvroスキーマになるため、問題になる可能性があります。Oracle GoldenGate証跡ファイルに複数の表からの操作が含まれる場合、Kafkaメッセージの受信者が、個々のメッセージをデシリアライズするためにどのAvroスキーマを使用するかを判断することはできません。この問題を解決するために、特殊なAvroメッセージを汎用のAvroメッセージ・ラッパーでラップする機能が用意されています。この汎用のAvroラッパーを使用すれば、完全修飾の表名、スキーマ文字列のハッシュコード、ラップされたAvroメッセージを確認することができます。受信者は、完全修飾の表名と、スキーマ文字列のハッシュコードを使用して、ラップされたメッセージに関連付けられたスキーマを解決し、そのスキーマを使用して、ラップされたメッセージをデシリアライズできます。

5.4 トラブルシューティング

この項では、トラブルシューティングのオプションについて説明します。

5.4.1 Kafka設定の検証

コマンドラインのKafkaプロデューサを使用すると、ダミー・データをKafkaトピックに書き込むことができ、Kafkaコンシューマを使用してこのデータをKafkaトピックから読み取ることができます。これを利用して、Kafkaトピックの設定および読取り/書込み権限を検証することができます。詳細は、次のサイトでオンラインのKafkaドキュメントを参照してください

http://kafka.apache.org/documentation.html#quickstart

5.4.2 クラスパスの問題

非常に一般的なのが、Javaクラスパスに関する問題です。この問題は、log4jログ・ファイルでClassNotFoundExceptionとして表れるのが一般的ですが、gg.classpath変数に誤字がある場合には、クラスパスの解決エラーになることもあります。Kafkaクライアント・ライブラリは、Oracle GoldenGate for Big Data製品に付属しません。JavaとKafkaクライアント・ライブラリを適切に解決するために、適切なバージョンのKafkaクライアント・ライブラリを取得し、Javaアダプタ・プロパティ・ファイルでgg.classpathプロパティを適切に構成する作業は、ユーザーが行います。

5.4.3 Kafkaのバージョンが無効

Oracle GoldenGate for Big Data Kafka Handlerは、Kafka 0.8.2で新しく導入された推奨のKafkaプロデューサAPIを使用します。0.8.2より古いバージョンのKafkaに接続しようとすると、ランタイム・エラーになります。この問題の回避策はありません。顧客はKafka 0.8.2またはそれ以上に統合する必要があります。

5.4.4 Kafkaプロデューサ・プロパティ・ファイルが見つからない

この問題は一般的に、次の例外として発生します。

ERROR 2015-11-11 11:49:08,482 [main] Error loading the kafka producer properties

gg.handler.kafkahandler.KafkaProducerConfigFile構成変数で、Kafkaプロデューサ構成ファイルの名前が正しく設定されていることを検証する必要があります。gg.classpath変数もチェックし、クラスパスにKafkaプロデューサ・プロパティ・ファイルのパスが含まれていることと、プロパティ・ファイルのパスの末尾にワイルドカード(*)が含まれていないことを確認してください。

5.4.5 Kafkaの接続の問題

この問題は、KafkaハンドラがKafkaに接続できない場合に発生します。この問題は、次の警告として発生します。

WARN 2015-11-11 11:25:50,784 [kafka-producer-network-thread | producer-1] WARN  (Selector.java:276) - Error in I/O with localhost/127.0.0.1
java.net.ConnectException: Connection refused

最終的には、接続の再試行時間が経過し、Kafkaハンドラは異常終了します。Kafkaブローカが稼働しており、Kafkaプロデューサ・プロパティ・ファイルで指定されているホストとポートが正しいことを確認してください。Kafkaブローカをホストしているマシンでネットワーク・シェル・コマンド(netstat -lなど)を使用すると、Kafkaが所定のポートでリスニングしていることを検証できます。

5.5 パフォーマンスに関する考慮事項

gg.handler.{name}.BlockingSend=trueの場合、Kafka構成ファイルでlinger.ms設定は使用しないことをお薦めします。使用すると、ブロックへの送信のたびに、少なくともlinger.msの時間が発生するため、パフォーマンスに大きく影響するためです。問題は、Kafkaハンドラ構成とKafkaプロデューサ・構成が競合していることです。このような構成の結果、Kafkaハンドラが送信確認を待つ一方で、Kafkaプロデューサは送信前に次のメッセージを待機することになり、一時的なデッドロックが発生します。このデッドロックは、linger.msの時間が過ぎると解決されます。こうしたシナリオが、送信されるメッセージのたびに繰り返されます。

最高のパフォーマンスを得るためには、Kafkaプロデューサを非ブロック(非同期)コールを使用し、トランザクション・モードで動作するようにKafkaハンドラを設定することをお薦めします。これには、Javaアダプタ・ファイルで次のように設定してください。

gg.handler.{name}.Mode = tx
gg.handler.{name}.BlockingSend = false

また、Kafkaプロデューサ・プロパティ・ファイルでbatch.sizeとlinger.msの値も設定することを推奨します。batch.sizeとlinger.msに設定する値は、ユースケース別の状況によって大きく異なります。一般的には、値が大きいほどスループットは向上しますが、レイテンシが大きくなります。これらのパラメータの値を小さくすると、レイテンシは小さくなりますが、全体的なスループットは低下します。ユースケースによって、ソース証跡データから大量の入力データを伴う場合、batch.sizeとlinger.msは許容できる範囲で大きく設定するようにしてください。

Replicat変数をGROUPTRANSOPSを使用しても、パフォーマンスは向上します。その推奨設定は10000です。

ソース証跡ファイルからシリアライズした操作を個々のKafkaメッセージで配信するのはお客様が行いますが、そのときKafkaハンドラは操作モードに設定されている必要があります。

gg.handler.{name}.Mode = op

そのため、Kafkaメッセージの数が増え、パフォーマンスに悪影響が生じます。

5.6 セキュリティ

Kafka 0.8.2.2以前では、セキュリティをサポートしていません。Kafka 0.9.0.0にSSL/TLSまたはKerberosを介したセキュリティが導入されました。Oracle GoldenGate KafkaハンドラはSSL/TLSまたはKerberos使用して保護できます。Kafkaプロデューサ・クライアント・ライブラリは、それらのライブラリを利用する統合からのセキュリティ機能の抽象化を提供します。Oracle GoldenGate Kafkaハンドラは、セキュリティ機能から効率的に抽象化されます。セキュリティを有効にするには、Kafkaクラスタのセキュリティを設定し、マシンを接続して、Kafkaプロデューサ・プロパティ・ファイル(Oracle GoldenGate Kafkaハンドラで処理のために使用する)を必要なセキュリティ・プロパティを使用して構成する必要があります。Kafkaクラスタの保護に関する詳細は、次の場所にあるKafkaドキュメントを参照してください。

http://kafka.apache.org/documentation.html#security_configclients

5.7 Kafkaハンドラの動作保証マトリクス

Oracle GoldenGate for Big Data Kafka Handlerは、Kafka 0.8.2.0で新しく導入された推奨のKafkaプロデューサ・インタフェースを実装します。Kafkaハンドラは、0.8.1.0以下のバージョンのKafkaとは互換性がありません。

Kafkaハンドラは次のバージョンのApache Kafkaと互換します。

- 0.9.0.x

- 0.8.2.x

Kafkaハンドラは、HDP 2.3 (Kafka 0.8.2.0)バージョンのHortonworks Data Platform (HDP)とも連携します。

- HDP 2.4 (Kafka 0.9.0)

- HDP 2.3 (Kafka 0.8.2.0)

Cloudera (CDH)には現在Kafkaは含まれていません。Clouderaは現在KafkaをApache KafkaのCloudera Distributionとして別途配布しています。Kafkaハンドラは次のバージョンのCDHディストリビューションと互換します。

- Cloudera Distribution of Apache Kafka 2.0.x (Kafka 0.9.0.0)

- Cloudera Distribution of Apache Kafka 1.x (Kafka 0.8.2.0)

5.8 メタデータ変更イベント

メタデータ変更イベントが、Kafkaハンドラによって処理されるようになりました。ただし、これが関係するのは、スキーマ・トピックを構成しており、使用するフォーマッタがスキーマ伝播をサポートしている場合のみです(現在は、Avro行フォーマッタとAvro操作フォーマッタ)。スキーマが変更されている表で次に操作が発生するとき、更新されたスキーマがスキーマ・トピックに公開されます。

メタデータ変更イベントをサポートするには、ソース・データベースで変更を取得するOracle GoldenGateプロセスが、DDL変更と証跡でのメタデータの両方をサポートする必要があります。GoldenGateでは、すべてのデータベース実装でDDLレプリケーションがサポートされているわけではありません。DDLレプリケーションがサポートされているかどうかを確認するには、データベース実装ごとのOracle GoldenGateドキュメントを参照することをお薦めします。

5.9 Snappyに関する考慮事項

Kafkaプロデューサ構成ファイルは、圧縮の使用をサポートしています。構成オプションの1つがSnappyです。Snappyは、オープン・ソースの圧縮および圧縮解除(コーデック)ライブラリで、他のコーデック・ライブラリよりパフォーマンスが高い傾向があります。ただしSnappyには、Snappy jarがすべてのプラットフォームには対応していないという欠点があります。Snappyは、Linuxシステムではユニバーサルに動作するようですが、他のUNIXおよびWindowsの実装では動作が保証されていません。Snappyの圧縮を使用する場合は、Snappyを使用する圧縮を実装する前に、必要なシステムすべてでSnappyをテストするといいでしょう。必要なシステムの一部にSnappyが対応しない場合は、別のコーデック・ライブラリを使用することをお薦めします。

6 プラガブル・フォーマッタの使用

フォーマッタは、Oracle GoldenGate証跡ファイルの操作をフォーマット済のメッセージに変換する機能を提供します。変換されたメッセージは、Oracle GoldenGate for Big Dataのいずれかのハンドラによってビッグ・データ・ターゲットに送信できます。Oracle GoldenGate for Big Dataのリリースには、次の5種類のプラガブル・フォーマッタがあります。

- 区切りテキスト

- JSON

- XML

- Avro行

- Avro Operation

この章は次の項で構成されています:

- 操作ベースと行ベースのフォーマット

- 区切りテキスト・フォーマッタ

- JSONフォーマッタ

- Avro行フォーマッタ

- Avro操作フォーマッタ

- XMLフォーマッタ

6.1 操作ベースと行ベースのフォーマット

Oracle GoldenGate for Big Dataのフォーマッタには、操作ベースと行ベースの2つのカテゴリがあります。操作とは、ソース・データベースの表データに対して発生する個々の挿入、更新および削除イベントです。新しい行はソース・データベースに追加されているところなので、挿入操作で処理されるのは操作後のデータ(またはイメージ)のみです。更新操作は操作前と操作後のデータが対象で、既存の行データが変更されることを表します。削除操作は操作前のデータのみが対象で、削除されている行の識別を示します。操作ベースのフォーマッタは、ソース証跡ファイルに存在する操作をモデル化します。操作ベースのフォーマッタには、操作前後のイメージのフィールドが含まれます。行ベースのフォーマッタは、操作データを適用した後に存在する行データをモデル化します。行ベースのフォーマッタに含まれるデータのイメージは1つだけです。操作ベースと行ベースのフォーマッタで表示されるデータの種類を次に示します。

6.1.1 操作フォーマッタ

操作ベースのフォーマットをサポートするフォーマッタは、JSON、Avro操作、およびXMLです。操作ベース・フォーマッタの出力は、次のとおりです。

- 挿入操作 - 操作前のイメージ・データはNULL。操作後のイメージ・データが出力されます。

- 更新操作 - 操作前と操作後の両方のイメージ・データが出力されます。

- 削除操作 - 操作前のイメージ・データが出力されます。操作後のイメージ・データはNULLです。

- 切捨て操作 - 操作前と操作後の両方のイメージ・データがNULLです。

6.1.2 行フォーマッタ

行ベースのフォーマットをサポートするフォーマッタは、区切りテキストとAvro行です。行ベースのフォーマッタは、次の操作について次の情報を出力します。

- 挿入操作 - 操作後のイメージ・データのみ。

- 更新操作 - 操作後のイメージ・データのみ。主キーの更新は特別なケースであり、各フォーマッタの項で説明します。

- 削除操作 - 操作前のイメージ・データのみ。

- 切捨て操作 - 表名は示されますが、操作前と操作後のイメージ・データはどちらもNULLです。表の切捨てはDDL操作で、異なるデータベース実装はサポートしない場合があります。データベース実装については、Oracle GoldenGateのドキュメントを参照してください。

- 表の行または列の値の状態

- RDBMSでは、特定の行と列の表データは2つの状態のうちいずれかをとります。表の行/列に値があるか、値がNULLかのいずれかです。ところが、Oracle GoldenGateの取得プロセスによってデータがOracle GoldenGate証跡ファイルに転送される場合、可能な状態は3つに増えます。表の行/列に値があるか、行/列の値がNULL、または行/列の値がないかです。

- 挿入操作の場合、操作後のイメージには、その列に値があるかNULLかにかかわらず、すべての列の値のデータが含まれると考えるのが妥当です。一方、更新操作と削除操作に含まれるデータは、すべての列に完全なデータが含まれるとはかぎりません。更新操作のためにRDBMSにデータを複製する場合、ターゲット・データベースで変更する必要があるデータは、主キー値と、変更される列の値のみです。また、削除操作の場合、主キー値でターゲット・データベースから行を削除させる必要があるだけです。したがって、表の行/列がソース・データベースで値を持っている場合でも、その値はソース証跡ファイルには存在しないことになります。ソース証跡ファイルの行/列データには3つの状態があるので、ビッグ・データ・フォーマッタも3つの状態でデータを表せる必要があるということです。

- Oracle GoldenGate証跡ファイルでどんな行/列データを使用できるかが、ビッグ・データ統合に影響します。どんなデータが必要かを理解することが重要です。一般的には、Oracle GoldenGate証跡ファイルで操作に含まれるデータを制御できます。Oracleデータベースの場合、これは補足的なロギング・レベルによって制御されます。Oracle GoldenGate証跡ファイルに含まれる行/列の値を制御する方法については、個々のソース・データベース実装に関するOracle GoldenGateのドキュメントを参照してください。

6.2 区切りテキスト・フォーマッタ

区切りテキスト・フォーマッタは、行ベースのフォーマッタの一種です。ソース証跡ファイルから、データベース操作の内容を、区切りテキスト出力としてフォーマットします。ソース証跡ファイルからの挿入、更新、削除または切捨ての各操作は、区切られた個々のメッセージとしてフォーマットされます。区切りテキスト出力は、各表に対して固定数のフィールドがあり、フィールド区切り文字によって区切られ、最後が行区切り文字になります。フィールドは、位置が関係します。Hiveを含め、ビッグ・データ分析ツールの多くは、区切りテキストを含むHDFSファイルと適切に機能します。

ソース証跡ファイルからの操作の列値は、列に値がある、列値がNULLも、列値がないの3つの状態のいずれかです。デフォルトでは、区切りテキストはこれらの列値状態を区切りテキスト出力に次のようにマップします。

- 列値がある - 列値が出力されます。

- 列値がNULL - デフォルトの出力値はNULLです。列値がNULLの場合の出力は、設定を変更できます。

- 列値がない - デフォルトの出力値は""です。列値がない場合の出力は、設定を変更できます。

6.2.1 メッセージのフォーマットの詳細

データの出力のデフォルト形式は、次のとおりです。

最初は行のメタデータです。

<OPERATION TYPE><FIELD DELIMITER><FULLY QUALIFIED TABLE NAME><FIELD DELIMITER><OPERATION TIMESTAMP><FIELD DELIMITER><CURRENT TIMESTAMP><FIELD DELIMITER><TRAIL POSITION><FIELD DELIMITER><TOKENS><FIELD DELIMITER>

次が行データです。

<COLUMN 1 VALUE><FIELD DELIMITER><COLUMN N VALUE><LINE DELIMITER>

オプションで、列名を各列値の前に含めることができ、行データの出力形式が変更されます。

<COLUMN 1 NAME><FIELD DELIMITER><COLUMN 1 VALUE><COLUMN N NAME><FIELD DELIMITER><COLUMN N VALUE><LINE DELIMITER>

操作タイプ - 操作タイプは、証跡ファイルからのデータベース操作のタイプを示します。デフォルト値は挿入を表すI、更新を表すU、削除を表すD、切捨てを表すTです。このフィールドの出力は、抑止できます。

完全修飾の表名 - 完全修飾の表名はソース・データベース表で、カタログ名とスキーマ名も含みます。完全修飾の表名の形式は、CATALOG NAME.SCHEMA NAME.TABLE NAMEです。このフィールドの出力は、抑止できます。

操作のタイムスタンプ - 操作のタイムスタンプは、ソース・システムからのコミット・レコードのタイムスタンプです。したがって、トランザクション(バッチ処理以外のトランザクション)のすべての操作は、同じ操作タイムスタンプを持つ必要があります。このタイムスタンプは固定で、証跡ファイルを再生する場合、操作のタイムスタンプは同じです。このフィールドの出力は、抑止できます。

現在のタイムスタンプ - 現在のタイムスタンプは、区切りテキスト・フォーマッタが現在の操作レコードを処理した現在時刻のタイムスタンプです。このタイムスタンプはISO-8601形式に従い、精度はミリ秒までです。証跡ファイルを再生しても、同じ操作に対して同じタイムスタンプにはなりません。このフィールドの出力は、抑止できます。

証跡のポジション - これは連結された連番で、ソース証跡ファイルからのRBA番号です。証跡のポジションは、操作からソース証跡ファイルをたどるトレーサビリティ情報になります。この連番は、ソース証跡ファイルの番号です。RBA番号は、証跡ファイルのオフセットです。このフィールドの出力は、抑止できます。

トークン - トークンは、ソース証跡ファイルからのトークン・キー値ペアです。対応するハンドラのincludeTokens構成プロパティが明示的にtrueに設定されていない場合、区切りテキスト出力のこのフィールドの出力は表示されません。

6.2.2 フォーマットしたメッセージの例

次の各項では、区切りテキスト・フォーマッタのサンプル・メッセージを示します。メッセージを明確に表示するために、デフォルトのフィールド区切り文字がパイプ("|")に変更されています。

6.2.2.1 挿入メッセージの例

I|GG.TCUSTORD|2013-06-02
22:14:36.000000|2015-09-18T13:23:01.612001|00000000000000001444|R=AADPkvAAEAAEqL2A
AA|WILL|1994-09-30:15:33:00|CAR|144|17520.00|3|100

6.2.2.2 更新メッセージの例

U|GG.TCUSTORD|2013-06-02
22:14:41.000000|2015-09-18T13:23:01.987000|00000000000000002891|R=AADPkvAAEAAEqLzA
AA|BILL|1995-12-31:15:00:00|CAR|765|14000.00|3|100

6.2.2.3 削除メッセージの例

D|GG.TCUSTORD|2013-06-02
22:14:41.000000|2015-09-18T13:23:02.000000|00000000000000004338|L=206080450,6=9.0.
80330,R=AADPkvAAEAAEqLzAAC|DAVE|1993-11-03:07:51:35|PLANE|600|||

6.2.2.4 切捨てメッセージの例

T|GG.TCUSTORD|2013-06-02
22:14:41.000000|2015-09-18T13:23:02.001000|00000000000000004515|R=AADPkvAAEAAEqL2A
AB|||||||

6.2.3 注意点

フィールドと行区切り文字を選択するときは、十分に注意してください。データの内容に出現しない区切り文字を選択することが重要です。

空白と見なされる先行文字と後続文字は、Javaアダプタ構成機能によって削除されます。空白と見なされる先行文字と後続文字が構成値に含まれる場合にその空白を維持するには、CDATA[]ラッパーで構成値をラップしてください。たとえば、\nという構成値はCDATA[\n]として構成します。

正規表現を使用して列値を検索してから、一致項目を指定した値に置き換えることができます。この検索および置換機能を区切りテキスト・フォーマッタとあわせて利用し、列値の内容とフィールドおよび行区切り文字間に不一致がないことを確認できます。詳細は、「正規表現を使用した検索と置換」を参照してください。

6.2.4 出力形式サマリーのロギング

INFOレベルのロギングが有効になっている場合、Java log4jのロギングでは、区切りテキスト出力形式のサマリーが記録されます。区切りフィールドのサマリーは、確認されたソース表ごとに記録され、その表に対する最初の操作が区切りテキスト・フォーマッタによって受け取られたときに発生します。区切りテキスト出力のフィールドに関するこうした詳細な説明は、初期設定を実行するときに便利かもしれません。メタデータ変更イベントの場合、区切りフィールドのサマリーは、メタデータ変更イベント後のその表に対する最初の操作時に再生成され、再度ログに記録されます。

6.2.5 区切りテキスト形式の構成

表6-1 構成オプション

パラメータ

オプション/必須

有効な値

デフォルト

説明

gg.handler.name.format.includeColumnNames

オプション

true | false

false

列値に先行する区切りフィールドとして列名を書き込む出力を制御します。trueの場合、出力は次のようになります。

COL1_Name|COL1_Value|Col2_Name|Col2_Value

falseの場合、出力は次のようになります。

COL1_Value|Col2_Value

gg.handler.name.format.includeOpTimestamp

オプション

true | false

true

値がfalseの場合、出力におけるソース証跡ファイルからの操作のタイムスタンプの出力を抑止します。

gg.handler.name.format.includeCurrentTimestamp

オプション

true | false

true

値がfalseの場合、出力における現在のタイムスタンプの出力を抑止します。

gg.handler.name.format.includeOpType

オプション

true | false

true

値がfalseの場合、出力における操作タイプの出力を抑止します。

gg.handler.name.format.insertOpKey

オプション

任意の文字列

I

出力レコードに挿入され、挿入操作を示す指標です。

gg.handler.name.format.updateOpKey

オプション

任意の文字列

U

出力レコードに挿入され、更新操作を示す指標です。

gg.handler.name.format.deleteOpKey

オプション

任意の文字列

D

出力レコードに挿入され、削除操作を示す指標です。

gg.handler.name.format.truncateOpKey

オプション

任意の文字列

T

出力レコードに挿入され、切捨て操作を示す指標です。

gg.handler.name.format.encoding

オプション

Javaでサポートされる任意のエンコーディング名または別名。

Oracle GoldenGateプロセスをホストしているマシンのネイティブのシステム・エンコーディング。

出力される区切りテキストのエンコーディングを決定します。

gg.handler.name.format.fieldDelimiter

オプション

任意の文字列

ASCII 001 (デフォルトのHive区切り文字)

区切りフィールド間に使用される区切り文字。この値はCDATA[]ラッピングをサポートします。

gg.handler.name.format.lineDelimiter

オプション

任意の文字列

newline (デフォルトのHive区切り文字)

レコード間で使用される区切り文字。この値はCDATA[]ラッピングをサポートします。

gg.handler.name.format.includeTableName

オプション

true | false

true

falseを使用して出力される区切りデータで表名の出力を抑止します。

gg.handler.name.format.keyValueDelimiter

オプション

任意の文字列

=

マップにおけるキーと値の間の区切り文字を指定します。Key1=value1。トークンはマップされた値です。構成値はCDATA[]ラッピングをサポートします。

gg.handler.name.format.keyValuePairDelimiter

オプション

任意の文字列

,

マップにおけるキー/値ペアの間の区切り文字を指定します。Key1=Value1,Key2=Value2。トークンはマップされた値です。構成値はCDATA[]ラッピングをサポートします。

gg.handler.name.format.pkUpdateHandling

オプション

abend | update | delete-insert

abend

フォーマッタが、主キーを変更する更新操作をどのように処理するかに関する構成を指定します。主キーを操作するとテキスト・フォーマッタで問題が起きることがあるので、ユーザーは特に慎重を期する必要があります。

- abend - プロセスが異常終了することを示します

- update - プロセスでこれが通常の更新として扱われることを示します

- delete-insert - プロセスでこれが削除および挿入として扱われることを示します。これが動作するためには、完全なサプリメンタル・ロギングが必要です。操作前と操作後の完全な行イメージがない場合、挿入データは不完全になります。

gg.handler.name.format.nullValueRepresentation

オプション

任意の文字列

NULL

NULL値の場合に区切り出力に含まれる内容を構成できます。構成値はCDATA[]ラッピングをサポートします。

gg.handler.name.format.missingValueRepresentation

オプション

任意の文字列

"" (値なし)

値がない場合に区切りテキスト出力に含まれる内容を構成できます。構成値はCDATA[]ラッピングをサポートします。

gg.handler.name.format.includePosition

オプション

true | false

true

ソース証跡ファイルからの操作ポジションの出力を抑止できます。

gg.handler.name.format.includePosition

オプション

true | false

true

ソース証跡ファイルからの操作ポジションの出力を抑止できます。

gg.handler.name.format.iso8601Forma

オプション

true | false

true

現在のタイムスタンプの形式を制御します。デフォルトはISO 8601形式です。falseに設定すると、現在のタイムスタンプの日付と時刻の間の"T"が削除され、かわりに" "が出力されます。

6.2.6 サンプル構成

Javaアダプタ構成ファイルからの区切りテキスト・フォーマッタの構成例を次に示します。

gg.handler.hdfs.format.includeColumnNames=false
gg.handler.hdfs.format.includeOpTimestamp=true
gg.handler.hdfs.format.includeCurrentTimestamp=true
gg.handler.hdfs.format.insertOpKey=I
gg.handler.hdfs.format.updateOpKey=U
gg.handler.hdfs.format.deleteOpKey=D
gg.handler.hdfs.format.truncateOpKey=T
gg.handler.hdfs.format.encoding=UTF-8
gg.handler.hdfs.format.fieldDelimiter=CDATA[\u0001]
gg.handler.hdfs.format.lineDelimiter=CDATA[\n]
gg.handler.hdfs.format.includeTableName=true
gg.handler.hdfs.format.keyValueDelimiter=CDATA[=]
gg.handler.hdfs.format.kevValuePairDelimiter=CDATA[,]
gg.handler.hdfs.format.pkUpdateHandling=abend
gg.handler.hdfs.format.nullValueRepresentation=NULL
gg.handler.hdfs.format.missingValueRepresentation=CDATA[]
gg.handler.hdfs.format.includePosition=true
gg.handler.hdfs.format=delimitedtext

6.2.7 メタデータ変更イベント

Oracle GoldenGate for Big Dataでは、実行時にメタデータ変更イベントが処理されるようになりました。これは、複製されたデータベースとアップストリーム・レプリケーション・プロセスがメタデータ変更イベントを伝播すると想定しています。区切りテキスト・フォーマッタは、変更を含めるように出力形式を変更するだけで、実行を続けます。

ただし、メタデータの変更はダウンストリームのアプリケーションに影響する可能性があります。区切りテキスト形式は、位置の関係を持つ固定数のフィールドで構成されます。ソース表での列の削除は、Oracle GoldenGateの実行時にシームレスに処理されますが、フィールドの合計数が変わることになるため、一部のデータの位置関係が変わる可能性があります。新しい列は最後に追加されると想定されるため、列(単数または複数)の追加は、メタデータ変更イベントの中でも影響が最も小さいと考えられます。メタデータ変更イベントを実行する前に、そのイベントの影響を考慮する必要があります。メタデータ変更イベントが頻繁になる場合は、もっと柔軟性が高く明快な形式、たとえばJSONやXMLなどを検討することをお薦めします。

6.2.8 特別な考慮事項

ビッグ・データ・アプリケーションは、格納方法がRDBMSと異なります。RDBMSで更新操作と削除操作を行うと、既存のデータが変更されます。一方、ビッグ・データ・アプリケーションでは、データは変更されず、既存のデータに追加されるだけです。したがって、特定の行の現在の状態は、HDFSシステムにおけるその行に対する既存の操作がすべて統合された結果になります。そのため、特別な場合が起こります。

6.2.8.1 主キーの更新

主キーを更新する操作では、ビッグ・データ統合について特別な考慮と計画が必要です。主キーの更新は、ソース・データベースの特定の行に対する1つ以上の主キーを変更する更新操作です。データはビッグ・データ・アプリケーションで追加されるだけなので、主キーの更新操作は、何も処理しない更新というより新しい挿入にも似ています。区切りテキスト・フォーマッタは、主キーの特別な処理に対応しており、ユーザーが設定を変更できます。設定変更が可能な動作は次のとおりです。

表6-2 設定変更可能な動作

値

説明

abend

デフォルトの動作では、主キーが更新される場合、区切りテキスト・フォーマッタは追加を実行します。

update

この構成では、主キー更新が他の更新操作と同じように処理されます。この構成は、ビッグ・データ・システムから行データを選択するとき、変更される主キーが選択基準として使用されないと間違いなくわかっている場合にのみ選択してください。

delete-insert

この構成を使用すると、主キーの更新は、操作前のイメージ・データを使用する削除と、操作後のイメージ・データを使用する挿入という特殊なケースとして処理されます。この構成は、ビッグ・データ・アプリケーションで主キー更新の影響をより正確にモデル化する場合があります。ただし、この構成を選択する場合は、ソース・データベースでのレプリケーションで完全なサプリメンタル・ロギングを有効にすることが重要です。完全なサプリメンタル・ロギングを有効にしない場合、削除操作は正常に処理されますが、挿入操作では、ビッグ・データ・アプリケーションで行データの完全な形式の列のデータがすべては含まれません。

6.2.8.2 データの統合

前述したように、ビッグ・データ・ファイリングでは、基礎になる格納情報にデータが追加されるだけです。分析ツールは通常、データ・ファイルを横断して、特定の行の操作をすべて1つの出力に統合するマップ・リデュース・プログラムを生成します。したがって、操作の順を指定することが重要です。区切りテキスト・フォーマッタには、このニーズに対応する多くのメタデータ・フィールドがあります。この要件を満たすには、操作のタイムスタンプでも十分です。が、共通のトランザクションを共有する場合などには特に、2つの更新操作が同じタイムスタンプになる場合もあります。操作タイムスタンプが等しい場合には、証跡のポジションが判別基準のフィールドになります。最後に、現在のタイムスタンプもビッグ・データにおける操作の順序指標として最適です。

6.3 JSONフォーマッタ

JSONフォーマッタは、操作ベースのフォーマッタです。ソース証跡ファイルから、操作データをJSONオブジェクトとしてフォーマットします。挿入、更新、削除および切捨ての各操作は、個々のJSONメッセージとしてフォーマットされます。

6.3.1 メッセージのフォーマットの詳細

次の2つの項では、生成されるJSONメッセージの内容について詳細に説明します。最初の項では操作メタデータについて説明し、次の項では操作前と操作後の列データ値について説明します。

6.3.1.1 操作メタデータ

JSONフォーマッタによって生成されるJSONオブジェクトには、各メッセージの先頭に次のメタデータ・フィールドがあります。

表6-3 JSONのメタデータ

値

説明

table

完全修飾の表名を含みます。完全修飾の表名の形式は、CATALOG NAME.SCHEMA NAME.TABLE NAMEです。

op_type

証跡ファイルからのデータベース操作のタイプを示す操作タイプが含まれます。デフォルト値は挿入を表すI、更新を表すU、削除を表すD、切捨てを表すTです。

op_ts

操作タイムスタンプは、ソース証跡ファイルからの操作のタイムスタンプです。このタイムスタンプはソース証跡から取得されるため、固定です。証跡ファイルを再生すると、同じ操作に対して同じタイムスタンプにはなります。

current_ts

現在のタイムスタンプは、区切りテキスト・フォーマッタが現在の操作レコードを処理した現在時刻のタイムスタンプです。このタイムスタンプはISO-8601形式に従い、精度はミリ秒までです。証跡ファイルを再生しても、同じ操作に対して同じタイムスタンプにはなりません。

pos

これは証跡ファイルのポジションで、連結された連番と、ソース証跡ファイルからのRBA番号を伴います。証跡のポジションは、操作からソース証跡ファイルをたどるトレーサビリティ情報になります。この連番は、ソース証跡ファイルの番号です。RBA番号は、証跡ファイルのオフセットです。

primary_keys

ソース表の主キーの列名を保持する配列変数。primary_keysフィールドは、includePrimaryKeys構成プロパティがtrueに設定されている場合にのみJSONに含まれます。

tokens

このメンバーは、ソース証跡ファイルからのトークン・キー値ペアをメンバーに持つオブジェクトです。

6.3.1.2 操作データ

操作メタデータに続くデータは、操作データです。このデータは、オブジェクトであるbeforeおよびafterメンバーによって表されます。このオブジェクトに含まれるメンバーは、キーが列名、値が列値です。

ソース証跡ファイルからの操作の列値は、列に値がある、列値がNULLも、列値がないの3つの状態のいずれかです。JSONフォーマッタは、これらの列値状態を、作成されたJSONオブジェクトに次のようにマップします。

- 列値がある - 列値が出力されます。次の例では、メンバーSTATEに値があります。

"after":{        "CUST_CODE":"BILL",        "NAME":"BILL'S USED CARS",        "CITY":"DENVER",        "STATE":"CO"    }

- 列値がNULL - デフォルトの出力値はJSON NULLです。次の例では、メンバーSTATE の値がNULLです。

"after":{        "CUST_CODE":"BILL",        "NAME":"BILL'S USED CARS",        "CITY":"DENVER",        "STATE":null    }

- 列値がない - JSONには、列値がない場合の要素がありません。次の例では、メンバーSTATEの値がありません。

"after":{        "CUST_CODE":"BILL",        "NAME":"BILL'S USED CARS",        "CITY":"DENVER",    }

JSONフォーマッタのデフォルト設定では、ソース証跡ファイルのデータ型を、対応するJSONデータ型にマップします。JSONでサポートされるデータ型は少ないため、この機能はソース証跡ファイルの数値フィールドを、数値として型付けされるメンバーにマップする場合に、大きく影響します。このデータ型マッピングの設定を変更して、すべてのデータを文字列として扱うことができます。

6.3.2 JSONメッセージの例

挿入、更新、削除および切捨て操作に対してJSONフォーマッタによって作成されるJSONメッセージの例を次に示します。

6.3.2.1 挿入メッセージの例

{
"table":"GG.TCUSTORD",
"op_type":"I",
"op_ts":"2013-06-02 22:14:36.000000",
"current_ts":"2015-09-18T13:39:35.447000",
"pos":"00000000000000001444",
"tokens":{
"R":"AADPkvAAEAAEqL2AAA"
},
"after":{
"CUST_CODE":"WILL",
"ORDER_DATE":"1994-09-30:15:33:00",
"PRODUCT_CODE":"CAR",
"ORDER_ID":"144",
"PRODUCT_PRICE":17520.00,
"PRODUCT_AMOUNT":3,
"TRANSACTION_ID":"100"
}
}

6.3.2.2 更新メッセージの例

{
"table":"GG.TCUSTORD",
"op_type":"U",
"op_ts":"2013-06-02 22:14:41.000000",
"current_ts":"2015-09-18T13:39:35.748000",
"pos":"00000000000000002891",
"tokens":{
"R":"AADPkvAAEAAEqLzAAA"
},
"before":{
"CUST_CODE":"BILL",
"ORDER_DATE":"1995-12-31:15:00:00",
"PRODUCT_CODE":"CAR",
"ORDER_ID":"765",
"PRODUCT_PRICE":15000.00,
"PRODUCT_AMOUNT":3,
"TRANSACTION_ID":"100"
},
"after":{
"CUST_CODE":"BILL",
"ORDER_DATE":"1995-12-31:15:00:00",
"PRODUCT_CODE":"CAR",
"ORDER_ID":"765",
"PRODUCT_PRICE":14000.00,
"PRODUCT_AMOUNT":3,
"TRANSACTION_ID":"100"
}
}

6.3.2.3 削除メッセージの例

{
"table":"GG.TCUSTORD",
"op_type":"D",
"op_ts":"2013-06-02 22:14:41.000000",
"current_ts":"2015-09-18T13:39:35.766000",
"pos":"00000000000000004338",
"tokens":{
"L":"206080450",
"6":"9.0.80330",
"R":"AADPkvAAEAAEqLzAAC"
},
"before":{
"CUST_CODE":"DAVE",
"ORDER_DATE":"1993-11-03:07:51:35",
"PRODUCT_CODE":"PLANE",
"ORDER_ID":"600"
}
}

6.3.2.4 切捨てメッセージの例

{
"table":"GG.TCUSTORD",
"op_type":"T",
"op_ts":"2013-06-02 22:14:41.000000",
"current_ts":"2015-09-18T13:39:35.767000",
"pos":"00000000000000004515",
"tokens":{
"R":"AADPkvAAEAAEqL2AAB"
}
}

6.3.3 JSONスキーマ

デフォルトでは、JSONスキーマは発生するソース表ごとに生成されます。JSONスキーマは、その表に対する操作が発生した時点でジャスト・イン・タイム方式で生成されます。JSONスキーマは、JSONオブジェクトの解析に必須ではありません。ただし、多くのJSONパーサーがJSONスキーマを使用して、JSONオブジェクトの検証解析を実行します。また、JSONスキーマを確認すると、出力されるJSONオブジェクトのレイアウトを把握できます。JSONスキーマは、デフォルトではGoldenGate_Home/dirdefディレクトリに作成され、FULLY_QUALIFIED_TABLE_NAME.schema.jsonという命名規則に従って名前が付けられます。JSONスキーマの生成は抑止できます。前の項でリストしたJSONオブジェクトのJSONスキーマの例を次に示します。

{
"$schema":"http://json-schema.org/draft-04/schema#",
"title":"GG.TCUSTORD",
"description":"JSON schema for table GG.TCUSTORD",
"definitions":{
"row":{
"type":"object",
"properties":{
"CUST_CODE":{
"type":[
"string",
"null"
]
},
"ORDER_DATE":{
"type":[
"string",
"null"
]
},
"PRODUCT_CODE":{
"type":[
"string",
"null"
]
},
"ORDER_ID":{
"type":[
"string",
"null"
]
},
"PRODUCT_PRICE":{
"type":[
"number",
"null"
]
},
"PRODUCT_AMOUNT":{
"type":[
"number",
"null"
]
},
"TRANSACTION_ID":{
"type":[
"string",
"null"
]
}
},
"additionalProperties":false
},
"tokens":{
"type":"object",
"description":"Token keys and values are free form key value pairs.",
"properties":{
},
"additionalProperties":true
}
},
"type":"object",
"properties":{
"table":{
"description":"The fully qualified table name",
"type":"string"
},
"op_type":{
"description":"The operation type",
"type":"string"
},
"op_ts":{
"description":"The operation timestamp",
"type":"string"
},
"current_ts":{
"description":"The current processing timestamp",
"type":"string"
},
"pos":{
"description":"The position of the operation in the data source",
"type":"string"
},
"tokens":{
"$ref":"#/definitions/tokens"
},
"before":{
"$ref":"#/definitions/row"
},
"after":{
"$ref":"#/definitions/row"
}
},
"required":[
"table",
"op_type",
"op_ts",
"current_ts",
"pos"
],
"additionalProperties":false
}

6.3.4 JSONスキーマ構成

表6-4 JSONスキーマの構成パラメータ

パラメータ

必須/オプション

有効な値

デフォルト

説明

gg.handler.name.format.insertOpKey

オプション

任意の文字列

I

出力レコードに挿入され、挿入操作を示す指標です。

gg.handler.name.format.updateOpKey

オプション

任意の文字列

U

出力レコードに挿入され、更新操作を示す指標です。

gg.handler.name.format.deleteOpKey

オプション

任意の文字列

D

出力レコードに挿入され、削除操作を示す指標です。

gg.handler.name.format.truncateOpKey

オプション

任意の文字列

T

出力レコードに挿入され、切捨て操作を示す指標です。

gg.handler.name.format.prettyPrintformat.prettyPrint

オプション

true | false

false

JSONデータの出力形式を制御します。trueの場合は整形出力で、空白を人間が読みやすい形式です。falseの場合は整形出力にならず、簡潔ですが人間には読みにくくなります。

gg.handler.name.format.jsonDelimiter

オプション

任意の文字列

"" (値なし)

生成されるJSONの間にオプションの区切り文字を挿入できるため、データの連続ストリームから解析しやすくなります。構成値はCDATA[]ラッピングをサポートします。

gg.handler.name.format.generateSchema

オプション

true | false

true

生成されるJSONドキュメントに対して、JSONスキーマの生成を制御します。JSONスキーマは、表ベースで表に生成されます。JSONスキーマは、JSONドキュメントの解析に必須ではありません。ただし、JSONスキーマを使用すると、JSONドキュメントがどのように見えるかが示されるため、JSON解析の検証に利用することができます。

gg.handler.name.format.schemaDirectory

オプション

有効で存在する人気のファイル・システム・パス

./dirdef

生成されるJSONスキーマの出力場所を制御します。

gg.handler.name.format.treatAllColumnsAsStrings

オプション

true | false

false

生成されるJSONドキュメントの出力の型付けを制御します。falseに設定すると、フォーマッタはOracle GoldenGateの型を、対応するJSONの型にマップしようと試みます。trueに設定すると、すべてのデータは生成されるJSONとJSONスキーマで文字列として扱われます。

gg.handler.name.format.encoding

オプション

Javaでサポートされる任意の有効なエンコーディング名または別名。

UTF-8 (JSONのデフォルト)

生成されるJSONスキーマおよびドキュメントの出力のエンコーディングを制御します。

gg.handler.name.format.versionSchemas

オプション

true | false

false

作成されたスキーマのバージョンを制御します。スキーマ・バージョン管理によって、新しいスキーマが作成されるたびにローカル・ファイル・システム上のスキーマ・ディレクトリにタイムスタンプ付きのスキーマが作成されます。trueに設定すると、スキーマ・バージョン管理が有効化されます。falseに設定すると、スキーマ・バージョン管理が無効化されます。

gg.handler.name.format.iso8601Format

オプション

true | false

true

現在のタイムスタンプの形式を制御します。デフォルトはISO 8601形式です。falseに設定すると、現在のタイムスタンプの日付と時刻の間の"T"が削除され、かわりに" "が出力されます。

gg.handler.name.format.includePrimaryKeys

オプション

true | false

false

この構成プロパティをtrueに設定すると、JSON出力にソース表から主キーの列名の配列が含まれます。

6.3.5 サンプル構成

Javaアダプタ構成ファイルからのJSONフォーマッタの構成例を次に示します。

gg.handler.hdfs.format=json
gg.handler.hdfs.format.insertOpKey=I
gg.handler.hdfs.format.updateOpKey=U
gg.handler.hdfs.format.deleteOpKey=D
gg.handler.hdfs.format.truncateOpKey=T
gg.handler.hdfs.format.prettyPrint=false
gg.handler.hdfs.format.jsonDelimiter=CDATA[]
gg.handler.hdfs.format.generateSchema=true
gg.handler.hdfs.format.schemaDirectory=dirdef
gg.handler.hdfs.format.treatAllColumnsAsString

6.3.6 メタデータ変更イベント

メタデータ変更イベントは、実行時に処理されるようになりました。特定の表に対するメタデータ変更イベントが発生すると、その表に対して次の操作が発生した時点でJSONスキーマが生成されます。生成されるJSONメッセージの内容は、メタデータの変更に応じて変わります。たとえば、メタデータの変更が列の追加の場合、メタデータ変更イベントの後で、作成されたJSONメッセージに新しい列が含まれます。

6.3.7 主キーの更新

JSONは操作データをモデル化するため、主キーの更新に特別な処理は不要で、他の更新と同じように扱われます。操作前と操作後の値には、主キーの変更が反映されます。

6.4 Avro行フォーマッタ

Apache Avroは、オープン・ソースのデータ・シリアライズ/デシリアライズ・フレームワークの1つです。シリアライズされたデータの柔軟性と簡潔さ、シリアライズ/デシリアライズのパフォーマンスの高さで知られています。Apache Avroは、ビッグ・データ・アプリケーションでよく使われています。

Avro行フォーマッタは、ソース証跡ファイルの操作データを、Avroバイナリ配列形式のメッセージにフォーマットします。挿入、更新、削除および切捨ての各操作は、個々のAvroメッセージとしてフォーマットされます。ソース証跡ファイルには、操作データの操作前と操作後のイメージが含まれます。Avro行フォーマッタは、その操作前と操作後のイメージ・データを取得して、データをAvroバイナリ形式の操作データにフォーマットします。

Avro行フォーマッタは、ソース証跡ファイルの操作データから行データを表す形式に操作をフォーマットします。この形式は、Avroメッセージがデータ変更操作をモデル化するため、Avro操作フォーマッタの出力より簡潔です。

Avro行フォーマッタは、AvroデータをHDFSにストリーミングするときに適した選択肢です。Hiveは、HDFSのデータ・ファイルをAvro形式でサポートします。

6.4.1 メッセージのフォーマットの詳細

次の2つの項では、生成されるAvro行メッセージの内容について詳細に説明します。最初の項では操作メタデータについて説明し、次の項では列の値データについて説明します。

6.4.1.1 操作メタデータ

Avro行フォーマッタによって生成されるAvroメッセージには、メッセージの先頭に次の7つのメタデータ・フィールドがあります。

表6-5 Avroフォーマッタのメタデータ

値

説明

table

完全修飾の表名。完全修飾の表名の形式は、CATALOG_NAME.SCHEMA_NAME.TABLE_NAMEです。

op_type

証跡ファイルからのデータベース操作のタイプを示す操作タイプ。デフォルト値は挿入を表すI、更新を表すU、削除を表すD、切捨てを表すTです。

op_ts

操作タイムスタンプは、ソース証跡ファイルからの操作のタイムスタンプです。このタイムスタンプはソース証跡から取得されるため、固定です。証跡ファイルを再生すると、同じ操作に対して同じタイムスタンプにはなります。

current_ts

現在のタイムスタンプは、フォーマッタが現在の操作レコードを処理した現在時刻です。このタイムスタンプはISO-8601形式に従い、精度はミリ秒までです。証跡ファイルを再生しても、同じ操作に対して同じタイムスタンプにはなりません。

pos

証跡ファイルのポジションは、連結された連番と、ソース証跡ファイルからのRBA番号を伴います。証跡のポジションは、操作からソース証跡ファイルをたどるトレーサビリティ情報になります。この連番は、ソース証跡ファイルの番号です。RBA番号は、証跡ファイルのオフセットです。

primary_keys

ソース表の主キーの列名を保持する配列変数。

tokens

ソース証跡ファイルからのトークン・キー値ペアを保持するマップ変数。

6.4.1.2 操作データ

操作メタデータに続くデータは、操作データです。このデータは、列名で識別される個々のフィールドとして表されます。

ソース証跡ファイルからの操作の列値は、列に値がある、列値がNULLも、列値がないの3つの状態のいずれかです。Avro属性はこのうちの2つ、列に値があるか、列値がNULLかのみをサポートします。列値がない状態は、NULL値と同じとして扱われます。Avro行フォーマッタを使用する際には、ソース証跡ファイルのすべての列に対する完全なイメージ・データを提供するために、Oracle GoldenGateの取得プロセスを構成することをお薦めします。この機能を有効にする方法は、特定のRDBMS用のOracle GoldenGateのドキュメントを参照してください。

Avro行フォーマッタのデフォルト設定では、ソース証跡ファイルのデータ型を、対応するAvroデータ型にマップします。Avroでサポートされるデータ型は少ないため、この機能はソース証跡ファイルの数値フィールドを、数値として型付けされるメンバーにマップする場合に、大きく影響します。このデータ型マッピングの設定を変更して、すべてのデータを文字列として扱うことができます。

6.4.2 Avro行メッセージの例

Avroメッセージはバイナリなので、人間が読める形式ではありません。JSON形式のメッセージの例を次に示します。

6.4.2.1 挿入メッセージの例

{"table": "GG.TCUSTORD",
"op_type": "I",
"op_ts": "2013-06-02 22:14:36.000000",
"current_ts": "2015-09-18T10:13:11.172000",
"pos": "00000000000000001444",
"primary_keys": ["CUST_CODE", "ORDER_DATE", "PRODUCT_CODE", "ORDER_ID"],
"tokens": {"R": "AADPkvAAEAAEqL2AAA"},
"CUST_CODE": "WILL",
"ORDER_DATE": "1994-09-30:15:33:00",
"PRODUCT_CODE": "CAR",
"ORDER_ID": "144",
"PRODUCT_PRICE": 17520.0,
"PRODUCT_AMOUNT": 3.0,
"TRANSACTION_ID": "100"}

6.4.2.2 更新メッセージの例

{"table": "GG.TCUSTORD",
"op_type": "U",
"op_ts": "2013-06-02 22:14:41.000000",
"current_ts": "2015-09-18T10:13:11.492000",
"pos": "00000000000000002891",
"primary_keys": ["CUST_CODE", "ORDER_DATE", "PRODUCT_CODE", "ORDER_ID"], "tokens":
{"R": "AADPkvAAEAAEqLzAAA"},
"CUST_CODE": "BILL",
"ORDER_DATE": "1995-12-31:15:00:00",
"PRODUCT_CODE": "CAR",
"ORDER_ID": "765",
"PRODUCT_PRICE": 14000.0,
"PRODUCT_AMOUNT": 3.0,
"TRANSACTION_ID": "100"}

6.4.2.3 削除メッセージの例

{"table": "GG.TCUSTORD",
"op_type": "D",
"op_ts": "2013-06-02 22:14:41.000000",
"current_ts": "2015-09-18T10:13:11.512000",
"pos": "00000000000000004338",
"primary_keys": ["CUST_CODE", "ORDER_DATE", "PRODUCT_CODE", "ORDER_ID"], "tokens":
{"L": "206080450", "6": "9.0.80330", "R": "AADPkvAAEAAEqLzAAC"}, "CUST_CODE":
"DAVE",
"ORDER_DATE": "1993-11-03:07:51:35",
"PRODUCT_CODE": "PLANE",
"ORDER_ID": "600",
"PRODUCT_PRICE": null,
"PRODUCT_AMOUNT": null,
"TRANSACTION_ID": null}

6.4.2.4 切捨てメッセージの例

{"table": "GG.TCUSTORD",
"op_type": "T",
"op_ts": "2013-06-02 22:14:41.000000",
"current_ts": "2015-09-18T10:13:11.514000",
"pos": "00000000000000004515",
"primary_keys": ["CUST_CODE", "ORDER_DATE", "PRODUCT_CODE", "ORDER_ID"], "tokens":
{"R": "AADPkvAAEAAEqL2AAB"},
"CUST_CODE": null,
"ORDER_DATE": null,
"PRODUCT_CODE": null,
"ORDER_ID": null,
"PRODUCT_PRICE": null,
"PRODUCT_AMOUNT": null,
"TRANSACTION_ID": null}

6.4.3　Avroスキーマ

Avroは、スキーマの表現にJSONを使用します。Avroスキーマは、生成されるAvroメッセージの形式を定義し、Avroメッセージのシリアライズとデシリアライズに必要です。スキーマは、表に対する操作が発生した時点でJIT (ジャスト・イン・タイム)方式で生成されます。生成されるAvroスキーマは表定義に固有であり、処理される操作で発生する表ごとに個別のAvroスキーマが生成されます。Avroスキーマは、デフォルトではGoldenGate_Home/dirdefディレクトリに書き込まれますが、書き込む場所は設定を変更できます。Avroスキーマのファイル名は、FullyQualifiedTableName.avscという命名規則に従います。

前述の参照例に示したAvro行フォーマッタのAvroスキーマは、次のとおりです。

{
"type" : "record",
"name" : "TCUSTORD",
"namespace" : "GG",
"fields" : [ {
"name" : "table",
"type" : "string"
}, {
"name" : "op_type",
"type" : "string"
}, {
"name" : "op_ts",
"type" : "string"
}, {
"name" : "current_ts",
"type" : "string"
}, {
"name" : "pos",
"type" : "string"
}, {
"name" : "primary_keys",
"type" : {
"type" : "array",
"items" : "string"
}
}, {
"name" : "tokens",
"type" : {
"type" : "map",
"values" : "string"
},
"default" : { }
}, {
"name" : "CUST_CODE",
"type" : [ "null", "string" ],
"default" : null
}, {
"name" : "ORDER_DATE",
"type" : [ "null", "string" ],
"default" : null
}, {
"name" : "PRODUCT_CODE",
"type" : [ "null", "string" ],
"default" : null
}, {
"name" : "ORDER_ID",
"type" : [ "null", "string" ],
"default" : null
}, {
"name" : "PRODUCT_PRICE",
"type" : [ "null", "double" ],
"default" : null
}, {
"name" : "PRODUCT_AMOUNT",
"type" : [ "null", "double" ],
"default" : null
}, {
"name" : "TRANSACTION_ID",
"type" : [ "null", "string" ],
"default" : null
} ]
}

6.4.4 Avro行の構成

表6-6 Avro行の構成オプション

パラメータ

オプション/必須

有効な値

デフォルト

説明

gg.handler.name.format.insertOpKey

オプション

任意の文字列

I

出力レコードに挿入され、挿入操作を示す指標です。

gg.handler.name.format.updateOpKey

オプション

任意の文字列

U

出力レコードに挿入され、更新操作を示す指標です。

gg.handler.name.format.deleteOpKey

オプション

任意の文字列

D

出力レコードに挿入され、削除操作を示す指標です。

gg.handler.name.format.truncateOpKey

オプション

任意の文字列

T

出力レコードに挿入され、切捨て操作を示す指標です。

gg.handler.name.format.encoding

オプション

Javaでサポートされる任意の有効なエンコーディング名または別名。

UTF-8 (JSONのデフォルト)

JSONとして生成されるAvroスキーマの出力のエンコーディングを制御します。JSONのデフォルトはUTF-8です。Avroメッセージはバイナリで、独自の内部形式でエンコーディングをサポートしています。

gg.handler.name.format.treatAllColumnsAsStrings

オプション

true | false

false

生成されるAvroメッセージの出力の型付けを制御します。falseに設定すると、フォーマッタはOracle GoldenGateの型を、対応するAVROの型にマップしようと試みます。trueに設定すると、すべてのデータは生成されるAvroメッセージとスキーマで文字列として扱われます。

gg.handler.name.format.pkUpdateHandlingformat.pkUpdateHandling

オプション

abend | update | delete-insert

abend

フォーマッタが、主キーを変更する更新操作をどのように処理するかに関する構成を指定します。主キーを操作するとAvro行フォーマッタで問題が起きることがあるので、ユーザーは特に慎重を期する必要があります。

- abend - プロセスが異常終了することを示します

- update - プロセスでこれが通常の更新として扱われることを示します

- delete-insert - プロセスでこれが削除および挿入として扱われることを示します。これが動作するためには、完全なサプリメンタル・ロギングが必要です。操作前と操作後の完全な行イメージがない場合、挿入データは不完全になります。

gg.handler.name.format.lineDelimiter

オプション

任意の文字列

値なし

オプションで、ユーザーが各Avroメッセージの後に区切り文字を挿入できます。これはベスト・プラクティスとは言えませんが、ユースケースによっては、ユーザーが他のストリームを解析し、個々のAvroメッセージをストリームから抽出したい場合があるかもしれません。このプロパティを使用すると、そうしたオプションをユーザーが実行できます。Avroメッセージには出現しそうにない一意の区切り文字を選択してください。このプロパティはCDATA[]ラッピングをサポートします。

gg.handler.name.format.versionSchemas

オプション

true|false

false

作成されるAvroスキーマは常に、{fully qualified table name}.avscという規則に従います。このプロパティをtrueに設定すると、{完全修飾の表名}_{現在のタイムスタンプ}.avscという名前のスキーマ・ディレクトリに追加のAvroスキーマが作成されます。追加のAvroスキーマは、破棄も削除もされないため、スキーマ展開の履歴になります。

gg.handler.name.format.wrapMessageInGenericAvroSchema

オプション

true|false

false

汎用のAvroラッパー・メッセージで、ソース証跡ファイルからの操作に対してAvroメッセージをラップする機能を提供します。詳細は、「汎用のラッパー機能」を参照してください。

gg.handler.name.format.schemaDirectory

オプション

有効で存在する人気のファイル・システム・パス

./dirdef

生成されるAvroスキーマの出力場所を制御します。

gg.handler.name.schemaFilePath=

オプション

Javaでサポートされる任意の有効なエンコーディング名または別名。

./dirdef

スキーマを出力するHDFS内のファイル・ディレクトリに対する構成プロパティを制御します。メタデータ変更イベントにより、関連付けられた表の次の操作が実行されるとスキーマは上書きされます。スキーマは、ローカル・ファイル・システムcatalog.schema.table.avscに書き込まれるスキーマと同じ命名規則に従います。

gg.handler.name.format.iso8601Format

オプション

true | false

true

現在のタイムスタンプの形式を制御します。デフォルトはISO 8601形式です。falseに設定すると、現在のタイムスタンプの日付と時刻の間の"T"が削除され、かわりに" "が出力されます。

6.4.5 サンプル構成

Javaアダプタ・プロパティ・ファイルからのAvro行フォーマッタの構成例を次に示します。

gg.handler.hdfs.format=avro_row
gg.handler.hdfs.format.insertOpKey=I
gg.handler.hdfs.format.updateOpKey=U
gg.handler.hdfs.format.deleteOpKey=D
gg.handler.hdfs.format.truncateOpKey=T
gg.handler.hdfs.format.encoding=UTF-8
gg.handler.hdfs.format.pkUpdateHandling=abend
gg.handler.hafs.format.wrapMessageInGenericAvroMessage=false

6.4.6 メタデータ変更イベント

Avro行フォーマッタは、メタデータ変更イベントが発生したときにアクションを実行できます。このとき、複製されるデータベースとアップストリームのOracle GoldenGateレプリケーション・プロセスでメタデータ変更イベントが伝播されると想定されています。Avroメッセージは対応するスキーマに緊密に依存しているため、Avroを使用してフォーマットするときには特にメタデータ変更イベントが重要です。

メタデータ変更イベントは、Avro行フォーマッタによってシームレスに処理され、更新されたAvroスキーマは、メタデータ変更イベント後にその表の操作が最初に発生したときに生成されます。メタデータ変更イベントの影響を理解して、ダウンストリーム・ターゲットを新しいAvroスキーマに変更する必要があります。AvroメッセージがAvroスキーマに密に依存している場合、互換性の問題が生じることがあります。スキーマ変更の前に生成されるAvroメッセージを、新たに生成されたAvroスキーマでデシリアライズすることはできません。

逆に、スキーマ変更の後で生成されるAvroメッセージを、前に生成されたAvroスキーマでデシリアライズすることもできません。ベスト・プラクティスとして、メッセージの生成に使用されたのと同じバージョンのAvroスキーマを使用するようにしてください。詳細は、Apache Avroのドキュメントを参照してください。

6.4.7 特別な考慮事項

この項では、特別な考慮事項について説明します。

- トラブルシューティング

- 主キーの更新

- 汎用のラッパー機能

6.4.7.1 トラブルシューティング

Avroはバイナリ形式なので、人間が読める形式ではありません。Avroメッセージはバイナリ形式なので、問題が発生した場合にデバッグが容易ではありません。Avro行フォーマッタには、この問題を緩和するための特別な機能があります。log4j Javaロギング・レベルをTRACEに設定すると、作成されるAvroメッセージがデシリアライズされ、ログ・ファイルにJSONオブジェクトとして示されます。これで、作成されたAvroメッセージの構造と内容を見られるようになります。TRACEは、パフォーマンスに大きくマイナスの影響を及ぼすため、本番環境では有効にしないでください。または、内容をトラブルシューティングするために、人間が読める内容で生成するフォーマッタに切り替えることも検討できます。XMLまたはJSONフォーマッタはどちらも、トラブルシューティングしやすいように人間が読める形式で内容を生成します。

6.4.7.2 主キーの更新

主キーを更新する操作では、ビッグ・データ統合について特別な考慮と計画が必要です。主キーの更新は、ソース・データベースの特定の行に対する1つ以上の主キーを変更する更新操作です。データはビッグ・データ・アプリケーションで追加されるだけなので、主キーの更新操作は、何も処理しない更新というより新しい挿入にも似ています。Avro行フォーマッタは、主キーの特別な処理に対応しており、ユーザーが設定を変更できます。設定変更が可能な動作は次のとおりです。

表6-7 設定変更可能な動作

値

説明

abend

デフォルトの動作では、主キーが更新される場合、区切りテキスト・フォーマッタは追加を実行します。

update

この構成では、主キー更新が他の更新操作と同じように処理されます。この構成は、ビッグ・データ・システムから行データを選択するとき、変更される主キーが選択基準として使用されないと間違いなくわかっている場合にのみ選択してください。

delete-insert

この構成を使用すると、主キーの更新は、操作前のイメージ・データを使用する削除と、操作後のイメージ・データを使用する挿入という特殊なケースとして処理されます。この構成は、ビッグ・データ・アプリケーションで主キー更新の影響をより正確にモデル化する場合があります。ただし、この構成を選択する場合は、ソース・データベースでのレプリケーションで完全なサプリメンタル・ロギングを有効にすることが重要です。完全なサプリメンタル・ロギングを有効にしない場合、削除操作は正常に処理されますが、挿入操作では、ビッグ・データ・アプリケーションで行データの完全な形式の列のデータがすべては含まれません。

6.4.7.3 汎用のラッパー機能

Avroメッセージは自己記述型ではありません。つまりメッセージの受信者は、メッセージに対応するスキーマのことを知っていないと、メッセージをデシリアライズできません。Avroメッセージはバイナリであり、メッセージの内容を調べてメッセージ・タイプを確定する一貫した、または信頼できる方法はありません。したがって、Kafkaのような1つのデータ・ストリームにメッセージをインタレースするときに、Avroは特に厄介です。

Avroフォーマッタには、汎用のAvroメッセージでAvroメッセージをラップする特別な機能があります。この機能を有効にするには、次の構成パラメータを設定します。

gg.handler.name.formatter.wrapMessageInGenericAvroMessage=true

汎用のメッセージとは、出力されるAvroメッセージすべてに共通するAvroペイロード・メッセージをラップするAvroメッセージです。汎用メッセージのスキーマは、generic_wrapper.avscという名前で、出力スキーマ・ディレクトリに書き込まれます。このメッセージには、次の3つのフィールドがあります。

- table_name - 完全修飾のソース表名。

- schema_hash - メッセージを生成するAvroスキーマのハッシュ・コード。

- payload - ラップされるAvroメッセージ。

Avroフォーマッタの汎用ラッパー・スキーマは、次のとおりです。

{
"type" : "record",
"name" : "generic_wrapper",
"namespace" : "oracle.goldengate",
"fields" : [ {
"name" : "table_name",
"type" : "string"
}, {
"name" : "schema_hash",
"type" : "int"
}, {
"name" : "payload",
"type" : "bytes"
} ]
}

6.5 Avro操作フォーマッタ

Apache Avroは、オープン・ソースのデータ・シリアライズ/デシリアライズ・フレームワークの1つです。シリアライズされたデータの柔軟性と簡潔さ、シリアライズ/デシリアライズのパフォーマンスの高さで知られています。Apache Avroは、ビッグ・データ・アプリケーションでよく使われています。

Avro操作フォーマッタは、ソース証跡ファイルの操作データを、Avroバイナリ配列形式のメッセージにフォーマットします。挿入、更新、削除および切捨ての各操作は、個々のAvroメッセージとしてフォーマットされます。ソース証跡ファイルには、操作データの操作前と操作後のイメージが含まれます。Avro操作フォーマッタは、その操作前と操作後のイメージ・データを取得して、データをAvroバイナリ形式の操作データにフォーマットします。

Avro操作フォーマッタは、ソース証跡ファイルの操作データから操作データを表す形式に操作をフォーマットします。この形式は、Avroメッセージが行データをモデル化するため、Avro行フォーマッタの出力より詳細です。

6.5.1 メッセージのフォーマットの詳細

この項の内容は次のとおりです。

- 操作メタデータ

- 操作データ

6.5.1.1 操作メタデータ

Avro操作フォーマッタによって生成されるAvroメッセージには、メッセージの先頭に次のメタデータ・フィールドがあります。

表6-8 Avroメッセージとそのメタデータ

フィールド

説明

table

CATALOG_NAME.SCHEMA NAME.TABLE NAME完全修飾の表名。完全修飾の表名の形式は、次のとおりです。

op_type

証跡ファイルからのデータベース操作のタイプを示す操作タイプ。デフォルト値は挿入を表す"I"、更新を表す"U"、削除を表す"D"、切捨てを表す"T"です。

op_ts

操作タイムスタンプは、ソース証跡ファイルからの操作のタイムスタンプです。このタイムスタンプはソース証跡から取得されるため、固定です。証跡ファイルを再生すると、同じ操作に対して同じタイムスタンプにはなります。

current_ts

現在のタイムスタンプは、フォーマッタが現在の操作レコードを処理した現在時刻です。このタイムスタンプはISO-8601形式に従い、精度はミリ秒までです。証跡ファイルを再生しても、同じ操作に対して同じタイムスタンプにはなりません。

pos

証跡ファイルのポジションは、連結された連番と、ソース証跡ファイルからのRBA番号を伴います。証跡のポジションは、操作からソース証跡ファイルをたどるトレーサビリティ情報になります。この連番は、ソース証跡ファイルの番号です。RBA番号は、証跡ファイルのオフセットです。

primary_keys

ソース表の主キーの列名を保持する配列変数。

tokens

ソース証跡ファイルからのトークン・キー値ペアを保持するマップ変数。

6.5.1.2 操作データ

この操作データは、列名で識別される個々のフィールドとして表されます。

ソース証跡ファイルからの操作の列値は、列に値がある、列値がNULLも、列値がないの3つの状態のいずれかです。Avro属性はこのうちの2つ、列に値があるか、列値がNULLかのみをサポートします。Avro操作フォーマッタには、列値がない場合を示すために、列ごとに追加のブール型フィールドがあります。この特別なブール型フィールドは、COLUMN_NAME_isMissingという名前です。COLUMN_NAMEフィールドの組合せを使用すると、3つすべての状態を定義できます。

- 状態1: 列に値がある
COLUMN_NAMEフィールドに値がある

COLUMN_NAME_isMissingフィールドがfalse

- 状態2: 列値がNULL
COLUMN_NAMEフィールドの値がNULL

COLUMN_NAME_isMissingフィールドがfalse

- 状態3: 列値がない
COLUMN_NAMEフィールドの値がNULL

COLUMN_NAME_isMissingフィールドがtrue

Avro行フォーマッタのデフォルト設定では、ソース証跡ファイルのデータ型を、対応するAvroデータ型にマップします。Avroでサポートされるデータ型は少ないため、この機能はソース証跡ファイルの数値フィールドを、数値として型付けされるメンバーにマップする場合に、大きく影響します。このデータ型マッピングの設定を変更して、すべてのデータを文字列として扱うことができます。

6.5.2 Avro操作メッセージの例

Avroメッセージはバイナリなので、人間が読める形式ではありません。JSON形式のメッセージの例を次に示します。

6.5.2.1 挿入メッセージの例

{"table": "GG.TCUSTORD",
"op_type": "I",
"op_ts": "2013-06-02 22:14:36.000000",
"current_ts": "2015-09-18T10:17:49.570000",
"pos": "00000000000000001444",
"primary_keys": ["CUST_CODE", "ORDER_DATE", "PRODUCT_CODE", "ORDER_ID"], "tokens":
{"R": "AADPkvAAEAAEqL2AAA"},
"before": null,
"after": {
"CUST_CODE": "WILL",
"CUST_CODE_isMissing": false,
"ORDER_DATE": "1994-09-30:15:33:00",
"ORDER_DATE_isMissing": false,
"PRODUCT_CODE": "CAR",
"PRODUCT_CODE_isMissing": false,
"ORDER_ID": "144", "ORDER_ID_isMissing": false,
"PRODUCT_PRICE": 17520.0,
"PRODUCT_PRICE_isMissing": false,
"PRODUCT_AMOUNT": 3.0, "PRODUCT_AMOUNT_isMissing": false,
"TRANSACTION_ID": "100",
"TRANSACTION_ID_isMissing": false}}

6.5.2.2 更新メッセージの例

{"table": "GG.TCUSTORD",
"op_type": "U",
"op_ts": "2013-06-02 22:14:41.000000",
"current_ts": "2015-09-18T10:17:49.880000",
"pos": "00000000000000002891",
"primary_keys": ["CUST_CODE", "ORDER_DATE", "PRODUCT_CODE", "ORDER_ID"], "tokens":
{"R": "AADPkvAAEAAEqLzAAA"},
"before": {
"CUST_CODE": "BILL",
"CUST_CODE_isMissing": false,
"ORDER_DATE": "1995-12-31:15:00:00",
"ORDER_DATE_isMissing": false,
"PRODUCT_CODE": "CAR",
"PRODUCT_CODE_isMissing": false,
"ORDER_ID": "765",
"ORDER_ID_isMissing": false,
"PRODUCT_PRICE": 15000.0,
"PRODUCT_PRICE_isMissing": false,
"PRODUCT_AMOUNT": 3.0,
"PRODUCT_AMOUNT_isMissing": false,
"TRANSACTION_ID": "100",
"TRANSACTION_ID_isMissing": false},
"after": {
"CUST_CODE": "BILL",
"CUST_CODE_isMissing": false,
"ORDER_DATE": "1995-12-31:15:00:00",
"ORDER_DATE_isMissing": false,
"PRODUCT_CODE": "CAR",
"PRODUCT_CODE_isMissing": false,
"ORDER_ID": "765",
"ORDER_ID_isMissing": false,
"PRODUCT_PRICE": 14000.0,
"PRODUCT_PRICE_isMissing": false,
"PRODUCT_AMOUNT": 3.0,
"PRODUCT_AMOUNT_isMissing": false,
"TRANSACTION_ID": "100",
"TRANSACTION_ID_isMissing": false}}

6.5.2.3 削除メッセージの例

{"table": "GG.TCUSTORD",
"op_type": "D",
"op_ts": "2013-06-02 22:14:41.000000",
"current_ts": "2015-09-18T10:17:49.899000",
"pos": "00000000000000004338",
"primary_keys": ["CUST_CODE", "ORDER_DATE", "PRODUCT_CODE", "ORDER_ID"], "tokens":
{"L": "206080450", "6": "9.0.80330", "R": "AADPkvAAEAAEqLzAAC"}, "before": {
"CUST_CODE": "DAVE",
"CUST_CODE_isMissing": false,
"ORDER_DATE": "1993-11-03:07:51:35",
"ORDER_DATE_isMissing": false,
"PRODUCT_CODE": "PLANE",
"PRODUCT_CODE_isMissing": false,
"ORDER_ID": "600",
"ORDER_ID_isMissing": false,
"PRODUCT_PRICE": null,
"PRODUCT_PRICE_isMissing": true,
"PRODUCT_AMOUNT": null,
"PRODUCT_AMOUNT_isMissing": true,
"TRANSACTION_ID": null,
"TRANSACTION_ID_isMissing": true},
"after": null}

6.5.2.4 切捨てメッセージの例

{"table": "GG.TCUSTORD",
"op_type": "T",
"op_ts": "2013-06-02 22:14:41.000000",
"current_ts": "2015-09-18T10:17:49.900000",
"pos": "00000000000000004515",
"primary_keys": ["CUST_CODE", "ORDER_DATE", "PRODUCT_CODE", "ORDER_ID"], "tokens":
{"R": "AADPkvAAEAAEqL2AAB"},
"before": null,
"after": null}

6.5.3 Avroスキーマ

AvroスキーマはJSONとして表されます。Avroスキーマは、生成されるAvroメッセージの形式を定義し、Avroメッセージのシリアライズとデシリアライズに必要です。Avroスキーマは、表に対する操作が発生した時点でJIT (ジャスト・イン・タイム)方式で生成されます。Avroスキーマは表定義に固有であり、処理される操作で発生する表ごとに個別のAvroスキーマが生成されます。Avroスキーマは、デフォルトではGoldenGate_Home/dirdefディレクトリに書き込まれますが、書き込む場所は設定を変更できます。Avroスキーマのファイル名は、FullyQualifiedTableName.avscという命名規則に従いますが、書き込む場所は設定変更が可能です。Avroスキーマのファイル名は、次の命名規則に従います。

前述の参照例に示したAvro操作フォーマッタのAvroスキーマは、次のとおりです。

{
"type" : "record",
"name" : "TCUSTORD",
"namespace" : "GG",
"fields" : [ {
"name" : "table",
"type" : "string"
}, {
"name" : "op_type",
"type" : "string"
}, {
"name" : "op_ts",
"type" : "string"
}, {
"name" : "current_ts",
"type" : "string"
}, {
"name" : "pos",
"type" : "string"
}, {
"name" : "primary_keys",
"type" : {
"type" : "array",
"items" : "string"
}
}, {
"name" : "tokens",
"type" : {
"type" : "map",
"values" : "string"
},
"default" : { }
}, {
"name" : "before",
"type" : [ "null", {
"type" : "record",
"name" : "columns",
"fields" : [ {
"name" : "CUST_CODE",
"type" : [ "null", "string" ],
"default" : null
}, {
"name" : "CUST_CODE_isMissing",
"type" : "boolean"
}, {
"name" : "ORDER_DATE",
"type" : [ "null", "string" ],
"default" : null
}, {
"name" : "ORDER_DATE_isMissing",
"type" : "boolean"
}, {
"name" : "PRODUCT_CODE",
"type" : [ "null", "string" ],
"default" : null
}, {
"name" : "PRODUCT_CODE_isMissing",
"type" : "boolean"
}, {
"name" : "ORDER_ID",
"type" : [ "null", "string" ],
"default" : null
}, {
"name" : "ORDER_ID_isMissing",
"type" : "boolean"
}, {
"name" : "PRODUCT_PRICE",
"type" : [ "null", "double" ],
"default" : null
}, {
"name" : "PRODUCT_PRICE_isMissing",
"type" : "boolean"
}, {
"name" : "PRODUCT_AMOUNT",
"type" : [ "null", "double" ],
"default" : null
}, {
"name" : "PRODUCT_AMOUNT_isMissing",
"type" : "boolean"
}, {
"name" : "TRANSACTION_ID",
"type" : [ "null", "string" ],
"default" : null
}, {
"name" : "TRANSACTION_ID_isMissing",
"type" : "boolean"
} ]
} ],
"default" : null
}, {
"name" : "after",
"type" : [ "null", "columns" ],
"default" : null
} ]
}

6.5.4 Avro操作フォーマッタの構成

表6-9 構成オプション

プロパティ

オプション[Y/N]

有効な値

デフォルト

説明

gg.handler.name.format.insertOpKey

オプション

任意の文字列

I

出力レコードに挿入され、挿入操作を示す指標です

gg.handler.name.format.updateOpKey

オプション

任意の文字列

U

出力レコードに挿入され、更新操作を示す指標です。

gg.handler.name.format.deleteOpKey

オプション

任意の文字列

D

出力レコードに挿入され、削除操作を示す指標です。

gg.handler.name.format.truncateOpKey

オプション

任意の文字列

T

出力レコードに挿入され、切捨て操作を示す指標です。

gg.handler.name.format.encoding

オプション

Javaでサポートされる任意の有効なエンコーディング名または別名

UTF-8 (JSONのデフォルト)

JSONとして生成されるAvroスキーマの出力のエンコーディングを制御します。JSONのデフォルトはUTF-8です。Avroメッセージはバイナリで、独自の内部形式でエンコーディングをサポートしています。

gg.handler.name.format.treatAllColumnsAsStrings

オプション

true | false

false

生成されるAvroメッセージの出力の型付けを制御します。falseに設定すると、フォーマッタはOracle GoldenGateの型を、対応するAVROの型にマップしようと試みます。trueに設定すると、すべてのデータは生成されるAvroメッセージとスキーマで文字列として扱われます。

gg.handler.name.format.lineDelimiter

オプション

任意の文字列

値なし

オプションで、ユーザーが各Avroメッセージの後に区切り文字を挿入できます。これはベスト・プラクティスとは言えませんが、ユースケースによっては、ユーザーが他のストリームを解析し、個々のAvroメッセージをストリームから抽出したい場合があるかもしれません。このプロパティを使用すると、そうしたオプションをユーザーが実行できます。Avroメッセージには出現しそうにない一意の区切り文字を選択してください。このプロパティはCDATA[]ラッピングをサポートします。

gg.handler.name.format.schemaDirectory

オプション

有効で存在する人気のファイル・システム・パス

./dirdef

生成されるAvroスキーマの出力場所を制御します。

gg.handler.name.format.wrapMessageInGenericAvroSchema

オプション

true|false

false

汎用のAvroラッパー・メッセージで、ソース証跡ファイルからの操作に対してAvroメッセージをラップする機能を提供します。詳細は、「汎用のラッパー機能」を参照してください。

gg.handler.name.format.iso8601Format

オプション

true | false

true

現在のタイムスタンプの形式を制御します。デフォルトはISO 8601形式です。falseに設定すると、現在のタイムスタンプの日付と時刻の間の"T"が削除され、かわりに" "が出力されます。

6.5.5 サンプル構成

Javaアダプタproperg.handlertiesファイルからのAvro操作フォーマッタの構成例を次に示します。

gg.hdfs.format=avro_row
gg.handler.hdfs.format.insertOpKey=I
gg.handler.hdfs.format.updateOpKey=U
gg.handler.hdfs.format.deleteOpKey=D
gg.handler.hdfs.format.truncateOpKey=T
gg.handler.hdfs.format.encoding=UTF-8
gg.handler.hafs.format.wrapMessageInGenericAvroMessage=false

6.5.6 メタデータ変更イベント

Avro操作フォーマッタは、メタデータ変更イベントが発生したときにアクションを実行できます。このとき、複製されるデータベースとアップストリームのOracle GoldenGateレプリケーション・プロセスでメタデータ変更イベントが伝播されると想定されています。Avroメッセージは対応するスキーマに緊密に依存しているため、Avroを使用してフォーマットするときには特にメタデータ変更イベントが重要です。メタデータ変更イベントは、Avro操作フォーマッタによってシームレスに処理され、更新されたAvroスキーマは、メタデータ変更イベント後にその表の操作が最初に発生したときに生成されます。メタデータ変更イベントの影響を理解して、ダウンストリーム・ターゲットを新しいAvroスキーマに変更する必要があります。AvroメッセージがAvroスキーマに密に依存している場合、互換性の問題が生じることがあります。スキーマ変更の前に生成されるAvroメッセージを、新たに生成されたAvroスキーマでデシリアライズすることはできません。逆に、スキーマ変更の後で生成されるAvroメッセージを、前に生成されたAvroスキーマでデシリアライズすることもできません。ベスト・プラクティスとして、メッセージの生成に使用されたのと同じバージョンのAvroスキーマを使用するようにしてください。詳細は、Apache Avroのドキュメントを参照してください。

6.5.7 特別な考慮事項

この項では、特別な考慮事項について説明します。

6.5.7.1 トラブルシューティング

Avroはバイナリ形式なので、人間が読める形式ではありません。Avroメッセージはバイナリ形式なので、問題が発生した場合にデバッグが容易ではありません。log4j Javaロギング・レベルをTRACEに設定すると、作成されるAvroメッセージがデシリアライズされ、ログ・ファイルにJSONオブジェクトとして示されます。これで、作成されたAvroメッセージの構造と内容を見られるようになります。TRACEは、パフォーマンスに大きい影響を及ぼすため、本番環境では有効にしないでください。

6.5.7.2 主キーの更新

Avro操作フォーマッタは、更新操作の操作前と操作後の完全なイメージを使用してメッセージを作成します。したがって、Avro操作フォーマッタでは、主キーの更新について特別な処理は必要ありません。

6.5.7.3 汎用のラッパー・メッセージ

Avroメッセージは自己記述型ではありません。つまりメッセージの受信者は、メッセージに対応するスキーマのことを知っていないと、メッセージをデシリアライズできません。Avroメッセージはバイナリであり、メッセージの内容を調べてメッセージ・タイプを確定する一貫した、または信頼できる方法はありません。したがって、Kafkaのような1つのデータ・ストリームにメッセージをインタレースするときに、Avroは特に厄介です。

Avroフォーマッタには、汎用のAvroメッセージでAvroメッセージをラップする特別な機能があります。この機能を有効にするには、次の構成パラメータを設定します。

gg.handler.name.format.wrapMessageInGenericAvroMessage=true

汎用のメッセージとは、出力されるAvroメッセージすべてに共通するAvroペイロード・メッセージをラップするAvroメッセージです。汎用メッセージのスキーマは、generic_wrapper.avscという名前で、出力スキーマ・ディレクトリに書き込まれます。このメッセージには、次の3つのフィールドがあります。

- table_name - 完全修飾のソース表名。

- schema_hash - メッセージを生成するAvroスキーマのハッシュ・コード。

- payload - ラップされるAvroメッセージ。

Avroフォーマッタの汎用ラッパー・スキーマは、次のとおりです。

{
"type" : "record",
"name" : "generic_wrapper",
"namespace" : "oracle.goldengate",
"fields" : [ {
"name" : "table_name",
"type" : "string"
}, {
"name" : "schema_hash",
"type" : "int"
}, {
"name" : "payload",
"type" : "bytes"
} ]
}
]
}

6.6 Avroオブジェクト・コンテナ・ファイル・フォーマッタ

Oracle GoldenGate for Big Dataは、Avroオブジェクト・コンテナ・ファイル(OCF)形式でHDFSに書き込むことができます。HDFSにフォーマットするデータにはAvro OCFを使用するのが最適です。Avro OCFはスキーマ展開を他の形式よりも効率的に処理します。Avro OCFフォーマッタでも圧縮および圧縮解除がサポートされ、ディスク領域がより効率的に使用できます。

HDFSハンドラの特殊なユースケースとして、HDFSハンドラをAvroフォーマッタに統合して、Avro OCF形式でHDFSにファイルを書き込むことができます。Avro OCF形式は、HiveでAvroデータをHDFSを読込み可能にするために必要です。Avro OCF形式の詳細は、Avro仕様に記載されています。

http://avro.apache.org/docs/current/spec.html#Object+Container+Files

もう1つの重要な機能は、データをAvro OCF形式でストリーミングし、Hiveで表定義を生成して、メタデータの変更イベントが生じた場合は表定義を更新するようHDFSを構成できることです。

6.6.1 Avro OCFフォーマッタの構成

パラメータ

オプション/必須

有効な値

デフォルト

説明

gg.handler.name.format.insertOpKey

オプション

任意の文字列

I

出力レコードに挿入され、挿入操作を示す指標です。

gg.handler.name.format.updateOpKey

オプション

任意の文字列

U

出力レコードに挿入され、更新操作を示す指標です。

gg.handler.name.format.truncateOpKey

オプション

任意の文字列

T

出力レコードに切り捨てられ、切捨て操作を示す指標です。

gg.handler.name.format.deleteOpKey

オプション

任意の文字列

D

出力レコードに挿入され、切捨て操作を示す指標です。

gg.handler.name.format.encoding

オプション

Javaでサポートされる任意の有効なエンコーディング名または別名。

UTF-8

JSONとして生成されるAvroスキーマの出力のエンコーディングを制御します。JSONのデフォルトはUTF-8です。Avroメッセージはバイナリで、独自の内部形式でエンコーディングをサポートしています。

gg.handler.name.format.treatAllColumnsAsStrings

オプション

true | false

false

生成されるAvroメッセージの出力の型付けを制御します。falseに設定すると、フォーマッタはOracle GoldenGateの型を、対応するAVROの型にマップしようと試みます。trueに設定すると、すべてのデータは生成されるAvroメッセージとスキーマで文字列として扱われます。

gg.handler.name.format.pkUpdateHandling

オプション

abend | update | delete-insert

abend

フォーマッタが、主キーを変更する更新操作をどのように処理するかを制御します。主キーを操作するとAvro行フォーマッタで問題が起きることがあるので、ユーザーは特に慎重を期する必要があります。

- abend - プロセスが異常終了することを示します

- update - プロセスでこれが通常の更新として扱われることを示します

- delete-insert - プロセスでこれが削除および挿入として扱われることを示します。この機能が正常に動作するためには、完全な操作前イメージが必要です。そのためには、Oracleで完全なサプリメンタル・ロギングを使用します。操作前と操作後の完全な行イメージがない場合、挿入データは不完全になります。

gg.handler.name.format.generateSchema

オプション

true | false

true

Avroのシリアライズのためにスキーマを生成する必要があるため、このプロパティをfalseに設定して、ローカル・ファイル・システムへの生成されたスキーマの書き込みを抑止できます。

gg.handler.name.format.schemaDirectory

オプション

有効で存在する人気のファイル・システム・パス

./dirdef

ローカル・ファイル・システムに対する生成されたAvroスキーマの出力先を制御します。このプロパティは、Avroスキーマが書き込まれるHDFSの場所を制御しません。この場所はHDFSハンドラ・プロパティで制御されます。

gg.handler.name.format.iso8601Format

オプション

true | false

true

現在のタイムスタンプのデフォルト形式はISO8601です。falseに設定すると、現在のタイムスタンプの日付と時刻の間の"T"が削除され、かわりにスペースが出力されます。

gg.handler.name.format.versionSchemas

オプション

true | false

false

trueに設定すると、Avroスキーマがスキーマ・ディレクトリに作成されて、タイムスタンプでバージョン管理されます。スキーマの形式は、次のとおりです。

{fully qualified table name}_{time stamp}.avsc

6.7 XMLフォーマッタ

XMLフォーマッタは、ソース証跡ファイルから、操作データをJSONオブジェクトとしてフォーマットします。XMLフォーマッタは、その操作前と操作後のイメージ・データを取得して、データをXMLドキュメント形式の操作データにフォーマットします。XMLドキュメントの形式は、これまでのリリースのOracle GoldenGate Java Adapter製品におけるXML形式と、実質的に同じです。

6.7.1 メッセージのフォーマットの詳細

XMLでフォーマットされたメッセージには、次の情報が含まれます。

表6-10 XMLフォーマットの詳細

値

説明

table

完全修飾の表名。

type

操作タイプ

current_ts

現在のタイムスタンプは、フォーマッタが現在の操作レコードを処理した時刻です。このタイムスタンプはISO-8601形式に従い、精度はミリ秒までです。証跡ファイルを再生しても、同じ操作に対して同じタイムスタンプにはなりません。

pos

ソース証跡ファイルからのポジション。

numCols

ソース表の列の合計数。

col

col要素は、操作データの操作前と操作後のイメージを含む反復要素です。

tokens

トークンは、ソース証跡ファイルからのトークン値を含む要素です。

6.7.2 XMLメッセージの例

この項では、XMLメッセージの例を示します。

6.7.2.1 挿入メッセージの例

<?xml version='1.0' encoding='UTF-8'?>
<operation table='GG.TCUSTORD' type='I' ts='2013-06-02 22:14:36.000000' current_ts='2015-10-06T12:21:50.100001' pos='00000000000000001444' numCols='7'>
<col name='CUST_CODE' index='0'>
<before missing='true'/>
<after><![CDATA[WILL]]></after>
</col>
<col name='ORDER_DATE' index='1'>
<before missing='true'/>
<after><![CDATA[1994-09-30:15:33:00]]></after>
</col>
<col name='PRODUCT_CODE' index='2'>
<before missing='true'/>
<after><![CDATA[CAR]]></after>
</col>
<col name='ORDER_ID' index='3'>
<before missing='true'/>
<after><![CDATA[144]]></after>
</col>
<col name='PRODUCT_PRICE' index='4'>
<before missing='true'/>
<after><![CDATA[17520.00]]></after>
</col>
<col name='PRODUCT_AMOUNT' index='5'>
<before missing='true'/>
<after><![CDATA[3]]></after>
</col>
<col name='TRANSACTION_ID' index='6'>
<before missing='true'/>
<after><![CDATA[100]]></after>
</col>
<tokens>
<token>
<Name><![CDATA[R]]></Name>
<Value><![CDATA[AADPkvAAEAAEqL2AAA]]></Value>
</token>
</tokens>
</operation>

6.7.2.2 更新メッセージの例

<?xml version='1.0' encoding='UTF-8'?>
<operation table='GG.TCUSTORD' type='U' ts='2013-06-02 22:14:41.000000' current_ts='2015-10-06T12:21:50.413000' pos='00000000000000002891' numCols='7'>
<col name='CUST_CODE' index='0'>
<before><![CDATA[BILL]]></before>
<after><![CDATA[BILL]]></after>
</col>
<col name='ORDER_DATE' index='1'>
<before><![CDATA[1995-12-31:15:00:00]]></before>
<after><![CDATA[1995-12-31:15:00:00]]></after>
</col>
<col name='PRODUCT_CODE' index='2'>
<before><![CDATA[CAR]]></before>
<after><![CDATA[CAR]]></after>
</col>
<col name='ORDER_ID' index='3'>
<before><![CDATA[765]]></before>
<after><![CDATA[765]]></after>
</col>
<col name='PRODUCT_PRICE' index='4'>
<before><![CDATA[15000.00]]></before>
<after><![CDATA[14000.00]]></after>
</col>
<col name='PRODUCT_AMOUNT' index='5'>
<before><![CDATA[3]]></before>
<after><![CDATA[3]]></after>
</col>
<col name='TRANSACTION_ID' index='6'>
<before><![CDATA[100]]></before>
<after><![CDATA[100]]></after>
</col>
<tokens>
<token>
<Name><![CDATA[R]]></Name>
<Value><![CDATA[AADPkvAAEAAEqLzAAA]]></Value>
</token>
</tokens>
</operation>

6.7.2.3 削除メッセージの例

<?xml version='1.0' encoding='UTF-8'?>
<operation table='GG.TCUSTORD' type='D' ts='2013-06-02 22:14:41.000000' current_ts='2015-10-06T12:21:50.415000' pos='00000000000000004338' numCols='7'>
<col name='CUST_CODE' index='0'>
<before><![CDATA[DAVE]]></before>
<after missing='true'/>
</col>
<col name='ORDER_DATE' index='1'>
<before><![CDATA[1993-11-03:07:51:35]]></before>
<after missing='true'/>
</col>
<col name='PRODUCT_CODE' index='2'>
<before><![CDATA[PLANE]]></before>
<after missing='true'/>
</col>
<col name='ORDER_ID' index='3'>
<before><![CDATA[600]]></before>
<after missing='true'/>
</col>
<col name='PRODUCT_PRICE' index='4'>
<missing/>
</col>
<col name='PRODUCT_AMOUNT' index='5'>
<missing/>
</col>
<col name='TRANSACTION_ID' index='6'>
<missing/>
</col>
<tokens>
<token>
<Name><![CDATA[L]]></Name>
<Value><![CDATA[206080450]]></Value>
</token>
<token>
<Name><![CDATA[6]]></Name>
<Value><![CDATA[9.0.80330]]></Value>
</token>
<token>
<Name><![CDATA[R]]></Name>
<Value><![CDATA[AADPkvAAEAAEqLzAAC]]></Value>
</token>
</tokens>
</operation>

6.7.2.4 切捨てメッセージの例

<?xml version='1.0' encoding='UTF-8'?>
<operation table='GG.TCUSTORD' type='T' ts='2013-06-02 22:14:41.000000' current_ts='2015-10-06T12:21:50.415001' pos='00000000000000004515' numCols='7'>
<col name='CUST_CODE' index='0'>
<missing/>
</col>
<col name='ORDER_DATE' index='1'>
<missing/>
</col>
<col name='PRODUCT_CODE' index='2'>
<missing/>
</col>
<col name='ORDER_ID' index='3'>
<missing/>
</col>
<col name='PRODUCT_PRICE' index='4'>
<missing/>
</col>
<col name='PRODUCT_AMOUNT' index='5'>
<missing/>
</col>
<col name='TRANSACTION_ID' index='6'>
<missing/>
</col>
<tokens>
<token>
<Name><![CDATA[R]]></Name>
<Value><![CDATA[AADPkvAAEAAEqL2AAB]]></Value>
</token>
</tokens>
</operation>

6.7.3 XMLスキーマ

XMLスキーマ(XSD)は、XSDフォーマッタの機能の一部として生成されません。XSDは、XMLフォーマッタによって生成される任意またはすべてのメッセージに汎用です。生成されるXMLドキュメントの構造を定義するXSDが、次のように定義されています。

<xs:schema attributeFormDefault="unqualified"
elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="operation">
<xs:complexType>
<xs:sequence>
<xs:element name="col" maxOccurs="unbounded" minOccurs="0">
<xs:complexType>
<xs:sequence>
<xs:element name="before" minOccurs="0">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute type="xs:string" name="missing"
use="optional"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
<xs:element name="after" minOccurs="0">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute type="xs:string" name="missing"
use="optional"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
<xs:element type="xs:string" name="missing" minOccurs="0"/>
</xs:sequence>
<xs:attribute type="xs:string" name="name"/>
<xs:attribute type="xs:short" name="index"/>
</xs:complexType>
</xs:element>
<xs:element name="tokens" minOccurs="0">
<xs:complexType>
<xs:sequence>
<xs:element name="token" maxOccurs="unbounded" minOccurs="0">
<xs:complexType>
<xs:sequence>
<xs:element type="xs:string" name="Name"/>
<xs:element type="xs:string" name="Value"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:attribute type="xs:string" name="table"/>
<xs:attribute type="xs:string" name="type"/>
<xs:attribute type="xs:string" name="ts"/>
<xs:attribute type="xs:dateTime" name="current_ts"/>
<xs:attribute type="xs:long" name="pos"/>
<xs:attribute type="xs:short" name="numCols"/>
</xs:complexType>
</xs:element>
</xs:schema>

6.7.4 XML構成

表6-11 構成オプション

パラメータ

オプション[Y/N]

有効な値

デフォルト

説明

gg.handler.name.format.insertOpKey

オプション

任意の文字列

I

出力レコードに挿入され、挿入操作を示す指標です。

gg.handler.name.format.updateOpKey

オプション

任意の文字列

U

出力レコードに挿入され、更新操作を示す指標です。

gg.handler.name.format.deleteOpKey

オプション

任意の文字列

D

出力レコードに挿入され、削除操作を示す指標です。

gg.handler.name.format.truncateOpKey

オプション

任意の文字列

T

出力レコードに挿入され、切捨て操作を示す指標です。

gg.handler.name.format.encoding

オプション

Javaでサポートされる任意の有効なエンコーディング名または別名。

UTF-8 (XMLのデフォルト)

生成されるXMLドキュメントの出力のエンコーディングを制御します。

gg.handler.name.format.includeProlog

オプション

true | false

false

生成されるXMLドキュメントのXML prologの出力を制御します。XML prologは、整形式のXMLではオプションです。サンプルのXML prologは、<?xml version='1.0' encoding='UTF-8'?>などのようになります

gg.handler.name.format.iso8601Format

オプション

true | false

true

XMLメッセージの現在のタイムスタンプの形式を制御します。falseに設定すると、日付と時刻の間に"T"は表示されず、かわりに空白が出力されます。

6.7.5 サンプル構成

Javaアダプタ・プロパティ・ファイルからのXMLフォーマッタの構成例を次に示します。

gg.handler.hdfs.format=xml
gg.handler.hdfs.format.insertOpKey=I
gg.handler.hdfs.format.updateOpKey=U
gg.handler.hdfs.format.deleteOpKey=D
gg.handler.hdfs.format.truncateOpKey=T
gg.handler.hdfs.format.encoding=ISO-8859-1
gg.handler.hdfs.format.includeProlog=false

6.7.6 メタデータ変更イベント

XMLフォーマッタは、メタデータ変更イベントをシームレスに処理します。XMLドキュメントは、メタデータ変更イベントがあってもXMLスキーマが変更されないような形式です。XMLスキーマは汎用として設計されているので、同じスキーマが任意の表の操作を表します。

XMLフォーマッタは、メタデータ変更イベントが発生したときにアクションを実行できます。このとき、複製されるデータベースとアップストリームのOracle GoldenGateレプリケーション・プロセスでメタデータ変更イベントが伝播されると想定されています。XMLドキュメントは、メタデータ変更イベントがあってもXMLスキーマが変更されないような形式です。XMLスキーマは汎用なので、同じスキーマが任意の表の操作を表します。メタデータで生じる変更は、メタデータ変更イベント後にメッセージに反映されます。たとえば列を追加する場合、新しい列と列データは、メタデータ変更イベントの後に、その表のXMLメッセージに表示され始めます。

6.7.7 主キーの更新

主キーを更新する際、XMLフォーマッタによる特別な処理は必要ありません。XMLフォーマッタは、データベース操作をモデル化するメッセージを作成します。更新操作の場合、これには列値の操作前と操作後のイメージが含まれます。主キーの変更は、他の列値を変更する場合とまったく同じように、列値に対する変更としてこの形式で表されるだけです

7 メタデータ・プロバイダの使用

この章では、メタデータ・プロバイダの機能と、メタデータ・プロバイダの各タイプについて説明し、その機能の理解に役立つ例も示します。

この章の内容は次のとおりです。

- Avroメタデータ・プロバイダ

- Hiveメタデータ・プロバイダ

ハンドラがReplicatプロセスで実行されるように構成されている場合にのみ有効です。

Replicatプロセスには、Replicat構成ファイルの構文を使用して、ソース表からターゲット表へ、およびソース列からターゲット列へのマッピングを実行する機能があります。このマッピング構文は、Oracle GoldenGate Replicatのドキュメンテーションに含まれるドキュメントに記載されています。ソース・メタデータ定義は、Oracle GoldenGateの証跡ファイルに含まれています(または、12.2より古いOracle GoldenGateではソース定義ファイルによって)。レプリケーション・ターゲットがデータベースの場合、Replicatプロセスはターゲット・メタデータ定義をターゲット・データベースから取得します。しかし、これはビッグ・データ・アプリケーションや一般的なJava Deliveryにデータをプッシュする場合には不利です。ビッグ・データ・アプリケーションは一般的に、ターゲット・メタデータを提供しないため、Replicatのマッピングは実行できません。この欠点に対処するのが、メタデータ・プロバイダです。メタデータ・プロバイダを使用すると、AvroまたはHiveを使用してターゲット・メタデータを定義でき、続いてソース表からターゲット表へ、およびソース列からターゲット列へのReplicatマッピングが可能になります。メタデータ・プロバイダ使用は必須ではありません。ソースのOracle GoldenGate証跡ファイルに含まれるメタデータを出力に利用できる場合、メタデータ・プロバイダは使用しないでください。メタデータ・プロバイダは、次の場合に使用する必要があります。

- ソース表名を、一致しないターゲット表名にマッピングする必要があります。

- ソース列名を、一致しないターゲット列名にマッピングする必要があります。

- ソース証跡ファイルからの特定の列を含め、それ以外の列を除外する必要があります。

Replicatマッピングには、Replicat構成ファイルで定義されているマッピングが静的であるという一般的な制限があります。Oracle GoldenGate 12.2には、ソースとしてOracleデータベースを使用するとき、DDL伝播の機能があります。したがって、メタデータ・プロバイダとReplicatマッピングを使用する際には、スキーマ展開の適切な処理が問題になることがあります。ユーザーは、スキーマ展開の特別なユースケースを考慮したうえで、必要な変更のためにメタデータ・プロバイダとReplicatマッピング構文をどのように更新するかを計画する必要があります。

COLMAPを使用してREPLICATでマップされる表ごとに、構成されたメタデータ・プロバイダからメタデータが取得され、そのメタデータがREPLICATによって列マッピング機能のために使用されます。

ユーザーは、1つのメタデータ・プロバイダ実装の構成を選択できます。現在は、HiveおよびAvroのメタデータ・プロバイダがサポートされています。HiveおよびAvroのメタデータ・プロバイダの構成については、次の項以降で説明します。

メタデータ・プロバイダはオプションであり、有効にするにはJavaアダプタ・プロパティ・ファイルでgg.mdp.typeを指定します。

シナリオ - いつメタデータ・プロバイダを使用するか

1. 次のシナリオでは、メタデータ・プロバイダの構成は必要ありません。
GGという名前のソース・スキーマが、GGADPという名前のターゲット・スキーマにマップされるスキーマ名のマッピング。*

GG.TCUSTMERというスキーマが、GGADP.TCUSTMER_NEWという表名にマップされるスキーマと表名のマッピング。

MAP GG.*, TARGET GGADP.*;
(OR)
MAP GG.TCUSTMER, TARGET GG_ADP.TCUSTMER_NEW;

2. 次のシナリオでは、メタデータ・プロバイダの構成が必要です。
ソース列名がターゲット列名に一致しない列名のマッピング。たとえば、ソース列CUST_CODEは、ターゲット列CUST_CODE_NEWにマップします

MAP GG.TCUSTMER, TARGET GG_ADP.TCUSTMER_NEW, COLMAP(USEDEFAULTS, CUST_CODE_NEW=CUST_CODE, CITY2=CITY);

7.1 Avroメタデータ・プロバイダ

Avroメタデータ・プロバイダは、Avroスキーマ・ファイルから表メタデータを取得する際に使用します。COLMAPを使用してREPLICATでマップされる表ごとに、Avroスキーマからメタデータが取得され、そのメタデータがREPLICATによって列マッピングのために使用されます。

この項の内容は次のとおりです。

- 詳細な機能

- 実行時の前提条件

- クラスパス構成

- Avroメタデータ・プロバイダの構成

- サンプル構成

- メタデータ変更イベント

- 制限事項

- トラブルシューティング

7.1.1 詳細な機能

Avroメタデータ・プロバイダは、Avroスキーマ定義ファイルを使用してメタデータを使用します。AvroスキーマはJSONを使用して定義されます。Replicat.prmファイルでマップされる表ごとに、対応するAvroスキーマ定義ファイルを作成する必要があります。Avroスキーマの定義の詳細は、次のページを参照してください。

http://avro.apache.org/docs/current/gettingstartedjava.html#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メタデータ・プロバイダによってアクセスされる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

Avroデータ型の詳細は、https://avro.apache.org/docs/1.7.5/spec.html#schema_primitiveを参照してください。

7.1.2 実行時の前提条件

Avroスキーマ定義は、Replicatプロセスを開始する前に、Replicatのパラメータ・ファイルでマップされるすべての表について作成する必要があります。

7.1.3 クラスパス構成

Avroメタデータ・プロバイダに、追加のクラスパス設定は必要ありません。

7.1.4 Avroメタデータ・プロバイダの構成

この項では、Oracle GoldenGate Avroメタデータ・プロバイダの構成プロパティについて詳細に説明します

プロパティ

必須/オプション

有効な値

デフォルト

説明

gg.mdp.type

必須

avro

-

Avroメタデータ・プロバイダを選択します

gg.mdp.schemaFilesPath

必須

有効な値の例は、/home/user/ggadp/avroschema/

-

Avroスキーマ・ファイルのディレクトリのパス

gg.mdp.charset

オプション

有効なキャラクタ・セット

UTF-8

文字データ型で列のキャラクタ・セットを指定します。これは、ソース・データを証跡ファイルから正しいターゲットのキャラクタ・セットに変換します。

gg.mdp.nationalCharset

オプション

有効なキャラクタ・セット

UTF-8

文字データ型で列のキャラクタ・セットを指定します。これは、ソース・データを証跡ファイルから正しいターゲットのキャラクタ・セットに変換します。

例: Oracle Databaseの場合、NCHARやNVARCHARなどの列のキャラクタ・セットを指定します。

7.1.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)に、それぞれマップします。

Replicat .prmファイルでのマッピングは、次のとおりです。

MAP GG.TCUSTMER, TARGET GG_AVRO.TCUSTMER_AVRO, COLMAP(USEDEFAULTS, CUST_CODE2=CUST_CODE, CITY2=CITY);

Mapping definition in this example:
1.Source schema GG is mapped to target schema GG_AVRO
2.Source column CUST_CODE is mapped to target column CUST_CODE2
3.Source column CITY is mapped to target column CITY2
4.USEDEFAULTS specifies that rest of the columns names are same on both source and target (NAME and STATE columns).

上の例の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

7.1.6 メタデータ変更イベント

ソース・データベース表でDDL変更がある場合、Avroスキーマ定義と、Replicat構成ファイルでのマッピングは、変更が必要な場合があります。メタデータ変更イベントがあった場合には、Replicatプロセスを中止または一時停止したいこともあります。Replicatプロセスは、Replicat構成ファイル(.prmファイル)に次の指定を追加すると中止できます。

DDL INCLUDE ALL, EVENTACTIONS (ABORT)

あるいは、レプリケーション構成ファイル(.prmファイル)に次の指定を追加すると一時停止できます。

DDL INCLUDE ALL, EVENTACTIONS (SUSPEND)

7.1.7 制限

Avroのbyteデータ型は、主キーとして使用できません。

Replicat構成ファイルに定義されているソースからターゲットへのマッピングは静的です。Oracle GoldenGate 12.2は、Oracleデータベースがレプリケーション・ソースの場合に、DDL伝播とソース・スキーマ展開をサポートします。ただし、Replicat構成ファイルで構成されるマッピングは静的なため、ソース・スキーマの展開が問題になる場合もあります。

7.1.8 トラブルシューティング

この項の内容は次のとおりです。

- 無効なスキーマ・ファイルの場所

- 無効なスキーマ・ファイル名

- スキーマ・ファイルでの無効なネームスペース

- スキーマ・ファイルでの無効な表名

7.1.8.1 無効なスキーマ・ファイルの場所

構成プロパティgg.mdp.schemaFilesPathで指定するAvroスキーマ・ファイル・ディレクトリの場所は、有効なディレクトリである必要があります。gg.mdp.schemaFilesPathプロパティで有効なディレクトリを構成しない場合、次の例外が発生します。

oracle.goldengate.util.ConfigException: Error initializing Avro metadata provider
Specified schema location does not exist. {/path/to/schema/files/dir}

7.1.8.2 無効なスキーマ・ファイル名

Replicat.prmファイルでマップされる表ごとに、対応するAvroスキーマ・ファイルを、gg.mdp.schemaFilesPathで指定されたディレクトリに作成する必要があります。

たとえば、次のシナリオを考えてみます。

マッピング:

MAP GG.TCUSTMER, TARGET GG_AVRO.TCUSTMER_AVRO, COLMAP(USEDEFAULTS, cust_code2=cust_code, CITY2 = CITY);

プロパティ:

gg.mdp.schemaFilesPath=/home/usr/avro/

GG_AVRO.TCUSTMER_AVRO.mdp.avscという名前のファイルを、/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

7.1.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マッピングで指定したターゲット・スキーマ名が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}

7.1.8.4 スキーマ・ファイルでの無効な表名

Replicatマッピングで指定するターゲット表名は、Avroスキーマ定義ファイルでの名前と同じである必要があります。

たとえば、次のシナリオを考えてみます。

マッピング:

MAP GG.TCUSTMER, TARGET GG_AVRO.TCUSTMER_AVRO, COLMAP(USEDEFAULTS, cust_code2 = cust_code, CITY2 = CITY);

Avro Schema Definition:

{
"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}

7.2 Hiveメタデータ・プロバイダ

Hiveメタデータ・プロバイダは、Hiveメタストアから表メタデータを取得する際に使用します。メタデータは、Replicatプロパティ・ファイルでマップされているターゲット表ごとに、COLMAP構文を使用して、Hiveから取得されます。取得されるターゲット・メタデータは、列マッピング機能のためにReplicatで使用されます。

この項の内容は次のとおりです。

- 詳細な機能

- 実行時の前提条件

- クラスパス構成

- Hiveメタデータ・プロバイダの構成

- サンプル構成

- セキュリティ

- メタデータ変更イベント

- 制限事項

- 注意点

- トラブルシューティング

7.2.1 詳細な機能

Hiveメタデータ・プロバイダは、Hive JDBCとHCatalogの両方のインタフェースを使用して、Hiveメタストアからメタデータを取得します。Replicat.prmファイルでマップされる表ごとに、対応する表をHiveで作成する必要があります。

デフォルトのHive構成では、組込み/ローカルのメタストアであるDerbyデータベースが起動します。Apache Derbyは、組込みデータベースとして設計され、単一の接続のみ可能です。Hiveメタストア実装としてDerbyデータベースの接続が1つに制限されているということは、Oracle GoldenGate for Big Data Hiveメタデータ・プロバイダと連携すると機能しないということです。この制限をなくすために、Hiveはリモート・メタストア・データベースを使用するように構成する必要があります。リモート・メタストア・データベースを使用するようにHiveを構成する詳細は、次のサイトを参照してください。

https://cwiki.apache.org/confluence/display/Hive/AdminManual+MetastoreAdmin#AdminManualMetastoreAdmin-RemoteMetastoreDatabase

Hiveは、主キーのセマンティックをサポートしていないため、Hiveメタストアから取得されるメタデータには、主キー定義が含まれません。Hiveメタデータ・プロバイダを使用する場合は、かわりにReplicatのKEYCOLS構成構文を使用して主キーを定義する必要があります。

KEYCOLS

ターゲット・スキーマで主キーを定義するには、Replicatのマーキング構成構文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

Hiveデータ型の詳細は、https://cwiki.apache.org/confluence/display/Hive/LanguageManual+Typesを参照してください。

7.2.2 実行時の前提条件

1. リモート・メタストア・データベースを使用するHiveの構成
リモートHiveメタストアの構成に使用できるサポート対象のデータベースのリストは、https://cwiki.apache.org/confluence/display/Hive/AdminManual+MetastoreAdmin#AdminManualMetastoreAdmin-SupportedBackendDatabasesforMetastoreにあります。次の例では、MySQLデータベースをHiveメタストアとして構成します。Hive構成ファイル${HIVE_HOME}/conf/hive-site.xmlで、次のプロパティを構成します。

注意:

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にあります。

注意:

MySQL JDBCコネクタjarを、次のHiveのクラスパスに追加する必要があります。

a. HIVE_HOME/lib/ディレクトリ内。DB_NAMEは、MySQLで作成されるデータベースの有効な名前に置き換えてください。

b. Hiveサーバーを起動します:
HIVE_HOME/bin/hiveserver2/bin/hiveserver2

c. Hiveリモート・メタストア・サーバーを起動します。
HIVE_HOME/bin/hive --service metastore

7.2.3 クラスパス構成

Oracle GoldenGate for Big Data Hiveメタデータ・プロバイダをHiveに接続して実行するには、gg.classpath構成変数に2つのものを構成する必要があります。1つ目はhive-site.xmlファイル、2つ目はHDFSクライアントjarです。クライアントjarは、Oracle GoldenGate for Big Data Hiveメタデータ・プロバイダが接続するHiveのバージョンと一致する必要があります。

1. 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-site.xmlファイルが/home/user/oggadp/dirprmディレクトリに作成される場合、gg.classpathエントリはgg.classpath=/home/user/oggadp/dirprm/のようになります。

2. 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を、上の例で示したとおり正確に構成します。hive-site.xmlのパスを作成する際には、ワイルドカードを追加しないパスを使用してください。hive-site.xmlファイルのパスにワイルドカード(*)を含めると、選択されなくなります。逆に、依存関係jarのパスを作成する際には、そのディレクトリにあるjarファイルがすべて関連するクラスパスに含まれるように、ワイルドカード(*)を含める必要があります。*.jarは使用しないでください。

7.2.4 Hiveメタデータ・プロバイダの構成

この項では、Hiveメタデータ・プロバイダの構成プロパティについて詳細に説明します。

プロパティ

必須/オプション

有効な値

デフォルト

説明

gg.mdp.type

必須

hive

-

Hiveメタデータ・プロバイダを選択します

gg.mdp.connectionUrl

必須

Kerberos認証を使用せずにフォーマット:

jdbc:hive2://HIVE_SERVER_IP:HIVE_JDBC_PORT/HIVE_DB

Kerberos認証を使用してフォーマット:

jdbc:hive2://HIVE_SERVER_IP:HIVE_JDBC_PORT/HIVE_DB; principal=user/FQDN@MY.REALM

-

HiveサーバーのJDBC接続URL

gg.mdp.driverClassName

必須

org.apache.hive.jdbc.HiveDriver

-

完全修飾のHive JDBCドライバ・クラス名

gg.mdp.userName

オプション

有効なユーザー名

""

Hiveデータベースに接続する際のユーザー名。Kerberos認証を使用する場合、userNameプロパティは必要ありません。接続URLでは、connectionUrlプロパティの有効な値で指定されているKerberosプリンシパルを指定する必要があります。

gg.mdp.password

オプション

有効なパスワード

""

Hiveデータベースに接続する際のパスワード

gg.mdp.charset

オプション

有効なキャラクタ・セット

UTF-8

文字データ型で列のキャラクタ・セットを指定します。これは、ソース・データを証跡ファイルから正しいターゲットのキャラクタ・セットに変換します。

gg.mdp.nationalCharset

オプション

有効なキャラクタ・セット

UTF-8

文字データ型で列のキャラクタ・セットを指定します。これは、ソース・データを証跡ファイルから正しいターゲットのキャラクタ・セットに変換します。

たとえばOracle Databaseの場合、NCHARやNVARCHARなどの列のキャラクタ・セットを指定します。

gg.mdp.authType

オプション

kerberos

none

gg.mdp.kerberosKeytabFile

オプション(authType=kerberosの場合は必須)

Kerberosキータブ・ファイルの相対パスまたは絶対パス

-

キータブ・ファイルを使用すると、Hiveがパスワードにアクセスし、Kerberosセキュリティに対してkinit操作を実行できます。

gg.mdp.kerberosPrincipal

オプション(authType=kerberosの場合は必須)

有効なKerberosプリンシパル名(user/FQDN@MY.REALM)

-

Kerberos認証で用いるKerberosプリンシパル名。

7.2.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)にマップします。

Replicat.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を使用して主キーを指定します。

上の例のHiveにスキーマと表を作成します。

注意:

任意のスキーマ名を選択でき、gg_hive schema名には制限されません。Hiveスキーマは、既存のものでも新規作成してもかまいません。これには、Javaアダプタ・プロパティ・ファイルで接続URL (gg.mdp.connectionUrl)を、Replicat .prmファイルでマッピング構成を、それぞれ変更します。スキーマ名を変更したら、接続URL (gg.mdp.connectionUrl)と、Replicat .prmファイルのマッピングを更新する必要があります。

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

7.2.6 セキュリティ

Hiveサーバーは、Kerberos認証を使用して保護できます。Hiveサーバーの保護方法については、ご使用のHiveリリースのHiveドキュメントを参照してください。Oracle GoldenGate for Big Data 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>

7.2.7 メタデータ変更イベント

ソース・データベース表で変更がある場合、Hiveメタストアの表は、手動で更新/変更/作成する必要があります。メタデータ変更イベントがあった場合には、Replicatプロセスを中止または一時停止したいこともあります。Replicatプロセスは、Replicat構成ファイル(.prmファイル)に次の指定を追加すると中止できます。

DDL INCLUDE ALL, EVENTACTIONS (ABORT)

あるいは、レプリケーション構成ファイル(.prmファイル)に次の指定を追加すると一時停止できます。

DDL INCLUDE ALL, EVENTACTIONS (SUSPEND)

7.2.8 制限

バイナリ・データ型の列は、主キーとして使用できません。

Replicat構成ファイルに定義されているソースからターゲットへのマッピングは静的です。Oracle GoldenGate 12.2は、Oracleデータベースがレプリケーション・ソースの場合に、DDL伝播とソース・スキーマ展開をサポートします。ただし、Replicat構成ファイルで構成されるマッピングは静的なため、ソース・スキーマの展開が問題になる場合もあります。

7.2.9 注意点

特に一般的なのが、Javaクラスパスに関する問題です。Oracle Hiveメタデータ・プロバイダでは、前提条件として、特定のHiveおよびHDFSクライアント・ライブラリをクラスパスで解決する必要があります。

必要なクライアントjarディレクトリは、「クラスパス構成」にリストしてあります。HiveおよびHDFSクライアントjarは、Oracle GoldenGate for Big Data製品に付属しません。クライアントjarは、Hiveメタデータ・プロバイダが接続するHiveのバージョンと一致する必要があります。

Hiveサーバーへの接続を確立するには、クラスパスにhive-site.xmlファイルが存在する必要があります。

7.2.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でGG_HIVE.TCUSTMER_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)

A HBaseハンドラ・クライアント依存性

この付録では、Apache HBaseのHBaseクライアント依存性をリストします。hbase-client-x.x.x.jarは、Apache HBaseと一緒に配布されず、クラスパスで必須でもありません。hbase-client-x.x.x.jarは、HBaseクライアント依存性をすべて集計するための空のmavenプロジェクトです。

- Maven groupId: org.apache.hbase

- Maven atifactId: hbase-client

- Maven version: 各セクションでリストされるHBaseのバージョン番号

A.1 HBaseクライアント依存性

この項では、Hadoop各バージョンのHBaseクライアント依存性をリストします。

- HBase 1.1.1

- HBase 1.0.1.1

A.1.1 HBase 1.1.1

HBase 1.1.1 (HBase 1.1.0.1も実質的に同じです。バージョンが1.1.1となっているライブラリでは、単に1.1.0.1に置き換えてください)

activation-1.1.jar
apacheds-i18n-2.0.0-M15.jar
apacheds-kerberos-codec-2.0.0-M15.jar
api-asn1-api-1.0.0-M20.jar
api-util-1.0.0-M20.jar
avro-1.7.4.jar
commons-beanutils-1.7.0.jar
commons-beanutils-core-1.8.0.jar
commons-cli-1.2.jar
commons-codec-1.9.jar
commons-collections-3.2.1.jar
commons-compress-1.4.1.jar
commons-configuration-1.6.jar
commons-digester-1.8.jar
commons-el-1.0.jar
commons-httpclient-3.1.jar
commons-io-2.4.jar
commons-lang-2.6.jar
commons-logging-1.2.jar
commons-math3-3.1.1.jar
commons-net-3.1.jar
findbugs-annotations-1.3.9-1.jar
guava-12.0.1.jar
hadoop-annotations-2.5.1.jar
hadoop-auth-2.5.1.jar
hadoop-common-2.5.1.jar
hadoop-mapreduce-client-core-2.5.1.jar
hadoop-yarn-api-2.5.1.jar
hadoop-yarn-common-2.5.1.jar
hamcrest-core-1.3.jar
hbase-annotations-1.1.1.jar
hbase-client-1.1.1.jar
hbase-common-1.1.1.jar
hbase-protocol-1.1.1.jar
htrace-core-3.1.0-incubating.jar
httpclient-4.2.5.jar
httpcore-4.2.4.jar
jackson-core-asl-1.9.13.jar
jackson-mapper-asl-1.9.13.jar
jaxb-api-2.2.2.jar
jcodings-1.0.8.jar
jdk.tools-1.7.jar
jetty-util-6.1.26.jar
joni-2.1.2.jar
jsch-0.1.42.jar
jsr305-1.3.9.jar
junit-4.11.jar
log4j-1.2.17.jar
netty-3.6.2.Final.jar
netty-all-4.0.23.Final.jar
paranamer-2.3.jar
protobuf-java-2.5.0.jar
slf4j-api-1.6.1.jar
slf4j-log4j12-1.6.1.jar
snappy-java-1.0.4.1.jar
stax-api-1.0-2.jar
xmlenc-0.52.jar
xz-1.0.jar
zookeeper-3.4.6.jar

A.1.2 HBase 1.0.1.1

activation-1.1.jar
apacheds-i18n-2.0.0-M15.jar
apacheds-kerberos-codec-2.0.0-M15.jar
api-asn1-api-1.0.0-M20.jar
api-util-1.0.0-M20.jar
avro-1.7.4.jar
commons-beanutils-1.7.0.jar
commons-beanutils-core-1.8.0.jar
commons-cli-1.2.jar
commons-codec-1.9.jar
commons-collections-3.2.1.jar
commons-compress-1.4.1.jar
commons-configuration-1.6.jar
commons-digester-1.8.jar
commons-el-1.0.jar
commons-httpclient-3.1.jar
commons-io-2.4.jar
commons-lang-2.6.jar
commons-logging-1.2.jar
commons-math3-3.1.1.jar
commons-net-3.1.jar
findbugs-annotations-1.3.9-1.jar
guava-12.0.1.jar
hadoop-annotations-2.5.1.jar
hadoop-auth-2.5.1.jar
hadoop-common-2.5.1.jar
hadoop-mapreduce-client-core-2.5.1.jar
hadoop-yarn-api-2.5.1.jar
hadoop-yarn-common-2.5.1.jar
hamcrest-core-1.3.jar
hbase-annotations-1.0.1.1.jar
hbase-client-1.0.1.1.jar
hbase-common-1.0.1.1.jar
hbase-protocol-1.0.1.1.jar
htrace-core-3.1.0-incubating.jar
httpclient-4.2.5.jar
httpcore-4.2.4.jar
jackson-core-asl-1.8.8.jar
jackson-mapper-asl-1.8.8.jar
jaxb-api-2.2.2.jar
jcodings-1.0.8.jar
jdk.tools-1.7.jar
jetty-util-6.1.26.jar
joni-2.1.2.jar
jsch-0.1.42.jar
jsr305-1.3.9.jar
junit-4.11.jar
log4j-1.2.17.jar
netty-3.6.2.Final.jar
netty-all-4.0.23.Final.jar
paranamer-2.3.jar
protobuf-java-2.5.0.jar
slf4j-api-1.6.1.jar
slf4j-log4j12-1.6.1.jar
snappy-java-1.0.4.1.jar
stax-api-1.0-2.jar
xmlenc-0.52.jar
xz-1.0.jar
zookeeper-3.4.6.jar

B HDFSハンドラ・クライアント依存性

この付録では、Apache HadoopのHDFSクライアント依存性をリストします。hadoop-client-x.x.x.jarは、Apache Hadoopと一緒に配布されず、クラスパスで必須でもありません。hadoop-client-x.x.x.jarは、Hadoopクライアント依存性をすべて集計するための空のmavenプロジェクトです。

Maven groupId: org.apache.hadoop

Maven atifactId: hadoop-client

Maven version: 各セクションでリストされるHDFSのバージョン番号

B.1 Hadoopクライアント依存性

この項では、HDFS各バージョンのHadoopクライアント依存性をリストします。

- HDFS 2.7.1

- HDFS 2.6.0

- HDFS 2.5.2

- HDFS 2.4.1

- HDFS 2.3.0

- HDFS 2.2.0

B.1.1 HDFS 2.7.1

HDFS 2.7.1 (HDFS 2.7.0も実質的に同じです。バージョンが2.7.1となっているライブラリでは、単に2.7.0に置き換えてください)

activation-1.1.jar
apacheds-i18n-2.0.0-M15.jar
apacheds-kerberos-codec-2.0.0-M15.jar
api-asn1-api-1.0.0-M20.jar
api-util-1.0.0-M20.jar
avro-1.7.4.jar
commons-beanutils-1.7.0.jar
commons-beanutils-core-1.8.0.jar
commons-cli-1.2.jar
commons-codec-1.4.jar
commons-collections-3.2.1.jar
commons-compress-1.4.1.jar
commons-configuration-1.6.jar
commons-digester-1.8.jar
commons-httpclient-3.1.jar
commons-io-2.4.jar
commons-lang-2.6.jar
commons-logging-1.1.3.jar
commons-math3-3.1.1.jar
commons-net-3.1.jar
curator-client-2.7.1.jar
curator-framework-2.7.1.jar
curator-recipes-2.7.1.jar
gson-2.2.4.jar
guava-11.0.2.jar
hadoop-annotations-2.7.1.jar
hadoop-auth-2.7.1.jar
hadoop-client-2.7.1.jar
hadoop-common-2.7.1.jar
hadoop-hdfs-2.7.1.jar
hadoop-mapreduce-client-app-2.7.1.jar
hadoop-mapreduce-client-common-2.7.1.jar
hadoop-mapreduce-client-core-2.7.1.jar
hadoop-mapreduce-client-jobclient-2.7.1.jar
hadoop-mapreduce-client-shuffle-2.7.1.jar
hadoop-yarn-api-2.7.1.jar
hadoop-yarn-client-2.7.1.jar
hadoop-yarn-common-2.7.1.jar
hadoop-yarn-server-common-2.7.1.jar
htrace-core-3.1.0-incubating.jar
httpclient-4.2.5.jar
httpcore-4.2.4.jar
jackson-core-asl-1.9.13.jar
jackson-jaxrs-1.9.13.jar
jackson-mapper-asl-1.9.13.jar
jackson-xc-1.9.13.jar
jaxb-api-2.2.2.jar
jersey-client-1.9.jar
jersey-core-1.9.jar
jetty-util-6.1.26.jar
jsp-api-2.1.jar
jsr305-3.0.0.jar
leveldbjni-all-1.8.jar
log4j-1.2.17.jar
netty-3.7.0.Final.jar
netty-all-4.0.23.Final.jar
paranamer-2.3.jar
protobuf-java-2.5.0.jar
servlet-api-2.5.jar
slf4j-api-1.7.10.jar
slf4j-log4j12-1.7.10.jar
snappy-java-1.0.4.1.jar
stax-api-1.0-2.jar
xercesImpl-2.9.1.jar
xml-apis-1.3.04.jar
xmlenc-0.52.jar
xz-1.0.jar
zookeeper-3.4.6.jar

B.1.2 HDFS 2.6.0

activation-1.1.jar
apacheds-i18n-2.0.0-M15.jar
apacheds-kerberos-codec-2.0.0-M15.jar
api-asn1-api-1.0.0-M20.jar
api-util-1.0.0-M20.jar
avro-1.7.4.jar
commons-beanutils-1.7.0.jar
commons-beanutils-core-1.8.0.jar
commons-cli-1.2.jar
commons-codec-1.4.jar
commons-collections-3.2.1.jar
commons-compress-1.4.1.jar
commons-configuration-1.6.jar
commons-digester-1.8.jar
commons-httpclient-3.1.jar
commons-io-2.4.jar
commons-lang-2.6.jar
commons-logging-1.1.3.jar
commons-math3-3.1.1.jar
commons-net-3.1.jar
curator-client-2.6.0.jar
curator-framework-2.6.0.jar
curator-recipes-2.6.0.jar
gson-2.2.4.jar
guava-11.0.2.jar
hadoop-annotations-2.6.0.jar
hadoop-auth-2.6.0.jar
hadoop-client-2.6.0.jar
hadoop-common-2.6.0.jar
hadoop-hdfs-2.6.0.jar
hadoop-mapreduce-client-app-2.6.0.jar
hadoop-mapreduce-client-common-2.6.0.jar
hadoop-mapreduce-client-core-2.6.0.jar
hadoop-mapreduce-client-jobclient-2.6.0.jar
hadoop-mapreduce-client-shuffle-2.6.0.jar
hadoop-yarn-api-2.6.0.jar
hadoop-yarn-client-2.6.0.jar
hadoop-yarn-common-2.6.0.jar
hadoop-yarn-server-common-2.6.0.jar
htrace-core-3.0.4.jar
httpclient-4.2.5.jar
httpcore-4.2.4.jar
jackson-core-asl-1.9.13.jar
jackson-jaxrs-1.9.13.jar
jackson-mapper-asl-1.9.13.jar
jackson-xc-1.9.13.jar
jaxb-api-2.2.2.jar
jersey-client-1.9.jar
jersey-core-1.9.jar
jetty-util-6.1.26.jar
jsr305-1.3.9.jar
leveldbjni-all-1.8.jar
log4j-1.2.17.jar
netty-3.6.2.Final.jar
paranamer-2.3.jar
protobuf-java-2.5.0.jar
servlet-api-2.5.jar
slf4j-api-1.7.5.jar
slf4j-log4j12-1.7.5.jar
snappy-java-1.0.4.1.jar
stax-api-1.0-2.jar
xercesImpl-2.9.1.jar
xml-apis-1.3.04.jar
xmlenc-0.52.jar
xz-1.0.jar
zookeeper-3.4.6.jar

B.1.3 HDFS 2.5.2

HDFS 2.5.2 (HDFS 2.5.1と2.5.0も実質的に同じです。バージョンが2.5.2となっているライブラリでは、単に2.5.1または2.5.0に置き換えてください)

activation-1.1.jar
apacheds-i18n-2.0.0-M15.jar
apacheds-kerberos-codec-2.0.0-M15.jar
api-asn1-api-1.0.0-M20.jar
api-util-1.0.0-M20.jar
avro-1.7.4.jar
commons-beanutils-1.7.0.jar
commons-beanutils-core-1.8.0.jar
commons-cli-1.2.jar
commons-codec-1.4.jar
commons-collections-3.2.1.jar
commons-compress-1.4.1.jar
commons-configuration-1.6.jar
commons-digester-1.8.jar
commons-httpclient-3.1.jar
commons-io-2.4.jar
commons-lang-2.6.jar
commons-logging-1.1.3.jar
commons-math3-3.1.1.jar
commons-net-3.1.jar
guava-11.0.2.jar
hadoop-annotations-2.5.2.jar
adoop-auth-2.5.2.jar
hadoop-client-2.5.2.jar
hadoop-common-2.5.2.jar
hadoop-hdfs-2.5.2.jar
hadoop-mapreduce-client-app-2.5.2.jar
hadoop-mapreduce-client-common-2.5.2.jar
hadoop-mapreduce-client-core-2.5.2.jar
hadoop-mapreduce-client-jobclient-2.5.2.jar
hadoop-mapreduce-client-shuffle-2.5.2.jar
hadoop-yarn-api-2.5.2.jar
hadoop-yarn-client-2.5.2.jar
hadoop-yarn-common-2.5.2.jar
hadoop-yarn-server-common-2.5.2.jar
httpclient-4.2.5.jar
httpcore-4.2.4.jar
jackson-core-asl-1.9.13.jar
jackson-jaxrs-1.9.13.jar
jackson-mapper-asl-1.9.13.jar
jackson-xc-1.9.13.jar
jaxb-api-2.2.2.jar
jersey-client-1.9.jar
jersey-core-1.9.jar
jetty-util-6.1.26.jar
jsr305-1.3.9.jar
leveldbjni-all-1.8.jar
log4j-1.2.17.jar
netty-3.6.2.Final.jar
paranamer-2.3.jar
protobuf-java-2.5.0.jar
servlet-api-2.5.jar
slf4j-api-1.7.5.jar
slf4j-log4j12-1.7.5.jar
snappy-java-1.0.4.1.jar
stax-api-1.0-2.jar
xmlenc-0.52.jar
xz-1.0.jar
zookeeper-3.4.6.jar

B.1.4 HDFS 2.4.1

HDFS 2.4.1 (HDFS 2.4.0も実質的に同じです。バージョンが2.4.1となっているライブラリでは、単に2.4.0に置き換えてください)

activation-1.1.jar
avro-1.7.4.jar
commons-beanutils-1.7.0.jar
commons-beanutils-core-1.8.0.jar
commons-cli-1.2.jar
commons-codec-1.4.jar
commons-collections-3.2.1.jar
commons-compress-1.4.1.jar
commons-configuration-1.6.jar
commons-digester-1.8.jar
commons-httpclient-3.1.jar
commons-io-2.4.jar
commons-lang-2.6.jar
commons-logging-1.1.3.jar
commons-math3-3.1.1.jar
commons-net-3.1.jar
guava-11.0.2.jar
hadoop-annotations-2.4.1.jar
hadoop-auth-2.4.1.jar
hadoop-client-2.4.1.jar
hadoop-hdfs-2.4.1.jar
hadoop-mapreduce-client-app-2.4.1.jar
hadoop-mapreduce-client-common-2.4.1.jar
hadoop-mapreduce-client-core-2.4.1.jar
hadoop-mapreduce-client-jobclient-2.4.1.jar
hadoop-mapreduce-client-shuffle-2.4.1.jar
hadoop-yarn-api-2.4.1.jar
hadoop-yarn-client-2.4.1.jar
hadoop-yarn-common-2.4.1.jar
hadoop-yarn-server-common-2.4.1.jar
httpclient-4.2.5.jar
httpcore-4.2.4.jar
jackson-core-asl-1.8.8.jar
jackson-mapper-asl-1.8.8.jar
jaxb-api-2.2.2.jar
jersey-client-1.9.jar
jersey-core-1.9.jar
jetty-util-6.1.26.jar
jsr305-1.3.9.jar
log4j-1.2.17.jar
paranamer-2.3.jar
protobuf-java-2.5.0.jar
servlet-api-2.5.jar
slf4j-api-1.7.5.jar
slf4j-log4j12-1.7.5.jar
snappy-java-1.0.4.1.jar
stax-api-1.0-2.jar
xmlenc-0.52.jar
xz-1.0.jar
zookeeper-3.4.5.jar
hadoop-common-2.4.1.jar

B.1.5 HDFS 2.3.0

activation-1.1.jar
avro-1.7.4.jar
commons-beanutils-1.7.0.jar
commons-beanutils-core-1.8.0.jar
commons-cli-1.2.jar
commons-codec-1.4.jar
commons-collections-3.2.1.jar
commons-compress-1.4.1.jar
commons-configuration-1.6.jar
commons-digester-1.8.jar
commons-httpclient-3.1.jar
commons-io-2.4.jar
commons-lang-2.6.jar
commons-logging-1.1.3.jar
commons-math3-3.1.1.jar
commons-net-3.1.jar
guava-11.0.2.jar
hadoop-annotations-2.3.0.jar
hadoop-auth-2.3.0.jar
hadoop-client-2.3.0.jar
hadoop-common-2.3.0.jar
hadoop-hdfs-2.3.0.jar
hadoop-mapreduce-client-app-2.3.0.jar
hadoop-mapreduce-client-common-2.3.0.jar
hadoop-mapreduce-client-core-2.3.0.jar
hadoop-mapreduce-client-jobclient-2.3.0.jar
hadoop-mapreduce-client-shuffle-2.3.0.jar
hadoop-yarn-api-2.3.0.jar
hadoop-yarn-client-2.3.0.jar
hadoop-yarn-common-2.3.0.jar
hadoop-yarn-server-common-2.3.0.jar
httpclient-4.2.5.jar
httpcore-4.2.4.jar
jackson-core-asl-1.8.8.jar
jackson-mapper-asl-1.8.8.jar
jaxb-api-2.2.2.jar
jersey-core-1.9.jar
jetty-util-6.1.26.jar
jsr305-1.3.9.jar
log4j-1.2.17.jar
paranamer-2.3.jar
protobuf-java-2.5.0.jar
servlet-api-2.5.jar
slf4j-api-1.7.5.jar
slf4j-log4j12-1.7.5.jar
snappy-java-1.0.4.1.jar
stax-api-1.0-2.jar
xmlenc-0.52.jar
xz-1.0.jar
zookeeper-3.4.5.jar

B.1.6 HDFS 2.2.0

activation-1.1.jar
aopalliance-1.0.jar
asm-3.1.jar
avro-1.7.4.jar
commons-beanutils-1.7.0.jar
commons-beanutils-core-1.8.0.jar
commons-cli-1.2.jar
commons-codec-1.4.jar
commons-collections-3.2.1.jar
commons-compress-1.4.1.jar
commons-configuration-1.6.jar
commons-digester-1.8.jar
commons-httpclient-3.1.jar
commons-io-2.1.jar
commons-lang-2.5.jar
commons-logging-1.1.1.jar
commons-math-2.1.jar
commons-net-3.1.jar
gmbal-api-only-3.0.0-b023.jar
grizzly-framework-2.1.2.jar
grizzly-http-2.1.2.jar
grizzly-http-server-2.1.2.jar
grizzly-http-servlet-2.1.2.jar
grizzly-rcm-2.1.2.jar
guava-11.0.2.jar
guice-3.0.jar
hadoop-annotations-2.2.0.jar
hadoop-auth-2.2.0.jar
hadoop-client-2.2.0.jar
hadoop-common-2.2.0.jar
hadoop-hdfs-2.2.0.jar
hadoop-mapreduce-client-app-2.2.0.jar
hadoop-mapreduce-client-common-2.2.0.jar
hadoop-mapreduce-client-core-2.2.0.jar
hadoop-mapreduce-client-jobclient-2.2.0.jar
hadoop-mapreduce-client-shuffle-2.2.0.jar
hadoop-yarn-api-2.2.0.jar
hadoop-yarn-client-2.2.0.jar
hadoop-yarn-common-2.2.0.jar
hadoop-yarn-server-common-2.2.0.jar
jackson-core-asl-1.8.8.jar
jackson-jaxrs-1.8.3.jar
jackson-mapper-asl-1.8.8.jar
jackson-xc-1.8.3.jar
javax.inject-1.jar
javax.servlet-3.1.jar
javax.servlet-api-3.0.1.jar
jaxb-api-2.2.2.jar
jaxb-impl-2.2.3-1.jar
jersey-client-1.9.jar
jersey-core-1.9.jar
jersey-grizzly2-1.9.jar
jersey-guice-1.9.jar
jersey-json-1.9.jar
jersey-server-1.9.jar
jersey-test-framework-core-1.9.jar
jersey-test-framework-grizzly2-1.9.jar
jettison-1.1.jar
jetty-util-6.1.26.jar
jsr305-1.3.9.jar
log4j-1.2.17.jar
management-api-3.0.0-b012.jar
paranamer-2.3.jar
protobuf-java-2.5.0.jar
slf4j-api-1.7.5.jar
slf4j-log4j12-1.7.5.jar
snappy-java-1.0.4.1.jar
stax-api-1.0.1.jar
xmlenc-0.52.jar
xz-1.0.jar
zookeeper-3.4.5.jar

C Flumeハンドラ・クライアント依存性

この付録では、Apache FlumeのFlumeクライアント依存性をリストします。

Maven groupId: org.apache.flume

Maven atifactId: hadoop-ng-skd

Maven version: 各セクションでリストされるFlumeのバージョン番号

C.1 Flumeクライアント依存性

この項では、Flume各バージョンのFlumeクライアント依存性をリストします。

- Flume 1.6.0

- Flume 1.5.2

- "Flume 1.4.0"

C.1.1 Flume 1.6.0

avro-1.7.4.jar
avro-ipc-1.7.4.jar
commons-codec-1.4.jar
commons-collections-3.2.1.jar
commons-compress-1.4.1.jar
commons-lang-2.5.jar
commons-logging-1.1.1.jar
flume-ng-sdk-1.6.0.jar
httpclient-4.1.3.jar
httpcore-4.1.3.jar
jackson-core-asl-1.8.8.jar
jackson-mapper-asl-1.8.8.jar
jetty-6.1.26.jar
jetty-util-6.1.26.jar
libthrift-0.9.0.jar
netty-3.5.12.Final.jar
paranamer-2.3.jar
slf4j-api-1.6.4.jar
snappy-java-1.0.4.1.jar
velocity-1.7.jar
xz-1.0.jar

C.1.2 Flume 1.5.2

avro-1.7.3.jar
avro-ipc-1.7.3.jar
commons-codec-1.3.jar
commons-collections-3.2.1.jar
commons-lang-2.5.jar
commons-logging-1.1.1.jar
flume-ng-sdk-1.5.2.jar
httpclient-4.0.1.jar
httpcore-4.0.1.jar
jackson-core-asl-1.8.8.jar
jackson-mapper-asl-1.8.8.jar
jetty-6.1.26.jar
jetty-util-6.1.26.jar
libthrift-0.7.0.jar
netty-3.5.12.Final.jar
paranamer-2.3.jar
slf4j-api-1.6.4.jar
snappy-java-1.0.4.1.jar
velocity-1.7.jar

C.1.3 Flume 1.4.0

avro-1.7.3.jar
avro-ipc-1.7.3.jar
commons-codec-1.3.jar
commons-collections-3.2.1.jar
commons-lang-2.5.jar
commons-logging-1.1.1.jar
flume-ng-sdk-1.4.0.jar
httpclient-4.0.1.jar
httpcore-4.0.1.jar
jackson-core-asl-1.8.8.jar
jackson-mapper-asl-1.8.8.jar
jetty-6.1.26.jar
jetty-util-6.1.26.jar
libthrift-0.7.0.jar
netty-3.4.0.Final.jar
paranamer-2.3.jar
slf4j-api-1.6.4.jar
snappy-java-1.0.4.1.jar
velocity-1.7.jar

D Kafkaハンドラ・クライアント依存性

この付録では、Apache KafkaのKafkaクライアント依存性をリストします。

Maven groupId: org.apache.kafka

Maven atifactId: kafka-clients

Maven version: 各セクションでリストされるKafkaのバージョン番号

D.1 Kafkaクライアント依存性

この項では、Kafka各バージョンのKafkaクライアント依存性をリストします。

- Kafka 0.8.2.1

D.1.1 Kafka 0.8.2.1

kafka-clients-0.8.2.1.jar
lz4-1.2.0.jar
slf4j-api-1.7.6.jar
snappy-java-1.1.1.6.jar

オラクルの法律上の注意点について

コピーライトについて

Copyright © 1994-2016, Oracle and/or its affiliates.All rights reserved.

ライセンス制約の保証と結果的に生じる損害の免責

このソフトウェアおよび関連ドキュメントの使用と開示は、ライセンス契約の制約条件に従うものとし、知的財産に関する法律により保護されています。ライセンス契約で明示的に許諾されている場合もしくは法律によって認められている場合を除き、形式、手段に関係なく、いかなる部分も使用、複写、複製、翻訳、放送、修正、ライセンス供与、送信、配布、発表、実行、公開または表示することはできません。このソフトウェアのリバース・エンジニアリング、逆アセンブル、逆コンパイルは互換性のために法律によって規定されている場合を除き、禁止されています。

保証免責

ここに記載された情報は予告なしに変更される場合があります。また、誤りが無いことの保証はいたしかねます。誤りを見つけた場合は、オラクルまでご連絡ください。

制限付権利について

このソフトウェアまたは関連ドキュメントを、米国政府機関もしくは米国政府機関に代わってこのソフトウェアまたは関連ドキュメントをライセンスされた者に提供する場合は、次の通知が適用されます。

U.S. GOVERNMENT END USERS: Oracle programs, including any operating system, integrated software, any programs installed on the hardware, and/or documentation, delivered to U.S. Government end users are "commercial computer software" pursuant to the applicable Federal Acquisition Regulation and agency-specific supplemental regulations.As such, use, duplication, disclosure, modification, and adaptation of the programs, including any operating system, integrated software, any programs installed on the hardware, and/or documentation, shall be subject to license terms and license restrictions applicable to the programs.No other rights are granted to the U.S. Government.

危険な用途への使用について

このソフトウェアまたはハードウェアは様々な情報管理アプリケーションでの一般的な使用のために開発されたものです。このソフトウェアまたはハードウェアは、危険が伴うアプリケーション(人的傷害を発生させる可能性があるアプリケーションを含む)への用途を目的として開発されていません。このソフトウェアまたはハードウェアを危険が伴うアプリケーションで使用する際、安全に使用するために、適切な安全装置、バックアップ、冗長性(redundancy)、その他の対策を講じることは使用者の責任となります。このソフトウェアまたはハードウェアを危険が伴うアプリケーションで使用したことに起因して損害が発生しても、Oracle Corporationおよびその関連会社は一切の責任を負いかねます。

商標と登録商標について

OracleおよびJavaはオラクルおよびその関連会社の登録商標です。その他の社名、商品名等は各社の商標または登録商標である場合があります。

Intel、Intel Xeonは、Intel Corporationの商標または登録商標です。すべてのSPARCの商標はライセンスをもとに使用し、SPARC International, Inc.の商標または登録商標です。AMD、Opteron、AMDロゴ、AMD Opteronロゴは、Advanced Micro Devices, Inc.の商標または登録商標です。UNIXは、The Open Groupの登録商標です。

第三者のコンテンツ、製品、サービスに対する免責事項

このソフトウェアまたはハードウェア、そしてドキュメントは、第三者のコンテンツ、製品、サービスへのアクセス、あるいはそれらに関する情報を提供することがあります。適用されるお客様とOracle Corporationとの間の契約に別段の定めがある場合を除いて、Oracle Corporationおよびその関連会社は、第三者のコンテンツ、製品、サービスに関して一切の責任を負わず、いかなる保証もいたしません。適用されるお客様とOracle Corporationとの間の契約に定めがある場合を除いて、Oracle Corporationおよびその関連会社は、第三者のコンテンツ、製品、サービスへのアクセスまたは使用によって損失、費用、あるいは損害が発生しても一切の責任を負いかねます。

アルファ版およびベータ版ドラフト・ドキュメントについて

このドキュメントが試作版の場合:

このドキュメントは試作版であり、デモおよび暫定使用のみを目的としたものです。このソフトウェアを使用するハードウェアに限定するものではありません。Oracle Corporationおよびその関連会社は、このドキュメントに関して一切の責任を負わず、いかなる保証もいたしません。また、このドキュメントを使用したことによって損失、費用、あるいは損害が発生しても、一切の責任を負いかねます。

非公開のアルファ版およびベータ版ドラフト・ドキュメントについて

このドキュメントが非公開の試作版の場合:

このドキュメントに含まれる情報は、情報の共有のみを目的としたものであって、顧客諮問委員会(Customer Advisory Board)のメンバーとしてのお客様の立場でのみ、またはお客様のベータ・トライアル契約のみに従って検討されるべきものとします。マテリアル、コード、または機能の提供をお約束するものではなく、購入決定を行う際の判断材料とすべきではありません。このドキュメントに記載されている特徴または機能の開発、リリースおよび時期については、オラクルの裁量により決定されます。

このドキュメントには、ソフトウェアまたは印刷物などの形式を問わず、オラクルが独占的な権利を有する財産的情報が含まれています。この機密資料へのアクセスと使用は、お客様とオラクルとの間で締結され、お客様が遵守に同意した、Oracle Master Agreement、Oracle License and Oracle Services Agreement (オラクル・ライセンスおよびサービスに関する契約書)、Oracle PartnerNetwork Agreement、Oracle Distribution Agreementまたはその他のライセンス契約の条件に従うものとします。このドキュメントとその内容の開示、コピー、複製および配布には、オラクルによる事前の承諾を必要とします。このドキュメントはライセンス契約の一部となるものではなく、オラクルおよびその子会社や関連会社との契約を構成するものではありません。

ドキュメントのアクセシビリティについて

オラクルのアクセシビリティについての詳細情報は、Oracle Accessibility ProgramのWebサイトhttp://www.oracle.com/pls/topic/lookup?ctx=acc&id=docacc を参照してください。

Oracle Supportへのアクセス

サポートをご契約のお客様には、My Oracle Supportを通して電子支援サービスを提供しています。詳細情報はhttp://www.oracle.com/pls/topic/lookup?ctx=acc&id=infoか、聴覚に障害のあるお客様はhttp://www.oracle.com/pls/topic/lookup?ctx=acc&id=trsを参照してください。