Hiveメタデータ・プロバイダは、Hiveメタストアから表メタデータを取得する際に使用します。メタデータは、Replicatプロパティ・ファイルでマップされているターゲット表ごとに、COLMAP
構文を使用して、Hiveから取得されます。取得されるターゲット・メタデータは、列マッピング機能のためにReplicatで使用されます。
この項の内容は次のとおりです。
Hiveメタデータ・プロバイダは、Hive JDBCとHCatalogの両方のインタフェースを使用して、Hiveメタストアからメタデータを取得します。Replicat.prm
ファイルでマップされる表ごとに、対応する表をHiveで作成する必要があります。
デフォルトのHive構成では、組込み/ローカルのメタストアであるDerbyデータベースが起動します。Apache Derbyは、組込みデータベースとして設計され、単一の接続のみ可能です。Hiveメタストア実装としてDerbyデータベースの接続が1つに制限されているということは、Oracle GoldenGate for Big Data Hiveメタデータ・プロバイダと連携すると機能しないということです。この制限をなくすために、Hiveはリモート・メタストア・データベースを使用するように構成する必要があります。リモート・メタストア・データベースを使用するようにHiveを構成する詳細は、次のサイトを参照してください。
Hiveは、主キーのセマンティックをサポートしていないため、Hiveメタストアから取得されるメタデータには、主キー定義が含まれません。Hiveメタデータ・プロバイダを使用する場合は、かわりにReplicatのKEYCOLS
構成構文を使用して主キーを定義する必要があります。
KEYCOLS
ターゲット・スキーマで主キーを定義するには、Replicatのマーキング構成構文KEYCOLS
を使用します。Oracle GoldenGate HBaseハンドラには、主キーが必要です。したがって、HBaseをターゲットとしてReplicatマッピングを使用する場合は、ターゲット・スキーマで主キーを設定する必要があります。また、Avroフォーマッタの出力には、主キー列名を保持する配列フィールドがあります。したがって、AvroフォーマッタでReplicatマッピングを使用する場合には、KEYCOLS
を使用して主キー列を指定することを検討する必要があります。
KEYCOLS
の構成例は、「サンプル構成」を参照してください。
サポートされているHiveデータ型:
BIGINT
BINARY
BOOLEAN
CHAR
DATE
DECIMAL
DOUBLE
FLOAT
INT
SMALLINT
STRING
TIMESTAMP
TINYINT
VARCHAR
Hiveデータ型の詳細は、https://cwiki.apache.org/confluence/display/Hive/LanguageManual+Types
を参照してください。
リモート・メタストア・データベースを使用するHiveの構成
リモートHiveメタストアの構成に使用できるサポート対象のデータベースのリストは、https://cwiki.apache.org/confluence/display/Hive/AdminManual+MetastoreAdmin#AdminManualMetastoreAdmin-SupportedBackendDatabasesforMetastore
にあります。次の例では、MySQLデータベースをHiveメタストアとして構成します。Hive構成ファイル${HIVE_HOME}/conf/hive-site.xml
で、次のプロパティを構成します。
注意:
ConnectionURL
と、この例で使用しているドライバ・クラスは、MySQLに固有の値です。MySQL以外のデータベースを選択する場合は、それらの値を適宜変更してください。
<property> <name>javax.jdo.option.ConnectionURL</name> <value>jdbc:mysql://MYSQL_DB_IP:MYSQL_DB_PORT/DB_NAME?createDatabaseIfNotExist=false</value> </property> <property> <name>javax.jdo.option.ConnectionDriverName</name> <value>com.mysql.jdbc.Driver</value> </property> <property> <name>javax.jdo.option.ConnectionUserName</name> <value>MYSQL_CONNECTION_USERNAME</value> </property> <property> <name>javax.jdo.option.ConnectionPassword</name> <value>MYSQL_CONNECTION_PASSWORD</value> </property>
リモート・メタストア用にhive-site.xml
ファイルで構成するパラメータのリストは、https://cwiki.apache.org/confluence/display/Hive/AdminManual+MetastoreAdmin#AdminManualMetastoreAdmin-RemoteMetastoreDatabase
にあります。
注意:
MySQL JDBCコネクタjarを、次のHiveのクラスパスに追加する必要があります。
HIVE_HOME
/lib/
ディレクトリ内。DB_NAME
は、MySQLで作成されるデータベースの有効な名前に置き換えてください。
Hiveサーバーを起動します:
HIVE_HOME
/bin/hiveserver2/bin/hiveserver2
Hiveリモート・メタストア・サーバーを起動します。
HIVE_HOME
/bin/hive --service metastore
Oracle GoldenGate for Big Data Hiveメタデータ・プロバイダをHiveに接続して実行するには、gg.classpath
構成変数に2つのものを構成する必要があります。1つ目はhive-site.xml
ファイル、2つ目はHDFSクライアントjarです。クライアントjarは、Oracle GoldenGate for Big Data Hiveメタデータ・プロバイダが接続するHiveのバージョンと一致する必要があります。
hive-site.xml
ファイルは、次のプロパティで作成します。
<configuration>
<!-- Mandatory Property -->
<property>
<name>hive.metastore.uris</name>
<value>thrift://HIVE_SERVER_HOST_IP:9083</value>
<property>
<!-- Optional Property. Default value is 5 -->
<property>
<name>hive.metastore.connect.retries</name>
<value>3</value>
</property>
<!-- Optional Property. Default value is 1 -->
<property>
<name>hive.metastore.client.connect.retry.delay</name>
<value>10</value>
</property>
<!-- Optional Property. Default value is 600 seconds -->
<property>
<name>hive.metastore.client.socket.timeout</name>
<value>50</value>
</property>
</configuration>
注意:
たとえば、hive-site.xml
ファイルが/home/user/oggadp/dirprm
ディレクトリに作成される場合、gg.classpath
エントリはgg.classpath=/home/user/oggadp/dirprm/
のようになります。
HiveおよびHDFSのクライアントjarのデフォルトの場所は、次のディレクトリです。
HIVE_HOME
/hcatalog/share/hcatalog/*HIVE_HOME
/lib/*HIVE_HOME
/hcatalog/share/webhcat/java-client/*HADOOP_HOME
/share/hadoop/common/*HADOOP_HOME
/share/hadoop/common/lib/*HADOOP_HOME
/share/hadoop/mapreduce/*
gg.classpath
を、上の例で示したとおり正確に構成します。hive-site.xml
のパスを作成する際には、ワイルドカードを追加しないパスを使用してください。hive-site.xml
ファイルのパスにワイルドカード(*)を含めると、選択されなくなります。逆に、依存関係jarのパスを作成する際には、そのディレクトリにあるjarファイルがすべて関連するクラスパスに含まれるように、ワイルドカード(*)を含める必要があります。*.jar
は使用しないでください。
この項では、Hiveメタデータ・プロバイダの構成プロパティについて詳細に説明します。
プロパティ | 必須/オプション | 有効な値 | デフォルト | 説明 |
---|---|---|---|---|
|
必須 |
|
- |
Hiveメタデータ・プロバイダを選択します |
|
必須 |
Kerberos認証を使用せずにフォーマット: j Kerberos認証を使用してフォーマット:
|
- |
HiveサーバーのJDBC接続URL |
|
必須 |
|
- |
完全修飾のHive JDBCドライバ・クラス名 |
|
オプション |
有効なユーザー名 |
"" |
Hiveデータベースに接続する際のユーザー名。Kerberos認証を使用する場合、 |
|
オプション |
有効なパスワード |
"" |
Hiveデータベースに接続する際のパスワード |
|
オプション |
有効なキャラクタ・セット |
UTF-8 |
文字データ型で列のキャラクタ・セットを指定します。これは、ソース・データを証跡ファイルから正しいターゲットのキャラクタ・セットに変換します。 |
|
オプション |
有効なキャラクタ・セット |
UTF-8 |
文字データ型で列のキャラクタ・セットを指定します。これは、ソース・データを証跡ファイルから正しいターゲットのキャラクタ・セットに変換します。 たとえばOracle Databaseの場合、 |
|
オプション |
kerberos |
none |
|
|
オプション( |
Kerberosキータブ・ファイルの相対パスまたは絶対パス |
- |
キータブ・ファイルを使用すると、Hiveがパスワードにアクセスし、Kerberosセキュリティに対してkinit操作を実行できます。 |
|
オプション( |
有効なKerberosプリンシパル名( |
- |
Kerberos認証で用いるKerberosプリンシパル名。 |
この項では、Hiveメタデータ・プロバイダを構成する例を示します。
次の表でソースを検討してください。
TABLE GG.TCUSTMER { CUST_CODE VARCHAR(4) PRIMARY KEY, NAME VARCHAR(100), CITY VARCHAR(200), STATE VARCHAR(200)}
この例は、ソースの列CUST_CODE
(GG.TCUSTMER)
をターゲットのCUST_CODE2
(GG_HIVE.TCUSTMER_HIVE)
に、ソースの列CITY
(GG.TCUSTMER
)をターゲットのCITY2
(GG_HIVE.TCUSTMER_HIVE)
にマップします。
Replicat.prm
ファイルでの構成のマッピングは、次のとおりです。
MAP GG.TCUSTMER, TARGET GG_HIVE.TCUSTMER_HIVE, COLMAP(USEDEFAULTS, CUST_CODE2=CUST_CODE, CITY2=CITY) KEYCOLS(CUST_CODE2);
この例のマッピング定義は、次のようになります。
ソース・スキーマGG
は、ターゲット・スキーマGG_HIVE
にマップされる
ソース列CUST_CODE
は、ターゲット列CUST_CODE2
にマップされる
ソース列CITY
は、ターゲット列CITY2
にマップされる
USEDEFAULTS
には、列名の残りがソースとターゲットで同じことを指定します(NAME
列とSTATE
列)。
KEYCOLS
には、CUST_CODE2
を主キーとして扱う必要があることを指定します。
HiveのDDLでは主キーを指定できないため、KEYCOLS
を使用して主キーを指定します。
上の例のHiveにスキーマと表を作成します。
注意:
任意のスキーマ名を選択でき、gg_hive schema
名には制限されません。Hiveスキーマは、既存のものでも新規作成してもかまいません。これには、Javaアダプタ・プロパティ・ファイルで接続URL (gg.mdp.connectionUrl
)を、Replicat .prm
ファイルでマッピング構成を、それぞれ変更します。スキーマ名を変更したら、接続URL (gg.mdp.connectionUrl
)と、Replicat .prm
ファイルのマッピングを更新する必要があります。
Hive CLIタイプを起動するには、次のコマンドを実行します。
HIVE_HOME
/bin/hive
スキーマGG_HIVE
をHiveに作成するには、次のコマンドを使用します。
hive> create schema gg_hive; OK Time taken: 0.02 seconds
表TCUSTMER_HIVE
をGG_HIVE
データベースに作成するには、次のコマンドを入力します。
hive> CREATE EXTERNAL TABLE `TCUSTMER_HIVE`( > "CUST_CODE2" VARCHAR(4), > "NAME" VARCHAR(30), > "CITY2" VARCHAR(20), > "STATE" STRING); OK Time taken: 0.056 seconds
.properties
ファイルでの構成は、次のようになります。
gg.mdp.type=hive gg.mdp.connectionUrl=jdbc:hive2://<HIVE_SERVER_IP>:10000/gg_hive gg.mdp.driverClassName=org.apache.hive.jdbc.HiveDriver
前述の例について";"を区切り文字として使用した場合の、区切りテキスト・フォーマッタを使用した出力の例を次に示します。
I;GG_HIVE.TCUSTMER_HIVE;2015-10-07T04:50:47.519000;cust_code2;WILL;name;BG SOFTWARE CO;city2;SEATTLE;state;WA
Replicat構成ファイル、Javaアダプタ・プロパティ・ファイル、およびHive表作成SQLスクリプトのサンプルは、インストール時に、次の場所に追加されます。
GoldenGate_install_directory
/AdapterExamples/big-data/metadata_provider/hive
Hiveサーバーは、Kerberos認証を使用して保護できます。Hiveサーバーの保護方法については、ご使用のHiveリリースのHiveドキュメントを参照してください。Oracle GoldenGate for Big Data Hiveメタデータ・プロバイダは、Kerberosで保護されたHiveサーバーに接続できます。
HDFS core-site.xml
とhive-site.xml
は、ハンドラのクラスパスに存在する必要があります。
次のプロパティをcore-site.xml
で有効にします。
<property> <name>hadoop.security.authentication</name> <value>kerberos</value> </property> <property> <name>hadoop.security.authorization</name> <value>true</value> </property>
次のプロパティをhive-site.xml
で有効にします。
<property> <name>hive.metastore.sasl.enabled</name> <value>true</value> </property> <property> <name>hive.metastore.kerberos.keytab.file</name> <value>/path/to/keytab</value> <!-- Change this value --> </property> <property> <name>hive.metastore.kerberos.principal</name> <value>Kerberos Principal</value> <!-- Change this value --> </property> <property> <name>hive.server2.authentication</name> <value>KERBEROS</value> </property> <property> <name>hive.server2.authentication.kerberos.principal</name> <value>Kerberos Principal</value> <!-- Change this value --> </property> <property> <name>hive.server2.authentication.kerberos.keytab</name> <value>/path/to/keytab</value> <!-- Change this value --> </property>
ソース・データベース表で変更がある場合、Hiveメタストアの表は、手動で更新/変更/作成する必要があります。メタデータ変更イベントがあった場合には、Replicatプロセスを中止または一時停止したいこともあります。Replicatプロセスは、Replicat構成ファイル(.prm
ファイル)に次の指定を追加すると中止できます。
DDL INCLUDE ALL, EVENTACTIONS (ABORT)
あるいは、レプリケーション構成ファイル(.prm
ファイル)に次の指定を追加すると一時停止できます。
DDL INCLUDE ALL, EVENTACTIONS (SUSPEND)
バイナリ・データ型の列は、主キーとして使用できません。
Replicat構成ファイルに定義されているソースからターゲットへのマッピングは静的です。Oracle GoldenGate 12.2は、Oracleデータベースがレプリケーション・ソースの場合に、DDL伝播とソース・スキーマ展開をサポートします。ただし、Replicat構成ファイルで構成されるマッピングは静的なため、ソース・スキーマの展開が問題になる場合もあります。
特に一般的なのが、Javaクラスパスに関する問題です。Oracle Hiveメタデータ・プロバイダでは、前提条件として、特定のHiveおよびHDFSクライアント・ライブラリをクラスパスで解決する必要があります。
必要なクライアントjarディレクトリは、「クラスパス構成」にリストしてあります。HiveおよびHDFSクライアントjarは、Oracle GoldenGate for Big Data製品に付属しません。クライアントjarは、Hiveメタデータ・プロバイダが接続するHiveのバージョンと一致する必要があります。
Hiveサーバーへの接続を確立するには、クラスパスにhive-site.xml
ファイルが存在する必要があります。
マップされたターゲット表がHiveに存在しない場合、Replicatプロセスは"Table metadata resolution exception"で異常終了します。
たとえば、次のマッピングを考えてみます。
MAP GG.TCUSTMER, TARGET GG_HIVE.TCUSTMER_HIVE, COLMAP(USEDEFAULTS, CUST_CODE2=CUST_CODE, CITY2=CITY) KEYCOLS(CUST_CODE2);
前述のマッピングでは、TCUSTMER_HIVE
という表を、HiveメタストアのスキーマGG_HIVE
に作成する必要があります。HiveでGG_HIVE.TCUSTMER_HIVE
表の作成に失敗すると、次の例外が発生します。
ERROR [main) - Table Metadata Resolution Exception Unable to retrieve table matadata. Table : GG_HIVE.TCUSTMER_HIVE NoSuchObjectException(message:GG_HIVE.TCUSTMER_HIVE table not found)