6 Flumeハンドラの使用
Flumeハンドラを使用して、変更キャプチャ・データをFlumeソース・データベースにストリーミングする方法について説明します。
トピック:
6.1 概要
Apache Flumeは、様々なソースから集中化されたデータ・ストアに大量のストリーミング・データを収集、集計およびトランスポートするためのデータ収集メカニズムです。
Flumeハンドラは、Oracle GoldenGate証跡からFlumeソースに変更キャプチャ・データをストリーミングするために設計されています。Apache Flumeは、ビッグ・データ・アプリケーションにデータをストリーミングすることを主な目的とするオープン・ソース・アプリケーションです。
データ・ジェネレータ
データ・ジェネレータは、Flumeエージェントによって収集されるデータを作成するデータ・フィードです。
Flumeエージェント
Flumeエージェントは、データ・ジェネレータ・クライアントまたは他のエージェントからイベントを受信し、それを宛先シンクまたはエージェントに転送するJVMデーモン・プロセスです。Flumeエージェントは、次のように構成されています。
親トピック: Flumeハンドラの使用
6.2 Flumeハンドラの設定および実行
ここでは、Flumeハンドラのコンポーネントの構成およびハンドラの実行について説明します。
Flumeハンドラを実行するには、AvroまたはThrift Flumeソースとともに構成されたFlumeエージェントが稼働している必要があります。Oracle GoldenGateは、Flumeと同じ場所に配置することも、別のマシンに配置することもできます。別のマシンに配置する場合は、ネットワーク接続でFlumeソースのホストとポートにアクセスできる必要があります。Flumeエージェント・プロセスの構成および起動方法については、Flumeのユーザーズ・ガイド(https://flume.apache.org/releases/content/1.6.0/FlumeUserGuide.pdf
)を参照してください。
トピック:
親トピック: Flumeハンドラの使用
6.2.1 クラスパス構成
FlumeハンドラをFlumeソースに接続して実行するには、Flumeエージェント構成ファイルとFlumeクライアントjarがgg.classpathconfiguration
変数で構成されている必要があります。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エージェント構成ファイルのパスにワイルドカードを含めると、このファイルにアクセスできなくなります。逆に、依存関係jarのパス指定には、そのディレクトリにあるJARファイルがすべて関連するクラスパスに含まれるように、ワイルドカード(*
)を含める必要があります。*.jar
は使用しないでください。正しく構成されたgg.classpath
変数の例を次に示します。
gg.classpath=dirprm/:/var/lib/flume/lib/*
FlumeハンドラとFlumeを同じ場所に配置していない場合は、Flumeハンドラ・プロセスをホストしているマシンに、Flumeエージェント構成ファイルとFlumeクライアント・ライブラリをコピーする必要があります。
親トピック: Flumeハンドラの設定および実行
6.2.2 Flumeハンドラ構成
Flumeハンドラの構成可能な値は次のとおりです。これらのプロパティは、Javaアダプタ・プロパティ・ファイルにあります(Replicatプロパティ・ファイルにはありません)。
Flumeハンドラの選択を有効にするには、まずgg.handler.jdbc.type=flume
およびその他のFlumeプロパティを次のように指定してハンドラ・タイプを構成する必要があります。
プロパティ名 | プロパティ値 | 必須/オプション | デフォルト | 説明 |
---|---|---|---|---|
|
|
はい |
ハンドラのリスト。グループ化プロパティが |
|
|
|
はい |
使用するハンドラのタイプ。 |
|
|
フォーマッタ・クラスまたはショート・コード |
いいえ。 |
デフォルトはdelimitedtext |
使用するフォーマッタ。次のいずれかを指定できます。
カスタム・フォーマッタを記述し、完全修飾クラス名をここに含めることもできます。 |
|
任意のファイル名 |
いいえ。デフォルトは |
デフォルトの |
|
|
|
いいえ。デフォルトは |
操作モード(op)またはトランザクション・モード(tx)。Javaアダプタのグループ化オプションは、txモードでのみ使用できます。 |
|
|
カスタム実装の完全修飾クラス名 |
いいえ。デフォルトは |
flumeイベントに追加するヘッダー・プロパティを定義するために使用するクラス。 |
|
|
|
いいえ。デフォルトは |
各flumeイベントが操作かトランザクションかを定義します。 |
|
|
|
いいえ。デフォルトは |
|
|
|
|
いいえ。デフォルトは |
|
親トピック: Flumeハンドラの設定および実行
6.2.3 サンプル構成の確認
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ハンドラの設定および実行
6.3 操作からFlumeイベントへのデータ・マッピング
この項では、Oracle GoldenGate証跡ファイルからの操作データが、異なる構成に基づいてFlumeハンドラによってどのようにFlumeイベントにマップされるかを説明します。Flumeイベントとは、Flumeエージェントを通過するデータの単位です。イベントはソースからチャネルへ、チャネルからシンクへと移動し、イベント・インタフェースの実装として表されます。イベントは、オプションでヘッダー(文字列属性)のセットを伴うペイロード(バイト配列)を搬送します。
トピック:
6.3.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操作フォーマッタにのみ適用)
親トピック: 操作からFlumeイベントへのデータ・マッピング
6.3.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または区切りテキストとしてフォーマットする場合には、このモードを使用することをお薦めします。Replicatのバッチ処理機能を構成すると、1回のトランザクションで処理される操作の数が増えることに注意してください。
親トピック: 操作からFlumeイベントへのデータ・マッピング
6.3.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など自己記述型のフォーマットを使用する場合には、このモードを使用することをお薦めします。Replicatのバッチ処理機能を構成すると、1回のトランザクションで処理される操作の数が増えることに注意してください。
親トピック: 操作からFlumeイベントへのデータ・マッピング
6.4 パフォーマンスに関する考慮事項
パフォーマンス向上のために、次のオプションを考慮してください。
-
Replicatベースのグループ化を設定する
-
gg.handler.
flume_handler_name
EventMapsTo=tx
でトランザクション・モードを設定する -
Oracle GoldenGate Javaプロパティ・ファイルで内のJVMの最大ヒープ・サイズを増やす(Flumeハンドラの最大ヒープ・サイズがパフォーマンスに影響する可能性があります)
親トピック: Flumeハンドラの使用
6.5 メタデータ変更イベント
Flumeハンドラは、メタデータ変更イベントに適応します。 メタデータ変更イベントを処理するには、ソース証跡ファイルに、その証跡ファイルのメタデータが必要です。ただし、この機能はソースで複製されるデータベースとアップストリームのOracle GoldenGate Captureプロセスを利用してDDLイベントを取得し、複製します。この機能は、Oracle GoldenGateのすべてのデータベース実装で利用できるわけではありません。DDLレプリケーションがサポートされているかどうかを判別するには、適切なデータベース用のOracle GoldenGateインストレーションおよび構成ガイドを参照してください。
メタデータの変更がソースで発生する場合、Flumeハンドラはそのメタデータ変更イベントを、対応するフォーマッタに通知します。フォーマッタがその表のために保持しているキャッシュ済のスキーマがある場合には、削除されます。対応するフォーマッタで、その表に対する操作が次に発生したとき、スキーマが再生成されます。
親トピック: Flumeハンドラの使用
6.6 Flumeソース構成の例
トピック:
6.6.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
親トピック: Flumeソース構成の例
6.6.2 Thrift Flumeソース
Flumeエージェント構成ファイルからのAvro Flumeソースのサンプル構成を次に示します。
client.type = thrift hosts = h1 hosts.h1 = host_ip:host_port
親トピック: Flumeソース構成の例
6.7 高度な機能
次のFlumeハンドラの高度な機能を実装できます。
トピック:
6.7.1 スキーマの伝播
FlumeハンドラはFlumeにスキーマを伝播できます。この機能がサポートされているのは現在、Avroの行フォーマッタと操作フォーマッタのみです。この機能を有効にするには、次のプロパティを設定します。
gg.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スキーマのハッシュ・コード
親トピック: 高度な機能
6.7.2 セキュリティ
Oracle GoldenGate for Big Data Flume HandlerからFlumeソースへの接続ではKerberos認証が機能します。この機能は、Thrift Flumeソースを使用するFlume 1.6.0以降でのみサポートされています。これを有効にするには、Flumeエージェント構成ファイルでFlumeソースの構成を変更します。
Flumeエージェント構成ファイルで、Kerberos認証を有効にするFlumeソース構成の例を次に示します。クライアントとサーバーのKerberosプリンシパル名を指定する必要があります。クライアント・プリンシパルのパスワードを実行時に解決できるように、Kerberos keytab
ファイルへのパスを指定する必要があります。Kerberosの管理方法、Kerberosプリンシパルおよび対応するパスワード、Kerberos keytab
ファイルの作成の詳細は、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
親トピック: 高度な機能
6.7.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
親トピック: 高度な機能
6.7.4 ロード・バランシング機能
発生するFlumeイベントが、複数のFlumeソース間でロード・バランシングされるように、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
親トピック: 高度な機能
6.7.5 Apache Flumeファイル・ロール・シンクの適用の構成
Apache Flumeを含む統合デプロイメントの場合は、ExtractおよびReplicat用にOracle GoldenGateを設定することから始めます。
- ソースOracle DatabaseのOracle GoldenGateをインストールします。
- データベース設定を変更してExtractを有効にします。
- GoldenGate変更Extractを作成して、ほぼリアルタイムのトランザクション・データをREDOファイルから取得します。
この例で構成するOracle GoldenGateアーキテクチャは次のとおりです。
Apache Flumeハンドラの構成
ReplicatのApache Flumeハンドラを設定するには、次の3つのファイルを構成する必要があります。
-
Replicatパラメータ・ファイル。
-
Oracle GoldenGate Big Dataプロパティ・ファイル。
-
Apache Flumeプロパティ・ファイル。
3つのファイルをすべてOracle GoldenGate構成ファイルのデフォルト・ディレクトリdirprm
に置きます。
Replicatパラメータ・ファイル
サンプルReplicatパラメータ・ファイルを次に示します。
REPLICAT rflume
TARGETDB LIBFILE libggjava.so SET property=dirprm/flume_frs.properties
REPORTCOUNT EVERY 20 MINUTES, RATE
GROUPTRANSOPS 100
MAP orcl.moviedemo.movie TARGET orcl.moviedemo.movie;
TARGETDB LIBFILE libggjava.so SET property=dirprm/flume_frs.properties
パラメータは、Javaモジュールを初期化するトリガーとして機能します。SET
句では、JavaモジュールのJavaプロパティ・ファイルの場所と名前を指定します。Javaプロパティ・ファイルの場所は、絶対パスまたはReplicat実行可能ファイルの場所に対する相対パスとして指定できます。この構成では、Oracle GoldenGateインスタンスに対する相対パスを使用します。
GROUPTRANSOPS 100
パラメータでは、Replicatトランザクションに含まれるSQL操作の数を制御します。デフォルト設定は1000で、本番環境のベスト・プラクティス設定です。ただし、テスト・サーバーが非常に小規模であり、Flumeチャネルを過度に消費しないようにする場合は、Replicatがトランザクションに適用する操作の数を減らします。
プロパティ・ファイル
サンプル・プロパティ・ファイルを次に示します。
## RFLUME properties for Apache Flume Sink apply
##
gg.handlerlist=flumehandler
gg.handler.flumehandler.type=flume
gg.handler.flumehandler.RpcClientPropertiesFile=custom-flume-rpc.properties
gg.handler.flumehandler.format=delimitedtext
gg.handler.flumehandler.format.fieldDelimiter=,
gg.handler.flumehandler.mode=tx
gg.handler.flumehandler.EventMapsTo=tx
gg.handler.flumehandler.PropagateSchema=true
gg.handler.flumehandler.includeTokens=false
##
goldengate.userexit.timestamp=utc
goldengate.userexit.writers=javawriter
javawriter.stats.display=TRUE
javawriter.stats.full=TRUE
##
gg.log=log4j
gg.log.level=INFO
##
gg.report.time=30sec
##
gg.classpath=dirprm/:/home/oracle/apache-flume-1.8.0/lib/*:
##
javawriter.bootoptions=-Xmx512m -Xms32m -Djava.class.path=ggjava/ggjava.jar
プロパティ | 説明 |
---|---|
gg.handlerlist=flumehandler |
このファイル内のハンドラ構成プロパティの名前を定義します。 |
gg.handler.flumehandler.type=flume |
このハンドラのタイプを定義します |
gg.handler.flumehandler.RpcClientPropertiesFile=custom-flume-rpc.properties |
Flumeエージェント構成ファイルの名前を指定します。このファイルには、リモート・プロシージャ・コールを実行するための、ReplicatのFlume接続情報を定義します |
gg.handler.flumehandler.format=delimitedtext |
出力のフォーマットを設定します。サポートされるフォーマッタは次のとおりです。
|
gg.handler.flumehandler.format.fieldDelimiter=| |
デフォルトのデリミタは、印刷できない文字です。このプロパティを使用してデフォルトを垂直バーに変更します。 |
gg.handler.flumehandler.mode=tx |
Javaアダプタのオペレーティング・モードを設定します。tx モードでは、出力はReplicatのGROUPTRANSOPS プロパティで定義されたトランザクション・グループに書き込まれます。
|
gg.handler.flumehandler.EventMapsTo=tx |
gg.handler.flumehandler.mode の設定に基づいて、各flumeイベントが操作とトランザクションのどちらを表すかを定義します。
|
gg.handler.flumehandler.PropagateSchema=true |
Flumeハンドラがスキーマ・イベントを公開するかどうかを定義します。 |
gg.handler.flumehandler.includeTokens=false |
true に設定すると、ソース証跡ファイルからのトークン・データが出力に含まれます。false に設定すると、ソース証跡ファイルからのトークン・データが出力から除外されます。
|
gg.classpath=dirprm/:/home/oracle/apache-flume-1.8.0/lib/*: |
Java仮想マシンがFlumeに接続して実行するために使用するユーザー定義のJavaクラスおよびパッケージを指定します。クラスパス設定には次のものを含める必要があります。
/home/oracle/apache-flume-1.8.0/lib ディレクトリにインストールされ、すべてのJARのロードにワイルドカードが使用されています。
注意: Flumeクライアント・ライブラリのバージョンは、Flumeハンドラが接続するFlumeのバージョンと一致する必要があります。 |
javawriter.bootoptions=-Xmx512m -Xms32m -Djava.class.path=ggjava/ggjava.jar |
JVMランタイム・メモリー割当ておよびOracle GoldenGate Javaアダプタの依存性(ggjava.jar )ファイルの場所を設定します。
|
Flumeエージェント構成ファイル
サンプルFlumeエージェント構成ファイルを次に示します。
client.type=default
hosts=h1
hosts.h1=localhost:41414
batch-size=100
connect-timeout=20000
request-timeout=20000
このファイルには、Oracle GoldenGateがFlumeエージェントに接続するために使用する設定が含まれています。Oracle GoldenGate Big Data Adapterは、ローカル・マシン上で実行中のFlumeエージェントへのAvro接続を試行し、ポート41414で接続をリスニングします。データは、100イベントのバッチでFlumeに送信されます。Flumeエージェントへの接続およびリクエストは、2000ミリ秒以内にレスポンスがない場合はタイムアウトし失敗します。
Flumeエージェント構成
Oracle GoldenGate Big Dataアダプタは、ローカル・マシン上のFlumeエージェントに接続し、ポート41414でリスニングするように構成されます。Flumeエージェントを構成するには、ファイル/home/oracle/flume/flume_frs.conf
を作成し、次のプロパティを指定します。
## Flume Agent Settings
##
oggfrs.channels = memoryChannel
oggfrs.sources = rpcSource
oggfrs.sinks = fr1
#
oggfrs.channels.memoryChannel.type = memory
#
oggfrs.sources.rpcSource.channels = memoryChannel
oggfrs.sources.rpcSource.type = avro
oggfrs.sources.rpcSource.bind = 0.0.0.0
oggfrs.sources.rpcSource.port = 41414
#
oggfrs.sinks.fr1.type = file_roll
oggfrs.sinks.fr1.channel = memoryChannel
oggfrs.sinks.fr1.sink.directory = /u01/flumeOut/moviedemo/movie
#
# Create a new file every 120 seconds, default is 30
oggfrs.sinks.fr1.sink.rollInterval = 120
この構成ファイルでは、oggfrs
という名前の単一のFlumeエージェントが作成されます。oggfrs
エージェントは、ローカル・ホストのポート41414でリスニングするAvro RPCソース、メモリーでイベント・データをバッファリングするチャネル、およびローカル・ファイル・システムのディレクトリ内のファイルにイベントを書き込むシンクで構成されます。シンクは、既存のファイルを閉じて、120秒ごとに新しいファイルを作成するように設定されています。シンク・ディレクトリは、Oracleソース・スキーマ名と表名を含むように設定されています。これは、ファイル・ロール・シンクでは出力ファイルに名前を付けるメカニズムが提供されないためです。
ファイル・ロール・シンクでは、ファイル作成時の現在のタイムスタンプに基づいてファイルに名前が付けられます。Flumeソース・コードでは、ファイル名を次のように設定します。
public class PathManager
{
private long seriesTimestamp;
private File baseDirectory;
private AtomicInteger fileIndex;
private File currentFile;
public PathManager()
{
seriesTimestamp = System.currentTimeMillis();
fileIndex = new AtomicInteger();
}
public File nextFile()
{
currentFile = new File(baseDirectory, seriesTimestamp + "-"
+ fileIndex.incrementAndGet());
return currentFile;
}
public File getCurrentFile()
{
if (currentFile == null)
{
return nextFile();
}
return currentFile;
}
}
Apache Flumeエージェントの設定の詳細は、Apache Flumeのドキュメントを参照してください。
Flumeエージェントの起動
-
/home/oracle/flume
ディレクトリで、次のコマンドを使用してエージェントを起動する、flume_frs.sh
というシェル・スクリプトを作成します。flume-ng agent --conf conf --conf-file flume_frs.conf --name oggfrs -Dflume.root.logger=INFO,console
-
chmod +x flume_frs.sh
を使用して、スクリプトを実行可能ファイルにします。 -
出力ディレクトリ
/u01/flumeOut/movidemo/movie
を作成します。 -
スクリプトを実行してエージェントを起動します。エージェントが正常に起動する際に、次のようなメッセージが表示されます。
16/10/17 10:22:28 INFO node.AbstractConfigurationProvider: Creating channels 16/10/17 10:22:28 INFO channel.DefaultChannelFactory: Creating instance of channel memoryChannel type memor; 16/10/17 10:22:28 INFO node.AbstractConfigurationProvider: Created channel memoryChannel 16/10/17 10:22:28 INFO source.DefauttSourceFactory: Creating instance of source rpcSource, type avro 16/10/17 10:22:28 INFO sink.DefaultSinkFactory: Creating instance of sink: frl, type: file_roll 16/10/17 10:22:28 INFO node.AbstractConfigurationProvider: Channel memoryChannel connected to frpcSource, frl] 16/10/17 10:22:28 INFO node.Application: Starting new configuration:{ sourceRunners:(rpcSource=EventerivenSourceRunner: { source:Avro source rpcSource: { bindAddress: 0.0.0.0, port: 41414 } II sinkRunners:{fr1=Sin Runner: { policy:org.apacheilume.sink.DefaultSinkProcessorD7fde4dbb counter6roup:( name:null counters:() )) channels: (memoryChannel=org.apacheilume.channelmemoryChannel(name: memoryChannel)) 16/10/17 10:22:28 INFO node.Application: Starting Channel memoryChannel 16/10/17 10:22:28 INFO instrumentation.MonitoredCounter6roup: Monitored counter group for type: CHANNEL, name: memoryChannel: Successfully registered new N8ean. 16/10/17 10:22:28 INFO instrumentation.monitoredCounter6roup: Component type: CHANNEL, name: memorychannel started 16/10/17 10:22:28 INFO node.Application: Starting Sink frl 16/10/17 10:22:28 INFO sink.RollingFilesink: Starting org.apacheilume.sink.RollingFileSink(name:fr1, chann el:memoryChannel)... 16/10/17 10:22:28 INFO instrumentation.MonitoredCounterGroup: Monitored counter group for type: SINK, name: fr1: Successfully registered new Mean. 16/10/17 10:22:28 INFO instrumentation.HonitoredCounterGroup: Component type: SINK, name: frl started 16/10/17 10:22:28 INFO node.Application: Starting Source rpcSource 16/10/17 10:22:28 INFO sink.RollingFileSink: RottingFileSink fr1 started. 16/10/17 10:22:28 INFO source.AvroSource: Starting Avro source rpcSource: { bindAddress: 0.0.0.0, port: 414 14 }... 16/10/17 10:22:28 INFO instrumentation.MonitoredCounter6roup: Monitored counter group for type: SOURCE, name: rpcSource: Successfully registered new Mean. 16/10/17 10:22:28 INFO instrumentation.MonitoredCounter6roup: Component type: SOURCE, name: rpcSource start ed 16/10/17 10:22:28 INFO source.AvroSource: Avro source rpcSource started.
出力ディレクトリには、ファイル・ロール・シンクによって生成された3つのファイルが表示されます。
$ pwd
/u01/ogg-bd/flumeOut/moviedemo/movie
$ ls -l
total 0
-rw-r--r--. 1 oracle oinstall 0 Oct 17 10:22 1476714148291-1
-rw-r--r--. 1 oracle oinstall 0 Oct 17 10:24 1476714148291-2
-rw-r--r--. 1 oracle oinstall 0 Oct 17 10:26 1476714148291-3
注意:
ファイル・ロール・シンクは、Oracle GoldenGateアクティビティがない場合でも、Flumeエージェント構成ファイルで指定された間隔で新しいファイルを作成します。Oracle GoldenGateの起動およびテスト
-
構成を開始してテストするには、ターゲットのOracle GoldenGateインスタンスを選択し、Oracle GoldenGate Managerが
RUNNING
状態であることを確認します。GGSCI (bigdatalite.localdomain) 2> status manager Manager is running (IP port bigdatalite.localdomain.7810, Process ID 10507). GGSCI (bigdatalite.localdomain) 3>
-
ディレクトリを変更してソースOracle GoldenGateインスタンスを選択し、
GGSCI
を起動してからExtractおよびExtract Data Pumpを起動します(まだ実行されていない場合)。 -
Oracle GoldenGateターゲットで、
rflume
Replicatを起動します。コマンドstatus rflume
を実行すると、RUNNING
状態で表示されます。GGSCI (bigdatalite.localdomain) 5> start rflume Sending START request to MANAGER ... REPLICAT RFLUME starting GGSCI (bigdatalite.localdomain) 6> status rflume REPLICAT RFLUME: RUNNING
Flumeエージェントには、ReplicatがFlumeソースに接続していることが示されます。
16/10/17 12:06:17 INFO ipc.NettyServer: [id: 0x8008c345, /127.0.0.1:25167 => /127.0.0.1:41414] OPEN 16/10/17 12:06:17 INFO ipc.NettyServer: [id: 0x8008c345, /127.0.0.1:25167 => /127.0.0.1:41414] BOUND: /127. 0.0.1:41414 16/10/17 12:06:17 INFO ipc.NettyServer: [id: 0x8008c345, /127.0.0.1:25167 => /127.0.0.1:41414] CONNECTED: / 127.0.0.1:25167
-
Oracleデータベースに格納されているデータがFlumeファイル・ロール・シンクを介してフローすることを確認するには、
sqlplus
またはSQL Developer
を使用してデータを生成します。INSERT INTO "MOVIEDEMO"."MOVIE" (MOVIE_ID, TITLE, YEAR, BUDGET, GROSS, PLOT_SUMMARY) VALUES ('1173971','Jack Reacher: Never Go Back', '2016','96000000','0','Jack Reacher must uncover the truth behind a major government conspiracy in order to clear his name. On the run as a fugitive from the law, Reacher uncovers a potential secret from his past that could change his life forever.'); INSERT INTO "MOVIEDEMO"."MOVIE" (MOVIE_ID, TITLE, YEAR, BUDGET, GROSS, PLOT_SUMMARY) VALUES ('1173972','Boo! A Madea Holloween', '2016','0','0','Madea winds up in the middle of mayhem when she spends a haunted Halloween fending off killers, paranormal poltergeists, ghosts, ghouls and zombies while keeping a watchful eye on a group of misbehaving teens.'); INSERT INTO "MOVIEDEMO"."MOVIE" (MOVIE_ID, TITLE, YEAR, BUDGET, GROSS, PLOT_SUMMARY) VALUES ('1173973','Like Stars on Earth', '2007','0','1204660','An eight-year-old boy is thought to be lazy and a trouble-maker, until the new art teacher has the patience and compassion to discover the real problem behind his struggles in school.'); commit;
-
Oracle GoldenGateターゲットでGGSCI
view report rflume
コマンドを実行します。出力には、データが取得されてOracle GoldenGate Replicatに送信されたことが示されます。2016-10-17 12:36:33 INFO OGG-06505 MAP resolved (entry orcl.moviedemo.movie ): MAP "ORCL"."MOVIEDEMO"."MOVIE" TARGET orcl.moviedemo.movie. 2016-10-17 12:36:33 INFO OGG-02756 The definition for table ORCL.MOVIEDEMO. MOVIE is obtained from the tail file. 2016-10-17 12:36:33 INFO OGG-06511 Using following columns in default map by name: MOVIE_ID, TITLE, YEAR, BUDGET, GROSS, PLOT_SUMMARY. 2016-10-17 12:36:33 INFO OGG-06510 Using the following key columns for targ et table orcl.moviedemo.movie: MOVIE_ID. GGSCI (bigdatalite.localdomain) 11>
データを含むファイルは、Flumeファイル・ロール・シンク出力ディレクトリにあります。
-rw-r--r--. 1 oracle oinstall 0 Oct 17 12:15 1476720205641-7 -rw-r--r--. 1 oracle oinstall 0 Oct 17 12:17 1476720205641-8 -rw-r--r--. 1 oracle oinstall 0 Oct 17 12:19 1476720205641-9 -rw-r--r--. 1 oracle oinstall 0 Oct 17 12:21 1476720205641-10 -rw-r--r--. 1 oracle oinstall 0 Oct 17 12:23 1476720205641-11 -rw-r--r--. 1 oracle oinstall 0 Oct 17 12:25 1476720205641-12 -rw-r--r--. 1 oracle oinstall 0 Oct 17 12:27 1476720205641-13 -rw-r--r--. 1 oracle oinstall 0 Oct 17 12:29 1476720205641-14 -rw-r--r--. 1 oracle oinstall 0 Oct 17 12:31 1476720205641-15 -rw-r--r--. 1 oracle oinstall 0 Oct 17 12:33 1476720205641-16 -rw-r--r--. 1 oracle oinstall 1723 Oct 17 12:36 1476720205641-17 -rw-r--r--. 1 oracle oinstall 0 Oct 17 12:37 1476720205641-18 -rw-r--r--. 1 oracle oinstall 0 Oct 17 12:39 1476720205641-19 -rw-r--r--. 1 oracle oinstall 0 Oct 17 12:41 1476720205641-20 -rw-r--r--. 1 oracle oinstall 0 Oct 17 12:43 1476720205641-21 [oracle@bigdatalite movie]$
ファイル・リスト内の空でないファイルはデリミタ付きテキスト・ファイルであるため、UnixおよびLinuxコマンドcat: cat 1476720205641-17
を使用して内容をディスプレイに出力できます。
I|ORCL.MOVIEDEMO.110V1E12016-10-17 16:27:14.00095012016-10-18T10:49:14.338000|00000000040000002985
|1173981|Jack Reacher: Never Go Back|2016|96000000|0|Jack Reacher must uncover the truth behind a
major government conspiracy in order to clear his name. On the run as a fugitive from the law, R
eacher uncovers a potential secret from his past that could change his life forever.
I|ORCL.MOVIEDEMO.MOVIE|2016-10-17 16:27:14.000950|2016-10-18T10:49:14.339000|00000000040000003417
|1173982IBoo! A Madea Holloween|2016|0|0|Madea winds up in the middle of mayhem when she spends a
haunted Halloween fending off killers, paranormal poltergeists, ghosts, ghouls and zombies while
keeping a watchful eye on a group of misbehaving teens.
I|ORCL.MOVIEDEMO.MOVIE|2016-10-17 16:27:14.000950|2016-10-18T10:49:14.339001|00000000040000003789
|1173983|Like Stars on Earth|2007|0|1204660|An eight-year-old boy is thought to be lazy and a tro
uble-maker, until the new art teacher has the patience and compassion to discover the real proble
m behind his struggles in school.
[oracle@bigdatalite movie]$
Apache Flumeでキューに入っているデータをさらに処理する準備ができました。
親トピック: 高度な機能
6.8 Flumeハンドラのトラブルシューティング
トピック:
6.8.1 Javaクラスパス
Javaクラスパスの問題が一般的です。Oracle GoldenGate Java log4j
ログ・ファイルのClassNotFoundException
によって、クラスパスに問題があることが示されます。Java log4j
ログ・ファイルを使用して、この問題のトラブルシューティングを行うことができます。ログ・レベルをDEBUG
に設定すると、ログ・ファイルに記録されるgg.classpath
オブジェクトで参照されているJARそれぞれを記録できます。これにより、必要な依存性JARがすべて解決されることを確認できます。詳細は、「クラスパス構成」を参照してください。
親トピック: Flumeハンドラのトラブルシューティング
6.8.2 Flumeフロー制御の問題
状況によっては、Flumeシンクがメッセージをディスパッチするよりも速く、FlumeハンドラがFlumeソースを書き込む場合があります。この場合、Flumeハンドラはしばらく動作しますが、いったんFlumeがメッセージを受け付けなくなると、異常終了します。Oracle GoldenGate Javaログ・ファイルに記録された原因はEventDeliveryException
である可能性があり、これはFlumeハンドラがイベントを送信できなかったことを示します。問題の正確な原因は、Flumeのログを確認してください。FlumeエージェントでOutOfMemoryException
が発生している場合には、Flumeチャネルを構成して、Javaヒープの容量を増やすか、Javaヒープ・サイズを増やすことができます。これで問題が解決しない場合もあります。Flumeシンクがメッセージをディスパッチするよりも速く、FlumeハンドラがFlumeソースにデータをプッシュする場合は、いずれの変更を加えても、エラーになるまでFlumeハンドラが稼働できる期間が延長するのみであることがあります。
親トピック: Flumeハンドラのトラブルシューティング
6.8.3 Flumeエージェント構成ファイルが見つからない
Flumeエージェント構成ファイルがクラスパスに存在しない場合、Flumeハンドラが起動時に異常終了します。その結果、通常は、Flumeプロデューサのプロパティをロードする際のエラーとしてConfigException
で問題が報告されます。gg.handler.
name
をチェックします。 RpcClientProperites
構成ファイルで、Flumeエージェント・プロパティ・ファイルの命名が正しいことを確認します。Oracle GoldenGateのgg.classpath
プロパティをチェックして、Flumeエージェント・プロパティ・ファイルを含むディレクトリがクラスパスに存在することを確認します。また、クラスパスをチェックして、Flumeエージェント・プロパティ・ファイルへのパスがワイルドカード((*)
)文字で終わっていないことも確認します。
親トピック: Flumeハンドラのトラブルシューティング
6.8.4 Flume接続の例外
Flumeハンドラは、Flumeソースに接続できない場合、起動時に異常終了します。この問題の根本原因は、Oracle GoldenGate Java log4j
ファイルでIOExeption
としてレポートされ、特定のホストおよびポートでFlumeに接続できなかったことを示します。次の両方のことに該当することを確認します。
-
Flumeエージェント・プロセスが実行されていること
-
FlumeハンドラがアクセスするFlumeエージェント構成ファイルに、正しいホストとポートが指定されていること。
親トピック: Flumeハンドラのトラブルシューティング