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

前
次

3 HBaseハンドラの使用

Oracle GoldenGate for Big Data Handler for HBaseでは、既存のOracle GoldenGateでサポートされている既存のソースから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ハンドラ構成プロパティhBase98Compatibletrueに設定して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国際化のサポートを参照してください。