この章の内容は次のとおりです。
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ソースへデータをストリーミングできます。
Flumeハンドラを実行するには、AvroまたはThrift Flumeソースとともに構成したFlumeエージェントが稼働している必要があります。Oracle GoldenGateは、Flumeと同じ場所に配置することも、別のマシンに配置することもできます。別のマシンに配置する場合は、ネットワーク接続を介してFlumeソースのホストとポートにアクセスできる必要があります。Flumeエージェント・プロセスの構成および起動方法については、次の場所にあるFlumeのユーザーズ・ガイドを参照してください。
https://flume.apache.org/releases/content/1.6.0/FlumeUserGuide.pdf
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クライアント・ライブラリをコピーする必要があります。
Oracle GoldenGate for Big Data Flume Handlerは、Oracle GoldenGate for Big Dataリリースに含まれるビッグ・データ・フォーマッタをすべてサポートしています。フォーマッタは、次のとおりです。
Avro行
Avro Operation
JSON
XML
区切りテキスト
12.2.0.1のFlumeハンドラの構成プロパティの概略を、次に示します。
プロパティ名 | プロパティ値 | 必須 | 説明 |
---|---|---|---|
|
|
はい |
ハンドラのリスト。グループ化プロパティが |
|
|
はい |
使用するハンドラのタイプ。 |
|
フォーマッタ・クラスまたはショート・コード |
いいえ。デフォルトは |
使用するフォーマッタ。次のいずれかを指定できます。
あるいは、カスタム・フォーマッタを記述し、完全修飾クラス名をここに含めることもできます。 |
|
任意のファイル名 |
いいえ。デフォルトは |
デフォルトの |
|
|
いいえ。デフォルトは |
操作モードまたはトランザクション・モード。Javaアダプタのグループ化オプションは、txモードでのみ使用できます。 |
|
カスタム実装の完全修飾クラス名 |
いいえ。デフォルトは |
flumeイベントにどんなヘッダー・プロパティを追加するかを決めるクラス。 |
|
|
いいえ。デフォルトは |
各flumeイベントが操作かトランザクションかを定義する。 |
|
|
いいえ。デフォルトは |
|
|
|
いいえ。デフォルトは |
|
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
Javaクラスパスは、非常によくある問題の1つです。クラスパスに問題があることは、Oracle GoldenGate Java log4j
ログ・ファイルの、ClassNotFoundException
でわかります。この問題のトラブルシューティングに、Java log4j
ログ・ファイルを使用できます。ログ・レベルをDEBUG
に設定すると、ログ・ファイルに記録されるgg.classpath
オブジェクトで参照されているjarそれぞれを記録できます。これを利用して、必要な依存性jarがすべて解決されることを確認できます。
特定の状況で、Flumeハンドラは、Flumeシンクがメッセージをディスパッチするより早くFlumeソースに書込みを行う場合があります。この場合、Flumeハンドラはしばらく動作しますが、いったんFlumeがメッセージを受け付けなくなると、異常終了します。Oracle GoldenGate Javaログ・ファイルはEventDeliveryException
となる可能性があり、これはFlumeハンドラがイベントを送信できなかったことを示します。問題の正確な原因は、Flumeのログを確認してください。FlumeエージェントでOutOfMemoryException
が発生している場合には、Flumeチャネルを構成して、Javaヒープの容量を増やすか、構成を増やすことができます。ただし、これで問題が完全に解決しない場合もあります。Flumeシンクがメッセージをディスパッチするより早くFlumeハンドラがFlumeソースにデータをプッシュする場合は、いずれかを変更すれば、エラーになるまでOracle GoldenGateが稼働する期間が広がります。
Flumeエージェント構成ファイルがクラスパスにない場合は、Flumeハンドラが起動時に異常終了します。その結果、通常は、Flumeプロデューサのプロパティをロードする際のエラーとしてConfigException
に問題がリストされます。gg.handler.{
name
}をチェックします。 RpcClientProperites
構成ファイルで、Flumeエージェント・プロパティ・ファイルの命名が正しいことを確認します。GoldenGateのgg.classpath
プロパティをチェックして、Flumeエージェント・プロパティ・ファイルを含むディレクトリがクラスパスに存在することを確認します。また、クラスパスをチェックして、Flumeエージェント・プロパティ・ファイルのパスがワイルドカード(*)文字で終わっていないことも確認します。
Flumeソースに接続できない場合、Flumeハンドラが起動時に異常終了します。この問題の根本原因は、Oracle GoldenGate Java log4j
ファイルでIOExeption
としてレポートされ、特定のホストおよびポートでFlumeに接続できなかったことを示します。次の点を確認します。
Flumeエージェント・プロセスが実行されていること。
Oracle for Big DataのFlumeハンドラがアクセスするFlumeエージェント構成ファイルに、正しいホストとポートが指定されていること。
この項では、Oracle GoldenGate証跡ファイルからの操作データが、異なる構成に基づいてFlumeハンドラによってどのようにFlumeイベントにマップされるかを説明します。Flumeイベントとは、Flumeエージェントを通過するデータの単位です。イベントはソースからチャネルへ、チャネルからシンクへと移動し、イベント・インタフェースの実装として表されます。イベントは、オプションでヘッダー(文字列属性)のセットを伴うペイロード(バイト配列)を搬送します。
Oracle GoldenGate Java構成ファイルで、Flumeハンドラの構成は次のとおりです。
gg.handler.{name}.mode=op
Oracle GoldenGate証跡ファイルからの個々の操作のデータが、1つのFlumeイベントにマップされます。各イベントはすぐにFlumeにフラッシュされます。各Flumeイベントには、次のヘッダーがあります。
TABLE_NAME:
操作の表名。
SCHEMA_NAME
: 操作のカタログ名(使用可能な場合)とスキーマ名。
SCHEMA_HASH
: Avroスキーマのハッシュ・コード。(Avro行フォーマッタとAvro操作フォーマッタにのみ該当します。)
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回のトランザクションで処理される操作の数が増えることに注意してください。
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回のトランザクションで処理される操作の数が増えることに注意してください。
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)
パフォーマンス向上のために、Replicatベースのグループ化を使用することをお薦めします。
Extractベースのグループ化は、Javaアダプタでのグループ化を利用します。Javaアダプタを使用するメッセージ・サイズ・ベースのグループ化は、操作数ベースのグループ化より遅くなる場合があります。アダプタ・ベースのグループ化が本当に必要な場合、操作数に基づくグループ化をお薦めします。
gg.handler.
flume_handler_name
のトランザクション・モード。最高のパフォーマンスを得るためには、 EventMapsTo=tx
設定が推奨されます。
Flumeハンドラの最大ヒープ・サイズがパフォーマンスに影響する場合があります。ヒープが小さすぎると、JVMによるガベージ・コレクションが頻繁に発生することがあります。Oracle GoldenGate Javaプロパティ・ファイルで最大ヒープ・サイズを増やすと、パフォーマンスが向上する場合があります。
Oracle GoldenGate for Big Data 12.2.0.1のFlumeハンドラは、ソースのDDLでの変更に適応します。ただし、この機能はソースで複製されるデータベースとアップストリームのOracle GoldenGate Captureプロセスを利用してDDLイベントを取得し、複製します。この機能は、Oracle GoldenGate 12.2のすべてのデータベース実装ですぐに利用できるわけではありません。DDLレプリケーションの詳細は、データベース実装に関するOracle GoldenGateドキュメントを参照してください。
メタデータの変更がソースで発生する場合、Flumeハンドラはそのメタデータ変更イベントを、対応するフォーマッタに通知します。フォーマッタがその表のために保持しているキャッシュ済のスキーマがある場合には、削除されます。対応するフォーマッタで、その表に対する操作が次に発生したとき、スキーマが再生成されます。
Flumeエージェント構成ファイルからのAvro Flumeソースの構成例を次に示します。
client.type = default hosts = h1 hosts.h1 = host_ip:host_port batch-size = 100 connect-timeout = 20000 request-timeout = 20000
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スキーマのハッシュ・コード
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
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
発生する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