主コンテンツへ
Oracle® Fusion Middleware Oracle GoldenGate for Big Dataの統合
リリース12c (12.2.0.1)
E72569-02
目次へ移動
目次

前
次

4 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