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

前
次

2 HDFSハンドラの使用

この章では、HDFSの機能について説明し、その機能の理解に役立つ例を示します。Oracle GoldenGate for Big Data Handler for HDFSは、変更取得データをHadoop Distributed File System (HDFS)にストリーミングする目的で設計されています。

この章の内容は次のとおりです。

2.1 概要

Hadoop Distributed File System (HDFS)は、ビッグ・データのための主要なアプリケーションです。Hadoopは通常、Hadoopクラスタとして機能する複数のマシンにインストールされます。Hadoopでは、きわめて大量のデータをクラスタに格納でき、そのデータはクラスタ内のマシン全体で水平方向にスケーリングします。そのうえで、様々なビッグ・データ・アプリケーションを使用してそのデータの分析を実行できます。

2.2 Hiveハンドラのサポート

Oracle GoldenGate for Big Dataリリース12.2.0.1には、Oracle GoldenGate for Big Dataリリース12.1.2.1.xに含まれていたHiveハンドラが含まれていません。12.1.2.1.xのHiveハンドラは、実際にはHiveとの直接統合に対応していません。Hiveハンドラの機能は、表ごとにパーティション化し、Hiveに適した区切りテキスト形式で、操作データをソース証跡ファイルからHDFSにロードすることです。12.2.0.1のHDFSハンドラには、以前の12.1.2.1.x Hiveハンドラの機能がすべて用意されています。

Hive統合により、表を作成してDDLイベント発生時に表定義を更新できます。この機能は、Avroオブジェクト・コンテナ・ファイル形式でフォーマットされたデータにのみ制限されます。詳細は、「Avroオブジェクト・コンテナ・ファイル形式でのHDFSの書き込み」および「HDFSハンドラ構成」を参照してください。

2.3 順序ファイル形式でのHDFSへの書き込み

HDFS SequenceFileはバイナリ・キーと値のペアで構成されているフラット・ファイルです。gg.handler.name.formatプロパティをsequencefileに設定してデータをSequenceFile形式で書き込むことができます。レコードのkey部分はnullに設定され、実際のデータはvalue部分に設定されます。

Hadoop SequenceFileの詳細は、https://wiki.apache.org/hadoop/SequenceFileを参照してください。

2.3.1 Hiveとの統合

Hive表を作成するDDLには、Hiveで順序ファイルを使用するためのSTORED as sequencefileが含まれています。表作成スクリプトのサンプルを次に示します。

CREATE EXTERNAL TABLE table_name (
  col1 string,
  ...
  ...
  col2 string)
ROW FORMAT DELIMITED
STORED as sequencefile
LOCATION '/path/to/hdfs/file';

注意:

ファイルがHiveで使用されるようにする場合は、gg.handler.name.partitionByTableプロパティをtrueに設定する必要があります。

2.3.2 データ形式の理解

データは各レコードのvalue部分に書き込まれ、区切りText Formatで表されます。区切りテキスト・フォーマッタで説明されているすべてのオプションが、HDFS SequenceFileにデータを書き込む際に適用されます。

次に例を示します。

gg.handler.name.format=sequencefile
gg.handler.name.format.includeColumnNames=true
gg.handler.name.format.includeOpType=true
gg.handler.name.format.includeCurrentTimestamp=true
gg.handler.name.format.updateOpKey=U

2.4 実行時の前提条件

HDFSハンドラを確実に実行するには、Hadoop単一インスタンスまたはHadoopクラスタをインストールして実行する必要があり、HDFSハンドラを実行しているマシンからネットワークにアクセスできなければなりません。Apache Hadoopはオープン・ソースであり、http://hadoop.apache.org/でダウンロードできます。単一ノード・クラスタ(疑似分散操作モードとも言う)またはクラスタ化設定(完全分散操作モードとも言う)のインストール方法は、「Getting Started」リンクをたどってください。

2.4.1 クラスパス構成

HDFSハンドラをHDFSに接続して実行するには、gg.classpath構成変数に2つのものを含める必要があります。1つ目はHDFS core-site.xmlファイル、2つ目はHDFSクライアントjarです。HDFSクライアントjarは、HDFSハンドラが接続するHDFSのバージョンと一致する必要があります。必要なクライアントJARファイルのバージョン別リストは、「HDFSハンドラ・クライアント依存性」を参照してください。

core-site.xmlファイルのデフォルトの場所は、次のとおりです。

Hadoop_Home/etc/hadoop

HDFSクライアントjarのデフォルトの場所は次のディレクトリです。

Hadoop_Home/share/hadoop/common/lib/*

Hadoop_Home/share/hadoop/common/*

Hadoop_Home/share/hadoop/hdfs/lib/*

Hadoop_Home/share/hadoop/hdfs/*

gg.classpathは、指示に従って正確に構成する必要があります。core-site.xmlのパス指定には、ワイルドカードを付けずにcore-site.xmlファイルがあるディレクトリのパスを含めてください。core-site.xml ファイルのパスにワイルドカード(*)を含めると、選択されなくなります。逆に、依存関係jarのパス指定には、そのディレクトリにあるjarファイルがすべて関連するクラスパスに含まれるように、ワイルドカード(*)を含める必要があります。*.jarは使用しないでください正しく構成したgg.classpath変数の例は、次のようになります。

gg.classpath=/ggwork/hadoop/hadoop-2.6.0/etc/hadoop:/ggwork/hadoop/hadoop-2.6.0/share/hadoop/common/lib/*:/ggwork/hadoop/hadoop-2.6.0/share/hadoop/common/*:/ggwork/hadoop/hadoop-2.6.0/share/hadoop/hdfs/*:/ggwork/hadoop/hadoop-2.6.0/share/hadoop/hdfs/lib/*

Kerberosセキュリティを有効にする場合には、HDFS構成ファイルhdfs-site.xmlもクラスパスに存在する必要があります。hdfs-site.xmlファイルは、デフォルトではHadoop_Home/etc/hadoopディレクトリに配置されます。HDFSハンドラがHadoopと同じ場所に配置されていない場合には、どちらか、または両方のファイルを別のマシンにコピーできます。

2.4.2 プラガブル・フォーマッタ

HDFSハンドラは、次のものを含むビッグ・データ・プラガブル・ハンドラをすべてサポートします。

  • JSON

  • 区切りテキスト

  • Avro行

  • Avro Operation

  • Avroオブジェクト・コンテナ・ファイル行

  • Avroオブジェクト・コンテナ・ファイル操作

  • XML

フォーマッタの詳細は、「プラガブル・フォーマッタの使用」を参照してください。

2.4.3 HDFSハンドラ構成

Oracle GoldenGate for Big DataのHDFSハンドラの構成プロパティについて、この項で詳細に説明します。

表2-1 HDFSハンドラの構成プロパティ

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

gg.handlerlist

必須

任意の文字列

いいえ

HDFSハンドラの名前を指定します。HDFSハンドラ名は、この表にリストしたプロパティ名の一部になります。

gg.handler.name.type=hdfs

必須

-

-

HDFSハンドラを選択し、変更データ取得をHDFSにストリーミングします。

gg.handler.name.mode

オプション

tx | op

op

ハンドラの操作(op)モードかトランザクション(tx)モードかを選択します。ほぼどんな場合でも、トランザクション・モードのほうがパフォーマンスは良くなります。

gg.handler.name.maxFileSize

オプション

デフォルトの測定単位はバイトです。kmまたはgがそれぞれキロバイト、メガバイト、ギガバイトを表すように指定できます。有効な値は、1000010k100m1.1gなどです。

1g

作成されるHDFSファイルの最大ファイル・サイズを選択します。

gg.handler.name.rootFilePath

オプション

HDFSで有効な任意のパス名

/ogg

HDFSハンドラは、データ・ストリーミングをHDFSに格納するために、HDFSにサブディレクトリを作成し、その下にファイルを作成します。

gg.handler.name.fileRollInterval

オプション

デフォルトの測定単位はミリ秒です。mssmhがそれぞれ、ミリ秒、秒、分、時間を表すように指定できます。有効な値は、10000、10000ms、10s10m1.5hなどです。0以下の値を指定すると、ファイルのローリング・オン時間がオフになります。

ファイルのローリング・オン時間がオフ。

タイマーはHDFSファイルが作成されるときにスタートします。間隔が経過したときにまだファイルが開いている場合、そのファイルは閉じられます。新しいファイルはすぐ開かれません。新しいHDFSファイルは、ジャスト・イン・タイム・ベースで作成されます。

gg.handler.name.inactivityRollInterval

オプション

デフォルトの測定単位はミリ秒です。mssmhがそれぞれ、ミリ秒、秒、分、時間を表すように指定できます。有効な値は、1000010000ms10s10.5m1hなどです。0以下の値を指定すると、ファイルの非アクティブ・ローリング・オン時間がオフになります。

ファイルの非アクティブ・ローリング・オン時間がオフ。

タイマーは、HDFSファイルへの前回の書込みからスタートします。HDFSファイルへの新しい書込みでカウンタが再開されます。カウンタが経過したときにまだファイルが開いている場合、そのHDFSファイルは閉じられます。新しいファイルはすぐ開かれません。新しいHDFSファイルは、ジャスト・イン・タイム・ベースで作成されます。

gg.handler.name.fileSuffix

オプション

HDFSファイル名の制限に従う任意の文字列。

.txt

これは、HDFSファイル名の最後に追加される接尾辞です。ファイル名は通常、{fully qualified table name}{current time stamp}{suffix}という形式です。

gg.handler.name.partitionByTable

オプション

true | false

true (データは表ごとにパーティション化される)

HDFSに書き込まれるデータを表ごとにパーティション化するかどうかを決定します。trueに設定すると、異なる表のデータは異なるHDFSファイルに書き込まれます。falseの場合、異なる表からのデータが同じHDFSファイルにインタレースされます。

Avroオブジェクト・コンテナ・ファイル・フォーマッタを使用するにはtrueに設定する必要があります。falseに設定すると、初期化時に構成の例外が発生します。

gg.handler.name.rollOnMetadataChange

オプション

true | false

true (HDFSファイルは、メタデータ変更イベント時にロールされます)

メタデータの変更があった場合に、HDFSファイルをロールするかどうかを決定します。trueの場合はHDFSがロールされ、falseの場合はHDFSがロールされません。

Avroオブジェクト・コンテナ・ファイル・フォーマッタを使用するにはtrueに設定する必要があります。falseに設定すると、初期化時に構成の例外が発生します。

gg.handler.name.format

オプション

delimitedtext | json | xml | avro_row | avro_op | avro_row_ocf | avro_op_ocf | sequencefile

delimitedtext

出力データのフォーマット方法について、HDFSハンドラのフォーマッタを選択します

  • delimitedtext - 区切りテキスト

  • json - JSON

  • xml - XML

  • avro_row - 行コンパクト形式のAvro

  • avro_op - 操作詳細形式のAvro

  • avro_row_ocf: Avroオブジェクト・コンテナ・ファイル形式でHDFSに書き込まれる行コンパクト形式のAvro。

  • avro_op_ocf: Avroオブジェクト・コンテナ・ファイル形式でHDFSに書き込まれる詳細形式のAvro。

  • sequencefile: 順序ファイル形式でHDFSに順番に書き込まれる区切りテキスト。

gg.handler.name.includeTokens

オプション

true | false

false

トークン・フィールドとトークン・キーや値を出力に含める場合はtrueに設定し、トークン出力を表示しない場合はfalseに設定します。

gg.handler.name.partitioner.fully_qualified_table_ name

カンマで区切られた1つ以上の列名と等しい

オプション

完全修飾の表名と列名が存在する必要があります。

-

これは、par_{column name}={column value}という形式で、HDFSのデータをサブディレクトリに分割します。

gg.handler.name.authType

オプション

kerberos

none

このプロパティを
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.schemaFilePath

オプション

null

HDFSの有効なパスに設定して、スキーム(使用可能な場合)はHDFSディレクトリに書きこまれるようにします。スキーマは現在AvroおよびJSONフォーマッタでのみ使用できます。メタデータ変更イベントが発生すると、スキーマが上書きされてスキーマの変更が反映されます。

gg.handler.name.compressionType

順序ファイル形式にのみ適用可能

オプション

block | none | record

none

Hadoop順序ファイル圧縮タイプ。gg.handler.name.formatsequencefileに設定されている場合にのみ適用可能です。

gg.handler.name.compressionCodec

順序ファイルに適用可能で、HDFSへの書き込みはAvro OCF形式のみ

オプション

org.apache.hadoop.io.compress.DefaultCodec | org.apache.hadoop.io.compress. BZip2Codec | org.apache.hadoop.io.compress.SnappyCodec | org.apache.hadoop.io.compress. GzipCodec

org.apache.hadoop.io.compress.DefaultCodec

Hadoop順序ファイル圧縮コーデック。gg.handler.name.formatsequencefileに設定されている場合にのみ適用可能です。

 

オプション

null | snappy | bzip2 | xz | deflate

null

Avro OCFフォーマッタ圧縮コード。この構成では、生成されたAvro OCFファイルに使用される圧縮ライブラリの選択を制御します。

SnappyはSnappy JARファイルにネイティブ・バイナリを含み、圧縮または圧縮解除の実行時にJava-nativeトラバーサルを実行します。Snappyを使用することで、Javaを使っているときは発生しない実行時の問題やプラットフォームの移植の問題が生じる場合があります。場合によっては、追加のテストを実施して、Snappyが必要なすべてのプラットフォームで確実に動作するか確認する必要があります。Snappyはオープン・ソース・ライブラリであるため、Oracleは必要なすべてのプラットフォームでの稼動を保証できません。

gg.handler.name.hiveJdbcUrl

オプション

Hive JDBCインタフェースを使用してHiveに接続するための有効なURL。

null (Hive統合は無効)

Avroオブジェクト・コンテナ・ファイル (OCF)フォーマッタにのみ適用できます。

この構成値では、Hive JDBCインタフェースを通じてHiveに接続するためのJDBC URLを指定します。このプロパティを使用するには、gg.classpathにHive JDBCライブラリを含める必要があります。

Hive JDBC接続は、基本の資格証明、SSL/TLS、またはKerberosを介して保護できます。基本の資格証明では、ユーザー名およびパスワードの構成プロパティが指定されます。

SSL/TLSでのHive JDBC URLの生成方法については、Hiveドキュメントを参照してください。

KerberosでのHive JDBC URLの生成方法については、Hiveドキュメントを参照してください(Hive JDBCのセキュリティにKerberosを使用する場合、HDFS接続に対してKerberosを有効にする必要があります。この場合、Hive JDBC接続は同じKerberosプリンシパルを使用してHDFS Kerberos機能でピギーバックすることができます)。

gg.handler.name.hiveJdbcUserName

オプション

Hive JDBC接続が資格証明により保護される場合の有効なユーザー名。

System.getProperty(user.name)からのJavaの呼び出し結果

Avroオブジェクト・コンテナ・ファイル (OCF)フォーマッタにのみ適用できます。

このプロパティは、hiveJdbcUrlプロパティが設定されている場合にのみ関連します。JDBC接続が資格証明により保護されている場合に、環境に必要になる場合があります。Hiveでは、Hive DDL操作がユーザーに関連付けられている必要があります。値を設定しない場合、デフォルトはJavaの呼び出しSystem.getProperty(user.name)の結果になります。

gg.handler.name.hiveJdbcPassword

オプション

完全修飾のHive JDBCドライバ・クラス名

org.apache.hive.jdbc.HiveDriver

Avroオブジェクト・コンテナ・ファイル (OCF)フォーマッタにのみ適用できます。

このプロパティは、hiveJdbcUrlプロパティが設定されている場合にのみ関連します。デフォルトはHive Hadoop2 JDBCドライバ名です。通常、このプロパティは構成が不要で、Apache Hiveに新しいJDBCドライバ・クラスが導入される場合に使用されます。

2.4.4 サンプル構成

Javaアダプタ・プロパティ・ファイルからのHDFSハンドラの構成例を次に示します。

gg.handlerlist=hdfs
gg.handler.hdfs.type=hdfs
gg.handler.hdfs.mode=tx
gg.handler.hdfs.includeTokens=false
gg.handler.hdfs.maxFileSize=1g
gg.handler.hdfs.rootFilePath=/ogg
gg.handler.hdfs.fileRollInterval=0
gg.handler.hdfs.inactivityRollInterval=0
gg.handler.hdfs.fileSuffix=.txt
gg.handler.hdfs.partitionByTable=true
gg.handler.hdfs.rollOnMetadataChange=true
gg.handler.hdfs.authType=none
gg.handler.hdfs.format=delimitedtext

HDFS統合のレプリケーション構成とJavaアダプタ・プロパティ・ファイルの例は、次のディレクトリにあります。

GoldenGate_install_directory/AdapterExamples/big-data/hdfs

2.4.5 HDFSハンドラのトラブルシューティング

HDFSハンドラのトラブルシューティングは、Java log4jファイルの内容から始まります。Javaロギング構成にある指示に従って、Java log4jログ・ファイルを正しく生成するようにランタイムを構成してください。

2.4.5.1 Javaクラスパス

前述したように、Javaクラスパスは非常によくある問題の1つです。クラスパスに問題があることは通例、Java log4jログ・ファイルの、ClassNotFoundExceptionでわかります。この問題のトラブルシューティングに、Java log4jログ・ファイルを使用できます。ログ・レベルをDEBUGに設定すると、ログ・ファイルに記録されるgg.classpathオブジェクトで参照されているjarそれぞれを記録できます。これを利用して、必要な依存性jarがすべて解決されることを確認できます。単にDEBUGレベルのロギングを有効にし、ログ・ファイルで次のようなメッセージを探すだけです。

2015-09-21 10:05:10 DEBUG ConfigClassPath:74 - ...adding to classpath: url="file:/ggwork/hadoop/hadoop-2.6.0/share/hadoop/common/lib/guava-11.0.2.jar

2.4.5.2 HDFS構成プロパティ

HDFS core-site.xmlファイル(デフォルト設定を含んでいる)の内容は、ロギング・レベルを DEBUGまたはTRACEに設定している場合に、Java log4jログ・ファイルに出力されます。これには、HDFSへの接続プロパティが示されます。Java log4jログ・ファイルで次のものを検索します。

2015-09-21 10:05:11 DEBUG HDFSConfiguration:58 - Begin - HDFS configuration object contents for connection troubleshooting.

fs.defaultFSプロパティが次のように設定されている場合(ローカル・ファイル・システムを示している)、core-site.xmlファイルはgg.classpathプロパティで適切に設定されていません。

  Key: [fs.defaultFS] Value: [file:///].  

適切にHDFSホストおよびポートが指定されたfs.defaultFSは、次のようになります。

Key: [fs.defaultFS] Value: [hdfs://hdfshost:9000].

2.4.5.3 ハンドラとフォーマッタ構成

Java log4jログ・ファイルには、HDFSハンドラおよび選択したフォーマッタの構成状態に関する情報が含まれています。この情報は、INFOログ・レベルで出力されます。サンプルの出力は、次のようになります。

2015-09-21 10:05:11 INFO  AvroRowFormatter:156 - **** Begin Avro Row Formatter -
 Configuration Summary ****
  Operation types are always included in the Avro formatter output.
    The key for insert operations is [I].
    The key for update operations is [U].
    The key for delete operations is [D].
    The key for truncate operations is [T].
  Column type mapping has been configured to map source column types to an
 appropriate corresponding Avro type.
  Created Avro schemas will be output to the directory [./dirdef].
  Created Avro schemas will be encoded using the [UTF-8] character set.
  In the event of a primary key update, the Avro Formatter will ABEND.
  Avro row messages will not be wrapped inside a generic Avro message.
  No delimiter will be inserted after each generated Avro message.
**** End Avro Row Formatter - Configuration Summary ****
 
2015-09-21 10:05:11 INFO  HDFSHandler:207 - **** Begin HDFS Handler -
 Configuration Summary ****
  Mode of operation is set to tx.
  Data streamed to HDFS will be partitioned by table.
  Tokens will be included in the output.
  The HDFS root directory for writing is set to [/ogg].
  The maximum HDFS file size has been set to 1073741824 bytes.
  Rolling of HDFS files based on time is configured as off.
  Rolling of HDFS files based on write inactivity is configured as off.
  Rolling of HDFS files in the case of a metadata change event is enabled.
  HDFS partitioning information:
    The HDFS partitioning object contains no partitioning information.
HDFS Handler Authentication type has been configured to use [none]
**** End HDFS Handler - Configuration Summary ****

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

HDFSハンドラは、書込み永続性を維持する目的で、各トランザクションの最後にHDFSデータノードにデータをフラッシュするために、HDFS書込みストリームでHDFSフラッシュ・メソッドを呼び出します。これは負荷の高いコールです。1つまたは複数の操作のトランザクションで多数のHDFSフラッシュ・コールが発生する場合には特に、パフォーマンスが悪影響を受ける可能性があります。

複数の小さいトランザクションを1つの大きいトランザクションのバッチ処理にまとめると、HDFSハンドラのパフォーマンスが大幅に向上する可能性があります。高いパフォーマンスが必要な場合には、ExtractプロセスまたはReplicatプロセスによって提供されるバッチ処理機能を構成する必要があります。詳細は、「Replicatのグループ化」の項を参照してください。

HDFSクライアント・ライブラリは、HDFSハンドラがオープンするHDFSファイル・ストリームごとにスレッドを生成します。そのため、JMVを実行するスレッドの数は、オープンしているHDFSファイル・ストリームの数に比例して増加します。オープンしているHDFSファイル・ストリームが増えると、HDFSハンドラのパフォーマンスが低下する可能性があります。ソース・レプリケーション表が多い、またはパーティション化を多用しているという理由で、多くのHDFSファイルに書き込むようHDFSハンドラを構成すると、パフォーマンスが低下することがあります。ユースケースによって、多くの表への書込みが必要な場合は、HDFSファイル・ストリームをクローズするロール・オン時間またはロール・オン非アクティブの機能を有効にすることをお薦めします。HDFSファイル・ストリームをクローズすると、HDFSクライアント・スレッドが終了し、関連するリソースをJVMが再利用できるようになります。

2.4.7 セキュリティ

HDFSクラスタは、Kerberos認証を使用して保護できます。Kerberosを使用してHadoopクラスタを保護する方法は、HDFSのドキュメントを参照してください。HDFSハンドラは、Kerberosで保護されたクラスタに接続できます。HDFS core-site.xmlがハンドラのクラスパスにあり、hadoop.security.authenticationプロパティをkerberosに、hadoop.security.authorizationプロパティをtrueに設定する必要があります。また、HDFSハンドラの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 HDFS Handler can programmatically perform the Kerberos kinit operations to obtain a Kerberos ticket

2.5 Avroオブジェクト・コンテナ・ファイル形式でのHDFSへの書き込み

HDFSハンドラには、Avroオブジェクト・コンテナ・ファイル(OCF)形式でHDFSに書き込むための特殊な機能が含まれています。このAvro OCFはAvro仕様の一部です。詳細は次の場所にあるAvroドキュメントを参照してください。

https://avro.apache.org/docs/current/spec.html#Object+Container+Files

次の理由からAvro OCF形式は最適な選択です。

  • Apache Hive (HDFSに書き込まれる未加工のAvroはHiveでサポートされない)と統合できる

  • スキーマ展開に対する適切なサポートを提供するHDFSにAvro OCF形式で書き込みできるようにするには、次の構成を行います。

行データをHDFSにAvro OCF形式で書き込むには、gg.handler.name.format=avro_row_ocfプロパティを構成します。

操作データをHDFSにAvro OCF形式で書き込むには、gg.handler.name.format=avro_op_ocfプロパティを構成します。

HDFS/Avro OCF統合には、Hiveで対応する表を作成し、メタデータ変更イベントについてスキーマを更新するためのオプション機能が含まれています。構成の項では、Hiveとの統合を有効にするプロパティに関する情報を説明しています。Oracle GoldenGate Hive統合はJDBCインタフェースを使用してHiveにアクセスするため、この統合を有効にするにはHive JDBCサーバーを実行する必要があります

2.6 HDFSハンドラの動作保証マトリクス

12.2.0.1のOracle GoldenGate for Big DataのHDFSハンドラは、次のバージョンのApache Hadoopと連携するように設計されています。

  • 2.7.x

  • 2.6.0

  • 2.5.x

  • 2.4.x

  • 2.3.0

  • 2.2.0

HDFSハンドラは、Apache Hadoopが一緒にパッケージされている次のバージョンのHortonworks Data Platform (HDP)とも連携します。

  • HDP 2.4 (HDFS 2.7.1)

  • HDP 2.3 (HDFS 2.7.1)

  • HDP 2.2 (HDFS 2.6.0)

  • HDP 2.1 (HDFS 2.4.0)

  • HDP 2.0 (HDFS 2.2.0)

HDFSハンドラは、Apache Hadoop (CDH)を含む次のバージョンのCloudera Distributionとも連携します。

  • CDH 5.7.x (HDFS 2.6.0)

  • CDH 5.6.x (HDFS 2.6.0)

  • CDH 5.5.x (HDFS 2.6.0)

  • CDH 5.4.x (HDFS 2.6.0)

  • CDH 5.3(HDFS 2.5.0)

  • CDH 5.2.x (HDFS 2.5.0)

  • CDH 5.1.x (HDFS 2.3.0)

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

メタデータ変更イベントが、HDFSハンドラによって処理されるようになりました。HDFSハンドラのデフォルトの動作では、メタデータ変更イベントが発生した場合、現在の関連ファイルがロールされます。この動作により、メタデータ変更の結果は少なくとも複数のファイルに分割できます。メタデータ変更に対するファイル・ローリングは設定変更が可能なので、オフにすることができます。

メタデータ変更イベントをサポートするには、ソース・データベースで変更を取得するプロセスが、DDL変更と証跡でのメタデータの両方をサポートする必要があります。Oracle GoldenGateでは、すべてのデータベース実装でDDLレプリケーションがサポートされているわけではありません。DDLレプリケーションがサポートされているかどうかを確認するには、データベース実装ごとのOracle GoldenGateドキュメントを参照してください。

2.8 パーティション化

HDFSハンドラは、1つ以上の列値による表データのパーティション化をサポートしています。パーティション化を有効にする構成構文は、次のとおりです。

gg.handler.name.partitioner.fully qualified table name=one mor more column names separated by commas

次の例で考えてみます。

gg.handler.hdfs.partitioner.dbo.orders=sales_region

この例では、HDFSでファイルが次のように分割されます。

/ogg/dbo.orders/par_sales_region=west/data files
/ogg/dbo.orders/par_sales_region=east/data files
/ogg/dbo.orders/par_sales_region=north/data files
/ogg/dbo.orders/par_sales_region=south/data files

パーティション化する列は、慎重に選択してください。重要なのは、値の候補が少ない(10個以下)列を選択することと、その値がグループ化とデータの分析に有意であることです。たとえばセールス地域は、パーティション化列として適切です。顧客の生年月日などは、パーティション化列に適していません。値の候補が多い列でパーティション化を構成すると、問題が起きる可能性があります。選択を誤ると、数百ものHDFSファイル・ストリームがオープンし、パフォーマンスに関する項で説明したように、パフォーマンスが低下する恐れがあります。また、パーティション化が不適切だと、データの分析を実行する際にも問題が起きます。Apache Hiveで、Hiveデータをパーティション化する場合には、WHERE句のすべてにパーティション基準を指定する必要があります。

2.9 注意点

特に一般的なのが、Javaクラスパスに関する問題です。Oracle HDFSハンドラでは、HDFSにデータをストリーミングする前提条件として、特定のHDFSクライアント・ライブラリをクラスパスで解決する必要があります。

必要なクライアントJARファイルのバージョン別リストは、「HDFSハンドラ・クライアント依存性」を参照してください。HDFSクライアントjarは、Oracle GoldenGate for Big Data製品に付属しません。HDFSハンドラは複数のバージョンのHDFSをサポートし、HDFSクライアントjarはHDFSハンドラが接続するHDFSと同じバージョンである必要があります。HDFSクライアントjarはオープン・ソースであり、Apache HadoopサイトやMaven中央リポジトリなどのサイトから無償でダウンロードできます。

HDFSへの接続を確立するには、HDFSハンドラのクラスパスにHDFS core-site.xmlファイルが存在する必要があります。core-site.xmlファイルがクラスパスに存在しない場合、HDFSクライアント・コードのデフォルトは、ローカル・ファイル・システムに書き込もうとするモードになります。HDFSではなくローカル・ファイル・システムに書き込むと、トラブルシューティングや、連絡ポイント(POC)の構築に、またはHDFS統合を確立するプロセスの手順の1つとして便利です。

もう1つ気を付けたいのは、HDFSハンドラを使用してHDFSにストリーミングされるデータは、Hiveなどのビッグ・データ分析ツールですぐには利用できない場合も多いということです。これは主に、HDFSファイルに対してオープンしている書込みストリームをHDFSハンドラが保有している場合に発生します。デフォルトでは、HDFSは128MBのブロックで書き込みます。構築中のHDFSブロックは、分析ツールが認識されないことがあります。また、HDFSシェルで-ls-cat-getの各コマンドを使用するとき、ファイル・サイズ間に矛盾が見られるのも一般的です。これはHDFSストリーミングの異常であり、HDFS仕様にも書かれています。HDFSのこの異常が原因で、分析データにはファイルごとに128MBのブラインド・スポットが発生することがあります。レプリケーション・データのストリームが一定しており、HDFSからの分析データに低レベルのレイテンシが必要なければ、これは問題になりません。ただし、場合によってはこれが問題になることがあります。HDFS書込みストリームをクローズすると、ブロック書込みがファイナライズされます。データは分析ツールですぐに認識され、ファイル・サイズの測定は再び安定します。そのため、HDFSハンドラに追加されたファイル・ローリング機能を使用すると、HDFS書込みストリームをクローズしてすべてのデータを認識させることができます。

注意:

ファイル・ローリング・ソリューションは、それ自体に問題がある場合もあります。ファイル・ローリングを多用すると、HDFSに小さいファイルが大量に発生します。HDFSに小さいファイルが大量にあると、それ自体が分析ツールのパフォーマンス低下の原因になります。

次の場合にも、HDFSに矛盾の問題が発生する可能性があります。

  • HDFSハンドラ・プロセスがクラッシュする。

  • HDFSハンドラ・プロセスで強制シャットダウンが呼び出される。

  • ネットワークの停止、その他の原因でHDFSハンドラ・プロセスが異常終了する。

どの場合にもHDFSハンドラは、HDFS書込みストリームを明示的にクローズして書込みブロックをファイナライズせずに終了する可能性があります。内部プロセスとしてHDFSは、書込みストリームが破損していることを最終的に認識し、HDFSが書込みブロックをファイナライズします。ただし、この場合、HDFSプロセスが書込みブロックをファイナライズする前に短時間の遅延が発生することがあります。

2.10 ベスト・プラクティス

HDFSクラスタは、クラスタ・ノードと呼ばれる専用サーバーで稼働させるのが、ビッグ・データのベスト・プラクティスと考えられています。エッジ・ノードとは、HDFSクラスタ・ノードにデータをストリーミングし、HDFSクラスタ・ノードからデータを取得するアプリケーションをホストするサーバー・マシンです。HDFSクラスタ・ノードとエッジ・ノードの間に存在するこの物理的なアーキテクチャ構造には、次のように様々なメリットがあります。

  • HDFSクラスタ・ノードが、クラスタのインタフェースを提供するアプリケーションと、リソースをめぐって競合しない。

  • HDFSクラスタ・ノードとエッジ・ノードで要件が異なる可能性がある。この物理トポロジのために、特定のニーズに応じて適切なハードウェアを構成できます。

ベスト・プラクティスとして、HDFSハンドラはエッジ・ノードにインストールして実行し、ネットワーク接続を使用してHDFSクラスタにデータをストリーミングするようにします。HDFSハンドラは、ネットワーク上でHDFSクラスタに認識されればどのマシン上でも実行できます。HDFSハンドラをエッジ・ノードにインストールするには、core-site.xml ファイルと依存性jarをエッジ・ノードにコピーし、HDFSハンドラがアクセスできるようにする必要があります。必要に応じて、HDFSハンドラはHDFSクラスタ・ノード上に共存させることもできます。