6 Flumeハンドラの使用

Flumeハンドラを使用して、変更キャプチャ・データをFlumeソース・データベースにストリーミングする方法について説明します。

トピック:

6.1 概要

Apache Flumeは、様々なソースから集中化されたデータ・ストアに大量のストリーミング・データを収集、集計およびトランスポートするためのデータ収集メカニズムです。

Flumeハンドラは、Oracle GoldenGate証跡からFlumeソースに変更キャプチャ・データをストリーミングするために設計されています。Apache Flumeは、ビッグ・データ・アプリケーションにデータをストリーミングすることを主な目的とするオープン・ソース・アプリケーションです。

Flumeエージェントの基本アーキテクチャは次のとおりです。

図6-1 Flumeエージェントのアーキテクチャ

図6-1の説明が続きます
「図6-1 Flumeエージェントのアーキテクチャ」の説明

データ・ジェネレータ

データ・ジェネレータは、Flumeエージェントによって収集されるデータを作成するデータ・フィードです。

Flumeエージェント

Flumeエージェントは、データ・ジェネレータ・クライアントまたは他のエージェントからイベントを受信し、それを宛先シンクまたはエージェントに転送するJVMデーモン・プロセスです。Flumeエージェントは、次のように構成されています。

ソース
ソース・コンポーネントはデータ・ジェネレータからデータを受け取り、Flumeイベントの形式で1つ以上のチャネルに転送します。
チャネル
チャネルは、ソースから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)を参照してください。

トピック:

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クライアント・ライブラリをコピーする必要があります。

6.2.2 Flumeハンドラ構成

Flumeハンドラの構成可能な値は次のとおりです。これらのプロパティは、Javaアダプタ・プロパティ・ファイルにあります(Replicatプロパティ・ファイルにはありません)。

Flumeハンドラの選択を有効にするには、まずgg.handler.jdbc.type=flumeおよびその他のFlumeプロパティを次のように指定してハンドラ・タイプを構成する必要があります。

プロパティ名 プロパティ値 必須/オプション デフォルト 説明

gg.handlerlist

flumehandler (任意の名前を選択)

はい

 

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

gg.handler.name.type

flume

はい

 

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

gg.handler.name.format

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

いいえ。

デフォルトはdelimitedtext

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

  • avro_row

  • avro_op

  • delimitedtext

  • xml

  • json

  • json_row

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

gg.handler.name.RpcClientPropertiesFile

任意のファイル名

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

 

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

gg.handler.name.mode

op|tx

いいえ。デフォルトはop

 

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

gg.handler.name.EventHeaderClass

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

いいえ。デフォルトはDefaultFlumeEventHeader

 

flumeイベントに追加するヘッダー・プロパティを定義するために使用するクラス。

gg.handler.name.EventMapsTo

op|tx

いいえ。デフォルトはop

 

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

gg.handler.name.PropagateSchema

true|false

いいえ。デフォルトはfalse

 

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

gg.handler.name.includeTokens

true|false

いいえ。デフォルトはfalse

 

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

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

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操作フォーマッタにのみ適用)

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回のトランザクションで処理される操作の数が増えることに注意してください。

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回のトランザクションで処理される操作の数が増えることに注意してください。

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

パフォーマンス向上のために、次のオプションを考慮してください。

  • Replicatベースのグループ化を設定する

  • gg.handler.flume_handler_name EventMapsTo=txでトランザクション・モードを設定する

  • Oracle GoldenGate Javaプロパティ・ファイルで内のJVMの最大ヒープ・サイズを増やす(Flumeハンドラの最大ヒープ・サイズがパフォーマンスに影響する可能性があります)

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

Flumeハンドラは、メタデータ変更イベントに適応します。 メタデータ変更イベントを処理するには、ソース証跡ファイルに、その証跡ファイルのメタデータが必要です。ただし、この機能はソースで複製されるデータベースとアップストリームのOracle GoldenGate Captureプロセスを利用してDDLイベントを取得し、複製します。この機能は、Oracle GoldenGateのすべてのデータベース実装で利用できるわけではありません。DDLレプリケーションがサポートされているかどうかを判別するには、適切なデータベース用のOracle GoldenGateインストレーションおよび構成ガイドを参照してください。

メタデータの変更がソースで発生する場合、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

6.6.2 Thrift Flumeソース

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

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

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を設定することから始めます。

  1. ソースOracle DatabaseのOracle GoldenGateをインストールします。
  2. データベース設定を変更してExtractを有効にします。
  3. GoldenGate変更Extractを作成して、ほぼリアルタイムのトランザクション・データをREDOファイルから取得します。

この例で構成するOracle GoldenGateアーキテクチャは次のとおりです。

図6-2 Oracle GoldenGateのデプロイメント

図6-2の説明が続きます
「図6-2 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 出力のフォーマットを設定します。サポートされるフォーマッタは次のとおりです。
  • avro

  • row

  • avro_op

  • delimitedtext

  • xml

  • json

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クラスおよびパッケージを指定します。クラスパス設定には次のものを含める必要があります。
  • Flumeエージェント構成ファイルを含むディレクトリの場所。
  • Big Data AdapterがFlumeと連携するために必要なFlumeクライアントjarのリスト。
この例では、FlumeクライアントJARが/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エージェントの起動

  1. /home/oracle/flumeディレクトリで、次のコマンドを使用してエージェントを起動する、flume_frs.shというシェル・スクリプトを作成します。

    flume-ng agent --conf conf --conf-file flume_frs.conf --name oggfrs -Dflume.root.logger=INFO,console
  2. chmod +x flume_frs.shを使用して、スクリプトを実行可能ファイルにします。

  3. 出力ディレクトリ/u01/flumeOut/movidemo/movieを作成します。

  4. スクリプトを実行してエージェントを起動します。エージェントが正常に起動する際に、次のようなメッセージが表示されます。

    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の起動およびテスト

  1. 構成を開始してテストするには、ターゲットの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> 
  2. ディレクトリを変更してソースOracle GoldenGateインスタンスを選択し、GGSCIを起動してからExtractおよびExtract Data Pumpを起動します(まだ実行されていない場合)。

  3. 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
  4. 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;
  5. 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がすべて解決されることを確認できます。詳細は、「クラスパス構成」を参照してください。

6.8.2 Flumeフロー制御の問題

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

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

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

6.8.4 Flume接続の例外

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

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

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

6.8.5 その他のエラー

Oracle GoldenGate Java log4jファイルの内容を確認して、その他の問題を特定します。