HBaseハンドラでは、既存のOracle GoldenGateでサポートされているソースからHBase表に移入することができます。
内容は次のとおりです。
HBaseは、リレーショナル・データベース管理システム(RDBMS)の機能をほとんどエミュレートできるオープン・ソースのビッグ・データ・アプリケーションです。Hadoopは、大量の非構造化データを格納する目的で設計されています。逆に、データベースに格納され、Oracle GoldenGateを通じて複製されるデータは、高度に構造化されています。HBaseには、データの重要な構造を維持しながら、Hadoop Distributed File System (HDFS)によって提供される水平方向のスケーリングの利点を活かす方法があります。
HBaseハンドラは、ソース証跡ファイルから操作を取得し、対応する表をHBaseに作成してから、変更取得データをその表にロードします。
HBase表名
HBaseに作成される表名は、ソース証跡ファイルからの操作の対応する表名にマップされます。大文字と小文字は区別されます。
HBase表のネームスペース
表名が2つの部分(スキーマ名と表名)からなる場合、スキーマ名はHBase表のネームスペースにマップされます。Catalog.Schema.MyTable
のように表名が3つの部分からなる場合、作成されるHBaseネームスペースはCatalog_Schema
となります。HBase表のネームスペースは大/小文字が区別されます。NULL
スキーマ名もサポートされており、デフォルトのHBaseネームスペースにマップされます。
HBase行キー
HBaseには、データベースの主キーと似たHBase行キーという概念があります。HBase行キーは、表の行を示す一意の識別子です。HBaseがサポートするのは1行当たり1つの行キーのみで、空またはNULL
にはできません。HBaseハンドラは、主キー値をHBase行キー値にマップします。ソース表に複数の主キーがある場合、主キー値は連結され、パイプ区切り文字(|
)で区切られます。HBase行キーの区切り文字を構成できます。
ソース表には、少なくとも1つの主キー列が必要です。主キーのない表を複製すると、HBaseハンドラが異常終了します。
HBaseの列ファミリ
HBaseには、列ファミリという概念があります。列ファミリは、列データをグループ化するメカニズムです。サポートされるのは、1つの列ファミリのみです。HBaseの各列は、1つの列ファミリに属している必要があります。HBaseハンドラには、表ごとに1つの列ファミリがあり、デフォルトはcf
です。列ファミリ名は、ユーザーが設定を変更できます。ただし、いったん特定の列ファミリ名で表を作成した場合、先にその表を変更または削除せずにHBaseサンプルで列ファミリ名を再構成すると、Oracle GoldenGate Replicatプロセスが異常終了します。
HBaseは、HBaseハンドラプロセスと同じ場所に配置して稼働しているか、HBaseハンドラ・プロセスをホストしているマシンからネットワーク接続できる別のマシン上で稼働している必要があります。また、HDFSのリポジトリとして機能している基礎となるHDFSの単一インスタンスまたはクラスタ化されたインスタンスが稼働している必要があります。
ここでは、HBaseハンドラのコンポーネントの構成とハンドラの実行について説明します。
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
HBaseハンドラの構成可能な値は次のとおりです。これらのプロパティは、Javaアダプタ・プロパティ・ファイルにあります(Replicatプロパティ・ファイルにはありません)。
表3-1 HBaseハンドラの構成プロパティ
プロパティ | 必須/オプション | 有効な値 | デフォルト | 説明 |
---|---|---|---|---|
|
必須 |
任意の文字列 |
いいえ |
HBaseハンドラの名前を指定します。HBaseハンドラ名は、この表にリストしたプロパティ名の一部になります。 |
|
必須 |
|
|
HBaseハンドラを選択し、変更データ取得をHBaseにストリーミングします |
|
オプション |
HBase列ファミリ名として有効な任意の文字列 |
|
列ファミリは、HBaseで列をグループ化するメカニズムです。12.2リリースでは、HBaseハンドラは1つの列ファミリのみサポートします。 |
|
オプション |
|
|
trueは、HBaseへの出力にトークン値が含まれることを示します。falseは、トークン値が含まれないことを意味します。 |
|
オプション |
任意の文字列 |
|
マップにおけるキーと値の間の区切り文字を指定します。たとえば、 |
|
オプション |
任意の文字列 |
|
マップにおけるキー/値ペアの間の区切り文字を指定します。たとえば、 |
|
オプション |
Javaでサポートされるエンコーディング名または別名Foot 1。サポートされるオプションのリストは、Oracle JavaドキュメントのWebサイトを参照してください
|
Oracle GoldenGateプロセスをホストしているマシンのネイティブのシステム・エンコーディング |
HBaseに書き込まれる値のエンコーディングを決めます。HBase値はバイトとして書き込まれます。 |
|
オプション |
|
|
HBaseハンドラが、主キーを変更する更新操作をどのように処理するかに関する構成を指定します。主キーを操作するとHBaseハンドラで問題が起きることがあるので、ユーザーは特に慎重を期する必要があります。
|
|
オプション |
任意の文字列 |
|
列の値がNULLの場合にHBaseに送信される内容を構成できます。デフォルトは |
|
オプション |
|
いいえ |
このプロパティを |
|
オプション( |
Kerberos |
- |
|
|
オプション( |
|
- |
Kerberos認証で用いるKerberosプリンシパル名。 |
|
オプション |
|
|
この構成プロパティを |
|
オプション |
任意の文字列 |
| |
HBase |
脚注1
Javaの詳細は、https://docs.oracle.com/javase/8/docs/technotes/guides/intl/
でJava国際化のサポートを参照してください。
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ハンドラがフラッシュ・コールを実行し、バッファされていたデータをHBaseリージョン・サーバーにフラッシュします。書込み永続性を維持するために、これを実行する必要があります。HBaseリージョン・サーバーへのフラッシュは負荷の高いコールなので、Replicat GROUPTRANSOPS
パラメータを使用して、ソース証跡ファイルの複数の小さいトランザクションを、HBaseに適用される1つの大きいトランザクションにグループ化すると、パフォーマンスが大幅に向上することがあります。Replicat構成ファイルで構成構文を追加すると、Replicatベースのバッチ処理を使用できます。
複数のトランザクションからの操作は、大きいトランザクションにまとめられますが、これはトランザクション・コミットが実行されたグループ化されたトランザクションの最後だけです。
HBase接続は、Kerberos認証を使用して保護できます。HBaseクラスタを保護するには、HBaseリリースの関連するドキュメントに従ってください。HBaseハンドラは、Kerberosで保護されたクラスタに接続できます。HBase hbase-site.xml
がハンドラのクラスパスにあり、hbase.security.authentication
プロパティをkerberos
に、hbase.security.authorization
プロパティをtrue
に設定する必要があります。
また、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}.
Oracle GoldenGate 12.2は、証跡にメタデータを含み、実行時にメタデータ変更イベントを処理できます。HBaseハンドラも、実行時にメタデータ変更イベントを処理できます。最も一般的なシナリオの1つは、新しい列の追加です。HBaseでの結果としては、メタデータ変更イベントの後に、新しい列とそれに関連するデータのストリーミングが始まります。
メタデータ変更イベントを有効にするには、レプリケーション・チェーン全体をOracle GoldenGate 12.2にアップグレードする必要があることに注意してください。12.2のHBaseハンドラは、Oracle GoldenGate 12.1以上で生成された証跡ファイルを処理できます。ただし、これらの証跡ファイルには証跡のメタデータが含まれていないため、メタデータ変更イベントを実行時には処理できません。
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ハンドラ・クライアント依存性」には、サポートされている各バージョンのHBaseクライアントJARのリストがあります。hbase-site.xml
、または1つ以上の必須のクライアントJARがクラスパスに含まれていません。HBaseハンドラのクラスパスの構成については、「クラスパス構成」を参照してください。
HBaseハンドラのトラブルシューティングは、Java log4j
ファイルの内容から始まります。Javaロギング構成にある指示に従って、Java log4j
ログ・ファイルを正しく生成するようにランタイムを構成してください。その他のヘルプについては、次のトピックを確認してください。
Javaクラスパスは、非常によくある問題の1つです。クラスパスに問題があることは、Java log4j
ログ・ファイルの、ClassNotFoundException
でわかります。この問題のトラブルシューティングに、Java log4j
ログ・ファイルを使用できます。ログ・レベルをDEBUG
に設定すると、ログ・ファイルに記録されるgg.classpath
オブジェクトで参照されているjarそれぞれを記録できます。DEBUG
レベルのロギングを有効にし、ログ・ファイルで次のようなメッセージを探すと、必要な依存性jarがすべて解決されることを確認できます。
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"
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が稼働していることを確認してください。
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]