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

前
次

7.2 Hiveメタデータ・プロバイダ

Hiveメタデータ・プロバイダは、Hiveメタストアから表メタデータを取得する際に使用します。メタデータは、Replicatプロパティ・ファイルでマップされているターゲット表ごとに、COLMAP構文を使用して、Hiveから取得されます。取得されるターゲット・メタデータは、列マッピング機能のためにReplicatで使用されます。

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

7.2.1 詳細な機能

Hiveメタデータ・プロバイダは、Hive JDBCとHCatalogの両方のインタフェースを使用して、Hiveメタストアからメタデータを取得します。Replicat.prmファイルでマップされる表ごとに、対応する表をHiveで作成する必要があります。

デフォルトのHive構成では、組込み/ローカルのメタストアであるDerbyデータベースが起動します。Apache Derbyは、組込みデータベースとして設計され、単一の接続のみ可能です。Hiveメタストア実装としてDerbyデータベースの接続が1つに制限されているということは、Oracle GoldenGate for Big Data Hiveメタデータ・プロバイダと連携すると機能しないということです。この制限をなくすために、Hiveはリモート・メタストア・データベースを使用するように構成する必要があります。リモート・メタストア・データベースを使用するようにHiveを構成する詳細は、次のサイトを参照してください。

https://cwiki.apache.org/confluence/display/Hive/AdminManual+MetastoreAdmin#AdminManualMetastoreAdmin-RemoteMetastoreDatabase

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を参照してください。

7.2.2 実行時の前提条件

  1. リモート・メタストア・データベースを使用する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のクラスパスに追加する必要があります。

    1. HIVE_HOME/lib/ディレクトリ内。DB_NAMEは、MySQLで作成されるデータベースの有効な名前に置き換えてください。

    2. Hiveサーバーを起動します:

      HIVE_HOME/bin/hiveserver2/bin/hiveserver2

    3. Hiveリモート・メタストア・サーバーを起動します。

      HIVE_HOME/bin/hive --service metastore

7.2.3 クラスパス構成

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のバージョンと一致する必要があります。

  1. 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/のようになります。

  2. 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は使用しないでください。

7.2.4 Hiveメタデータ・プロバイダの構成

この項では、Hiveメタデータ・プロバイダの構成プロパティについて詳細に説明します。


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

gg.mdp.type

必須

hive

-

Hiveメタデータ・プロバイダを選択します

gg.mdp.connectionUrl

必須

Kerberos認証を使用せずにフォーマット:

jdbc:hive2://HIVE_SERVER_IP:HIVE_JDBC_PORT/HIVE_DB

Kerberos認証を使用してフォーマット:

jdbc:hive2://HIVE_SERVER_IP:HIVE_JDBC_PORT/HIVE_DB; principal=user/FQDN@MY.REALM

-

HiveサーバーのJDBC接続URL

gg.mdp.driverClassName

必須

org.apache.hive.jdbc.HiveDriver

-

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

gg.mdp.userName

オプション

有効なユーザー名

""

Hiveデータベースに接続する際のユーザー名。Kerberos認証を使用する場合、userNameプロパティは必要ありません。接続URLでは、connectionUrlプロパティの有効な値で指定されているKerberosプリンシパルを指定する必要があります。

gg.mdp.password

オプション

有効なパスワード

""

Hiveデータベースに接続する際のパスワード

gg.mdp.charset

オプション

有効なキャラクタ・セット

UTF-8

文字データ型で列のキャラクタ・セットを指定します。これは、ソース・データを証跡ファイルから正しいターゲットのキャラクタ・セットに変換します。

gg.mdp.nationalCharset

オプション

有効なキャラクタ・セット

UTF-8

文字データ型で列のキャラクタ・セットを指定します。これは、ソース・データを証跡ファイルから正しいターゲットのキャラクタ・セットに変換します。

たとえばOracle Databaseの場合、NCHARNVARCHARなどの列のキャラクタ・セットを指定します。

gg.mdp.authType

オプション

kerberos

none

gg.mdp.kerberosKeytabFile

オプション(authType=kerberosの場合は必須)

Kerberosキータブ・ファイルの相対パスまたは絶対パス

-

キータブ・ファイルを使用すると、Hiveがパスワードにアクセスし、Kerberosセキュリティに対してkinit操作を実行できます。

gg.mdp.kerberosPrincipal

オプション(authType=kerberosの場合は必須)

有効なKerberosプリンシパル名(user/FQDN@MY.REALM)

-

Kerberos認証で用いるKerberosプリンシパル名。


7.2.5 サンプル構成

この項では、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_HIVEGG_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

7.2.6 セキュリティ

Hiveサーバーは、Kerberos認証を使用して保護できます。Hiveサーバーの保護方法については、ご使用のHiveリリースのHiveドキュメントを参照してください。Oracle GoldenGate for Big Data Hiveメタデータ・プロバイダは、Kerberosで保護されたHiveサーバーに接続できます。

HDFS core-site.xmlhive-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>

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

ソース・データベース表で変更がある場合、Hiveメタストアの表は、手動で更新/変更/作成する必要があります。メタデータ変更イベントがあった場合には、Replicatプロセスを中止または一時停止したいこともあります。Replicatプロセスは、Replicat構成ファイル(.prmファイル)に次の指定を追加すると中止できます。

DDL INCLUDE ALL, EVENTACTIONS (ABORT)

あるいは、レプリケーション構成ファイル(.prmファイル)に次の指定を追加すると一時停止できます。

DDL INCLUDE ALL, EVENTACTIONS (SUSPEND)

7.2.8 制限

バイナリ・データ型の列は、主キーとして使用できません。

Replicat構成ファイルに定義されているソースからターゲットへのマッピングは静的です。Oracle GoldenGate 12.2は、Oracleデータベースがレプリケーション・ソースの場合に、DDL伝播とソース・スキーマ展開をサポートします。ただし、Replicat構成ファイルで構成されるマッピングは静的なため、ソース・スキーマの展開が問題になる場合もあります。

7.2.9 注意点

特に一般的なのが、Javaクラスパスに関する問題です。Oracle Hiveメタデータ・プロバイダでは、前提条件として、特定のHiveおよびHDFSクライアント・ライブラリをクラスパスで解決する必要があります。

必要なクライアントjarディレクトリは、「クラスパス構成」にリストしてあります。HiveおよびHDFSクライアントjarは、Oracle GoldenGate for Big Data製品に付属しません。クライアントjarは、Hiveメタデータ・プロバイダが接続するHiveのバージョンと一致する必要があります。

Hiveサーバーへの接続を確立するには、クラスパスにhive-site.xmlファイルが存在する必要があります。

7.2.10 トラブルシューティング

マップされたターゲット表が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)