ヘッダーをスキップ
Oracle® Fusion Middleware Oracle Data Integratorアプリケーション・アダプタ・ガイド
12c (12.1.3)
E59389-02
  ドキュメント・ライブラリへ移動
ライブラリ
製品リストへ移動
製品
目次へ移動
目次
索引へ移動
索引

前
 
次
 

3 Hadoop

この章では、Oracle Data Integrator (ODI) Application Adapter for Hadoopでのナレッジ・モジュールの使用方法について説明します。

次のセクションがあります。


関連資料:

『Oracle Big Data Connectorsユーザーズ・ガイド』

3.1概要

Apache Hadoopは、リレーショナルでないデータソースからのデータや、リレーショナル・データベースで処理できないデータ・ボリュームを処理するように設計されています。

Oracle Data Integrator (ODI) Application Adapter for Hadoopを使用すると、データ統合開発者は、Oracle Data Integratorを使用してHadoop内でデータの統合と変換を簡単に行うことができます。このアプリケーション・アダプタでは、使い慣れて使いやすいツールおよびナレッジ・モジュール(KM)を採用することにより、次の機能を実現しています。

  • ローカル・ファイル・システム、HDFS、HBase (Hiveを使用)およびSQLデータベース(SQOOPを使用)からHadoopへのデータのロード

  • Hadoopでのデータの検証と変換

  • 追加処理およびレポート生成を行うための、HadoopからOracleデータベース、SQLデータベース(SQOOPを使用)またはHBaseへの処理済データのロード

ナレッジ・モジュール(KM)には、Oracle Data Integratorが特定のテクノロジに対して特定のタスク・セットを実行するために必要な情報が含まれています。アプリケーション・アダプタは、ナレッジ・モジュールの集まりです。したがって、Oracle Data Integrator Application Adapter for Hadoopは、Hadoopに格納されているデータにアクセスするためのナレッジ・モジュールの集まりです。

3.1.1 概念

Hadoopでの通常の処理には、MapReduceジョブとしてプログラミングされたデータの検証や変換などがあります。MapReduceジョブの設計と実装には、専門的なプログラミングの知識が必要です。ただし、Oracle Data IntegratorとOracle Data Integrator Application Adapter for Hadoopを使用する場合、MapReduceジョブを記述する必要はありません。Oracle Data Integratorは、Apache Hiveと、MapReduceジョブを実装するためのSQLライクな言語であるHive Query Language (HiveQL)を使用します。

ビッグ・データ処理のシナリオを実装する場合の最初の手順は、データをHadoopにロードすることです。データソースは通常、ローカル・ファイル・システム、HDFS、HBaseおよびHiveの表にあります。

データのロード後は、SQLと同様の方法でHiveQLを使用して、データを検証および変換できます。データ検証(NULLや主キーのチェックなど)および変換(フィルタ、集計、設定操作、表の導出など)を実行できます。また、カスタマイズした手続き型のスニペット(スクリプト)をデータの処理に含めることもできます。

データが集計、簡略化または処理されて小さなデータ・セットになったら、追加の処理および分析を行うためにそれをOracleデータベース、他のリレーショナル・データベースまたはHBaseにロードできます。Oracleデータベースへのロードを最適に行うには、Oracle Loader for Hadoopが推奨されます。

3.1.2 ナレッジ・モジュール

Oracle Data Integratorには、表3-1に示されている、Hadoopで使用するためのナレッジ・モジュール(KM)が用意されています。

表3-1 Oracle Data Integrator Application Adapter for Hadoopナレッジ・モジュール

KM名 説明 ソース ターゲット

IKM File to Hive (Load Data)

ローカルおよびHDFSファイルからHive表にデータをロードします。Hiveのパーティション化とデータ移動の低減によってパフォーマンスを向上させるオプションが用意されています。

このナレッジ・モジュールでは、ワイルドカード(*,?)がサポートされています。

ファイル・システム

Hive

IKM Hive Control Append

切捨て/挿入(追加)モードでHiveターゲット表にデータを統合します。データを制御(検証)できます。無効なデータはエラー表に分離され、再利用できます。

Hive

Hive

IKM Hive Transform

PerlやPythonなどのカスタマイズしたスクリプトで変換した後、Hiveターゲット表にデータを統合します。

Hive

Hive

IKM File-Hive to Oracle (OLH-OSCH)

Oracle Loader for HadoopまたはOracle SQL Connector for HDFS (あるいはその両方)を使用して、HDFSファイルまたはHiveソースからOracleデータベース・ターゲットにデータを統合します。

ファイル・システムまたはHive

Oracleデータベース

IKM File-Hive to SQL (SQOOP)

SQOOPを使用して、HDFSファイルまたはHiveデータソースからSQLデータベース・ターゲットにデータを統合します。SQOOPは、パラレルなJDBC接続を使用してデータをロードします。

ファイル・システムまたはHive

SQLデータベース

IKM SQL to Hive-HBase-File (SQOOP)

SQOOPを使用して、SQLデータベースからHive表、HBase表またはHDFSファイルにデータを統合します。SQOOPは、パラレルなJDBC接続を使用してデータをアンロードします。

SQLデータベース

Hive、HBaseまたはファイル・システム

IKM Hive to HBase Incremental Update (HBase-SerDe)

Hive表からHBase表にデータを統合します。新しい行の挿入および既存の行の更新がサポートされています。

Hive

HBase

LKM HBase to Hive (HBase-SerDe)

HBase表からHive表にデータをロードします。HiveからソースHBase表への読取り専用アクセスを提供します。

HBaseソース表の関連するすべての列を表す、Hiveに関する一時ロード表定義を定義します。

HBase

Hive

CKM Hive

データを制約に対して検証します。

該当なし

Hive

RKM Hive

Hive表をリバース・エンジニアリングします。

Hiveメタデータ

該当なし

RKM HBase

HBase表をリバース・エンジニアリングします。

HBaseメタデータ

該当なし


3.2 インストールおよび構成

次の各項で、Oracle Data Integrator (ODI) Application Adapterのインストール要件について説明します。

3.2.1 システム要件および動作要件

Oracle Data Integrator Application Adapter for Hadoopを使用するには、まず、Oracle Big Data Connectorsとは別のライセンスが必要なOracle Data Integratorをインストールする必要があります。ODIは、次の場所にあるOracle Webサイトからダウンロードできます。

http://www.oracle.com/technetwork/middleware/data-integrator/downloads/index.html

Oracle Data Integrator Application Adapter for Hadoopには、Oracle Data Integratorのバージョン11.1.1.6.0以上が必要です。

インストールを実行する前に、システム要件および動作保証のドキュメントを読み、インストール先の環境が、これからインストールする製品の最小インストール要件を満たしていることを確認します。

サポートされているプラットフォームおよびバージョンのリストは、Oracle Technology Networkで入手できます。

http://www.oracle.com/technetwork/middleware/data-integrator/overview/index.html

3.2.2 テクノロジ固有の要件

サポートされているテクノロジおよびバージョンのリストには、Oracle Technology Networkで入手できます。

http://www.oracle.com/technetwork/middleware/data-integrator/overview/index.html">>http://www.oracle.com/technetwork/middleware/data-integrator/overview/index.html

3.2.3 Oracle Data Integrator Application Adapter for Hadoopの場所

Oracle Data Integrator Application Adapter for Hadoopは、ODI_Home/odi/sdk/xml-referenceディレクトリ内にあります。

3.3 トポロジの設定

Oracle Data Integratorでトポロジを設定するには、ファイル・システム、HiveおよびHBase情報を格納するデータ・サーバー、物理スキーマおよび論理スキーマを特定する必要があります。

この項には次のトピックが含まれます:


注意:

次の各項で説明する環境変数の多くは、すでにOracle Big Data Applianceに対して構成されています。(/opt/oracle/odiagent-version/agent_standalone/odi/agent/bin/HadoopEnvSetup.shにある)構成スクリプトを参照してください。

3.3.1 ファイル・データソースの設定

Hadoopのコンテキストでは、Hadoop分散ファイルシステム(HDFS)のファイルとローカル・ファイル(HDFS外のファイル)は区別されます。

データソースを定義する手順は次のとおりです。

  1. ファイル・テクノロジに基づくデータ・サーバー・オブジェクトを作成します。

  2. アクセスされるディレクトリごとに物理スキーマ・オブジェクトを作成します。

  3. アクセスされるディレクトリごとに論理スキーマ・オブジェクトを作成します。

  4. 各論理スキーマのモデルを作成します。

  5. ファイルおよびワイルドカード名のパターンごとに1つ以上のデータストアを作成します。

  6. HDFSファイルの場合、「JDBC URL」フィールドにHDFS名のノードを入力して、ファイル・テクノロジに基づくデータ・サーバー・オブジェクトを作成し、「JDBCドライバ名」は空のままにしておきます。たとえば、次のようになります。

    hdfs://bda1node01.example.com:8020
    

    このデータ・サーバー構成では、テスト接続はサポートされていません。


    注意:

    HDFSファイルに専用テクノロジは定義されていません。

3.3.2 Hiveデータソースの設定

Hiveシステムに接続するために、Oracle Data Integratorで次の手順を行う必要があります。Oracle Data IntegratorではJDBCを使用してHiveに接続します。

前提条件

Hiveテクノロジが標準のOracle Data Integratorテクノロジに含まれている必要があります。そうでない場合は、INSERT_UPDATEモードでxml-referenceディレクトリからテクノロジをインポートします。

Hive固有のフレックス・フィールドをすべて追加する必要があります。

Hiveデータソースを設定する手順は次のとおりです。

  1. Hiveテクノロジに基づくデータ・サーバー・オブジェクトを作成します。

  2. JDBC下に次の場所を設定します。

    JDBCドライバ: weblogic.jdbc.hive.HiveDriver

    JDBC URL: jdbc:weblogic:hive://<host>:<port>[; property=value[;...]]

    たとえば、次のようになります。jdbc:weblogic:hive://localhost:10000;DatabaseName=default;User=default;Password=default


    注意:

    通常、ユーザーIDとパスワードは、ODIデータ・サーバーの対応するフィールドに入力されます。Hiveユーザーがパスワードを指定せずに定義される場合、「password=default」は、URLの一部として必要であり、データ・サーバーのパスワード・フィールドは空白のままにします。

  3. フレックスフィールド下で次の設定を行います。

    HiveメタストアURI: thrift://BDA:10000など

  4. Hiveサーバーが稼働していることを確認します。

  5. データ・サーバーへの接続をテストします。

  6. 物理スキーマを作成します。物理スキーマ定義の両方のスキーマ・フィールドに、Hiveスキーマの名前を入力します。

  7. 論理スキーマ・オブジェクトを作成します。

  8. RKM Hiveをグローバル・オブジェクトまたはプロジェクトにインポートします。

  9. 論理スキーマを指す、Hiveテクノロジ用の新規モデルを作成します。

  10. RKM Hiveを使用して、カスタム・リバースエンジニアリング操作を実行します。

このプロセスの終了時に、列、パーティション化およびクラスタ化の詳細がフレックス・フィールド値として格納されたすべてのHive表が、Hiveデータ・モデルに含まれます。

3.3.3 HBaseデータソースの設定

HBaseシステムに接続するには、Oracle Data Integratorで次の手順を行う必要があります。

前提条件

HBaseテクノロジが標準のOracle Data Integratorテクノロジに含まれている必要があります。そうでない場合は、INSERT_UPDATEモードでxml-referenceディレクトリからテクノロジをインポートします。

HBase固有のフレックス・フィールドをすべて追加する必要があります。

HBaseデータソースを設定する手順は次のとおりです。

  1. HBaseテクノロジに基づくデータ・サーバー・オブジェクトを作成します。

    このテクノロジのデータ・サーバーでは、JDBCドライバおよびURLは使用できません。

  2. フレックスフィールド下で次の設定を行います。

    HBase定足数: HBaseインストールの定足数。例: localhost:2181

  3. HBaseサーバーが稼働していることを確認します。


    注意:

    HBaseデータ・サーバーへの接続をテストすることはできません。

  4. 物理スキーマを作成します。

  5. 論理スキーマ・オブジェクトを作成します。

  6. RKM HBaseをグローバル・オブジェクトまたはプロジェクトにインポートします。

  7. 論理スキーマを指す、HBaseテクノロジ用の新規モデルを作成します。

  8. RKM HBaseを使用して、カスタム・リバースエンジニアリング操作を実行します。

このプロセスの終了時に、すべてのHBase表およびその列とデータ型がHBaseデータ・モデルに含まれます。

3.3.4 セキュアなクラスタへの接続

Kerberos認証で保護されるHadoopクラスタでOracle Data Integratorエージェントを実行するには、追加の構成手順を行う必要があります。

Kerberos保護クラスタの使用手順:

  1. Oracle Data Integratorエージェントが実行するOracle Big Data Applianceのnode04にログインします。

  2. oracleユーザーの新しいKerberosチケットを作成します。次のコマンドを使用して、レルムをKerberosの実際のレルム名に置き換えます。

    $ kinit oracle@realm

  3. 次のコマンドラインを使用して、環境変数を設定します。使用する製品に合せて適切な値を代入します。

    $ export KRB5CCNAME=Kerberos-ticket-cache-directory

    $ export KRB5_CONFIG=Kerberos-configuration-file

    $ export HADOOP_OPTS="$HADOOP_OPTS -Djavax.xml.parsers.DocumentBuilderFactory=com.sun.org.apache.xerces.internal. jaxp.DocumentBuilderFactoryImpl-Djava.security.krb5.conf=Kerberos-configuration-file"

    この例では、構成ファイルの名前はkrb5*で、/tmp/oracle_krb/にあります。

    $ export KRB5CCNAME=/tmp/oracle_krb/krb5cc_1000

    $ export KRB5_CONFIG=/tmp/oracle_krb/krb5.conf

    $ export HADOOP_OPTS="$HADOOP_OPTS -D javax.xml.parsers.DocumentBuilderFactory=com.sun.org.apache.xerces.internal. jaxp.DocumentBuilderFactoryImpl -D java.security.krb5.conf=/tmp/oracle_krb/krb5.conf"

  4. 次のような構文を使用して、JDBC接続URLを再定義します。

    jdbc:hive2://node1:10000/default;principal=HiveServer2-Kerberos-Principal

    たとえば、次のようになります。

    jdbc:hive2://bda1node01.example.com:10000/default;principal= hive/HiveServer2Host@EXAMPLE.COM

    次のURLの『CDH5 Security Guide』の「HiveServer2 Security Configuration」も参照してください。

    http://www.cloudera.com/content/cloudera-content/cloudera-docs/CDH5/latest/CDH5-Security-Guide/cdh5sg_hiveserver2_security.html

  5. サービスの混乱を防ぐため、oracleの使用に合せてKerberosチケットを定期的に更新します。

    Oracle Big Data ApplianceでのKerberosの管理の詳細は、『Oracle Big Data Applianceソフトウェア・ユーザーズ・ガイド』を参照してください。

3.3.5 Hadoopジョブを実行するためのOracle Data Integratorエージェントの設定

Oracle Data Integratorエージェントを設定した後、Oracle Data Integrator Application Adapter for Hadoopで使用できるように構成します。

Oracle Data Integratorエージェントを設定する手順は次のとおりです。

  1. HadoopをOracle Data Integratorエージェント・コンピュータにインストールします。

    Oracle Big Data Applianceの場合、『Oracle Big Data Applianceソフトウェア・ユーザーズ・ガイド』でリモートHadoopクライアントの設定手順を参照してください。

  2. HiveをOracle Data Integratorエージェント・コンピュータにインストールします。

  3. SQOOPをOracle Data Integratorエージェント・コンピュータにインストールします。

  4. ODIエージェント・コンピュータで、HadoopおよびHiveの次の基本環境変数を設定します。

    表3-2 HadoopおよびHiveに必須の環境変数

    環境変数

    HADOOP_HOME

    Hadoopディレクトリの場所。例: /usr/lib/hadoop

    HADOOP_CONF

    Hadoop構成ファイル(core-default.xml、core-site.xml、hdfs-site.xmlなど)の場所。例: /home/shared/hadoop-conf

    HIVE_HOME

    Hiveディレクトリの場所。例: /usr/lib/hive

    HIVE_CONF

    Hive構成ファイル(hive-site.xmlなど)の場所。例: /home/shared/hive-conf

    HADOOP_CLASSPATH

    $HIVE_HOME/lib/hive-metastore-*.jar:$HIVE_HOME/lib/libthrift-*.jar:$HIVE_HOME/lib/libfb*.jar:$HIVE_HOME/lib/hive-exec-*.jar:$HIVE_CONF

    ODI_ADDITIONAL_CLASSPATH

    $HIVE_HOME/lib/'*':$HADOOP_HOME/client/*:$HADOOP_CONF

    ODI_HIVE_SESSION_JARS

    $HIVE_HOME/lib/hive-contrib-*.jar:<ODI library directory>/wlhive.jar

    • wlhive.jarの実際のパスは、ODIインストールのホームで決定できます。

    • 必要に応じて、他のJARファイル(カスタムSerDes JARファイルなど)を含めます。これらのJARファイルは各Hive JDBCセッションに追加され、それによって各Hive MapReduceジョブに追加されます。

    • JARのリストは":"で区切られ、ファイル名のワイルドカードを複数のファイルに評価することはできません。


  5. HBase機能を使用する場合は、ODIエージェント・コンピュータで次の環境変数を設定します。HadoopおよびHiveの基本環境変数に加えて、これらの環境変数を設定する必要があります。

    表3-3 (HadoopおよびHiveの基本環境変数以外の) HBaseに必須の環境変数

    環境変数

    HBASE_HOME

    HBaseディレクトリの場所。例: /usr/lib/hbase

    HADOOP_CLASSPATH

    $HBASE_HOME/lib/hbase-*.jar:$HIVE_HOME/lib/hive-hbase-handler*.jar:$HBASE_HOME/hbase.jar

    ODI_ADDITIONAL_CLASSPATH

    $HBASE_HOME/hbase.jar

    ODI_HIVE_SESSION_JARS

    $HBASE_HOME/hbase.jar:$HBASE_HOME/lib/hbase-sep-api-*.jar:$HBASE_HOME/lib/hbase-sep-impl-*hbase*.jar:/$HBASE_HOME/lib/hbase-sep-impl-common-*.jar:/$HBASE_HOME/lib/hbase-sep-tools-*.jar:$HIVE_HOME/lib/hive-hbase-handler-*.jar


Oracle Loader for Hadoopを使用する手順は次のとおりです。

  1. Oracle Loader for HadoopをOracle Data Integratorエージェント・システムにインストールします。『Oracle Big Data Connectorsユーザーズ・ガイド』Oracle Loader for Hadoopのインストールに関する項を参照してください。

  2. Oracle SQL Connector for HDFS (OLH_OUTPUT_MODE=DP_OSCHまたはOSCH)を使用するには、まずこれをインストールする必要があります。『Oracle Big Data Connectorsユーザーズ・ガイド』Oracle SQL Connector for Hadoop Distributed File Systemの設定に関する項を参照してください。

  3. ODIエージェント・コンピュータでOracle Loader for Hadoopの次の環境変数を設定します。HadoopおよびHiveの基本環境変数に加えて、これらの環境変数を設定する必要があります。

    表3-4 (HadoopおよびHiveの基本環境変数以外の) Oracle Loader for Hadoopに必須の環境変数

    環境変数

    OLH_HOME

    OLHインストールの場所。例: /u01/connectors/olh

    OSCH_HOME

    OSCHインストールの場所。例: /u01/connectors/osch

    HADOOP_CLASSPATH

    $OLH_HOME/jlib/*:$OSCH_HOME/jlib/*

    OLHを使用するには、HADOOP_CLASSPATH内のHadoop jarをワイルドカードなしで手動で解決する必要があります。

    ODI_OLH_JARS

    Oracle Loader for Hadoopで使用されるカスタム入力形式、Hive、Hive SerDesなどに必要なすべてのJARファイルのカンマ区切りリスト。すべてのファイル名をワイルドカードなしで展開する必要があります。

    たとえば、次のようになります。

    $HIVE_HOME/lib/hive-metastore-0.10.0-cdh4.5.0.jar,$HIVE_HOME/lib/libthrift-0.9.0-cdh4-1.jar,$HIVE_HOME/lib/libfb303-0.9.0.jar

    ODI_OLH_SHAREDLIBS

    $OLH_HOME/lib/libolh12.so,$OLH_HOME/lib/libclntsh.so.12.1,$OLH_HOME/lib/libnnz12.so,$OLH_HOME/lib/libociei.so,$OLH_HOME/lib/libclntshcore.so.12.1,$OLH_HOME/lib/libons.so

    ODI_ADDITIONAL_CLASSPATH

    $OSCH_HOME/jlib/'*'


3.3.6 ローカル・エージェントでHadoopジョブを実行するためのOracle Data Integrator Studioの構成

Oracle Data Integrator Studioインストールのローカル・エージェントでHadoopジョブを実行するには、この前の項の設定手順を実行しますが、Oracle Data Integratorのdriversディレクトリではなく、userlibディレクトリにJARファイルをコピーします。たとえば、次のようになります。

Linux: $USER_HOME/.odi/oracledi/userlibディレクトリ。

Windows: C:\Users\<USERNAME>\AppData\Roaming\odi\oracledi\userlibディレクトリ

3.4 統合プロジェクトの設定

プロジェクトの設定では、標準の手順に従います。『Oracle Data Integratorでの統合プロジェクトの開発』を参照してください。

次のKMをグローバル・オブジェクトまたはプロジェクトにインポートします。

  • IKM File to Hive (Load Data)

  • IKM Hive Control Append

  • IKM Hive Transform

  • IKM File-Hive to Oracle (OLH-OSCH)

  • IKM File-Hive to SQL (SQOOP)

  • IKM SQL to Hive-HBase-File (SQOOP)

  • IKM Hive to HBase Incremental Update (HBase-SerDe)

  • LKM HBase to Hive (HBase-SerDe)

  • CKM Hive

  • RKM Hive

  • RKM HBase

3.5 リバースエンジニアリングされたHiveおよびHBaseモデルからのOracle Data Integratorモデルの作成

この項には次のトピックが含まれます:

3.5.1 モデルの作成

HiveまたはHBaseをホストするテクノロジに基づくモデルや、HiveやHBaseの接続を構成したときに作成された論理スキーマに基づくモデルを作成するには、『Oracle Data Integratorでの統合プロジェクトの開発』で説明されている標準の手順に従います。

3.5.2 Hive表のリバース・エンジニアリング

Hive表およびビューのリバース・エンジニアリングには、RKM Hiveが使用されます。Hive RKMを使用してHive表のカスタマイズされたリバースエンジニアリングを実行するには、『Oracle Data Integratorでの統合プロジェクトの開発』の説明に従って、通常の手順を使用します。このトピックでは、Hive表に固有の情報の詳細を示します。

リバースエンジニアリング・プロセスでは、対応するHive表またはビューに対するデータストアが作成されます。データ・ストアをマッピングのソースまたはターゲットとして使用できます。

RKM Hive

RKMでは、次のメタデータ要素がリバースされます。

  • Oracle Data IntegratorデータストアとしてのHive表とビュー。

    「マスク」フィールドでリバース・マスクを指定し、リバースする表とビューを選択します。「リバース・エンジニアリング」タブの「マスク」フィールドで、リバースエンジニアリングされるオブジェクトが名前に基づいてフィルタ処理されます。「マスク」フィールドは空にできず、少なくともパーセント記号(%)を含める必要があります。

  • Oracle Data Integrator属性としてのHive列およびそれらのデータ型。

  • バケット、パーティション化、クラスタおよびソート列に関する情報は、Oracle Data Integratorデータ・ストアの各フレックス・フィールドまたは列メタデータで設定されます。

表3-5に、作成されるフレックス・フィールドを示します。

表3-5 リバースエンジニアリングされたHive表およびビューのフレックス・フィールド

オブジェクト フレックス・フィールド名 フレックス・フィールド・コード フレックス・フィールド・タイプ 説明

データストア

Hiveバケット

HIVE_BUCKETS

文字列

クラスタ化に使用されるバケットの数

Hiveパーティション列

HIVE_PARTITION_COLUMN

数値

パーティション化列はすべて"1"とマークされます。パーティション情報は、次のものから取得されます。

  • マップされたソース列

  • ターゲット列に指定された定数値

  • ファイル名フラグメント

Hiveクラスタ列

HIVE_CLUSTER_COLUMN

数値

クラスタ列はすべて"1"とマークされます。

Hiveソート列

HIVE_SORT_COLUMN

数値

ソート列はすべて"1"とマークされます。


3.5.3 HBase表のリバース・エンジニアリング

HBase表のリバース・エンジニアリングには、RKM HBaseが使用されます。RKM HBaseを使用してHBase表のカスタマイズされたリバースエンジニアリングを実行するには、『Oracle Data Integratorでの統合プロジェクトの開発』の説明に従って、通常の手順を使用します。このトピックでは、HBase表に固有の情報の詳細を示します。

リバースエンジニアリング・プロセスでは、対応するHBase表のデータ・ストアが作成されます。データ・ストアをマッピングのソースまたはターゲットとして使用できます。

RKM HBase

RKM HBaseでは、次のメタデータ要素がリバースされます。

  • Oracle Data IntegratorデータストアとしてのHBase表。

    「マスク」フィールドでリバース・マスクを指定し、リバースする表を選択します。「リバース・エンジニアリング」タブの「マスク」フィールドで、リバースエンジニアリングされるオブジェクトが名前に基づいてフィルタ処理されます。「マスク」フィールドは空にできず、少なくともパーセント記号(%)を含める必要があります。

  • Oracle Data Integrator属性としてのHBase列およびそれらのデータ型。

  • Oracle Data Integrator属性としてのHBase一意行キー(key)。

表3-6に、RKM HBaseのオプションを示します。

表3-6 RKM HBaseのオプション

オプション 説明

SCAN_MAX_ROWS

表のリバース中にスキャンされる行の最大数を指定します。デフォルト値は10000です。

SCAN_START_ROW

スキャンを開始する行のキーを指定します。デフォルトでは、スキャンは1行目から開始されます。行キーは、org.apache.hadoop.hbase.util.Bytesのインスタンスを返すJava式として指定されます。例: Bytes.toBytes(?EMP000001?)

SCAN_STOP_ROW

スキャンを終了する行のキーを指定します。デフォルトでは、スキャンは表の最後の行まで、またはSCAN_MAX_ROWSに達するまで実行されます。行キーは、org.apache.hadoop.hbase.util.Bytesのインスタンスを返すJava式として指定されます。例: Bytes.toBytes(?EMP000999?)

SCAN_START_ROWが指定されている場合にのみ適用されます。

SCAN_ONLY_FAMILY

スキャンを、名前がこのパターンと一致する列ファミリに制限します。SQLライクなワイルドカードであるパーセント(%)およびアンダースコア(_)を使用できます。デフォルトでは、すべての列ファミリがスキャンされます。

LOG_FILE_NAME

ログ・ファイルのパスおよびファイル名を指定します。デフォルト・パスはユーザー・ホームで、デフォルト・ファイル名はreverse.logです。


表3-7に、作成されるフレックス・フィールドを示します。

表3-7 リバースエンジニアリングされたHBase表のフレックス・フィールド

オブジェクト フレックス・フィールド名 フレックス・フィールド・コード フレックス・フィールド・タイプ 説明

データストア

HBase定足数

HBASE_QUORUM

文字列

Zookeeperノードのカンマ区切りリスト。HBaseクライアントはこれを使用して、HBaseマスター・サーバーおよびHBaseリージョン・サーバーを検出します。

HBase記憶域タイプ

HBASE_STORAGE_TYPE

文字列

データ型が物理的にHBaseに格納される方法を定義します。

指定できる値は、BinaryおよびString (デフォルト)です。


3.6 マッピングの設計

Hive表をリバース・エンジニアリングして構成したら、次のいずれかのマッピング構成を選択できます。

3.6.1 ファイルからHiveへのデータのロード

ローカル・ファイル・システムまたはHDFSファイル・システムからHive表にデータをロードする手順は次のとおりです。

  1. ローカル・ファイルおよびHDFSファイルのデータ・ストアを作成します。

    ローカル・ファイル・データソースのリバース・エンジニアリングおよび構成の詳細は、『Oracle Data Integrator接続およびナレッジ・モジュール・ガイド』を参照してください。

  2. ソースとしてファイル・データ・ストアを、ターゲットとして対応するHive表を使用して、マッピングを作成します。マッピングの物理ダイアグラムで指定されているIKM File to Hive (Load Data)ナレッジ・モジュールを使用します。この統合ナレッジ・モジュールは、フラット・ファイルからHiveにデータをロードし、既存のデータを置換または追加します。

IKM File to Hive

IKM File to Hive (Load Data)では、次のものがサポートされます。

  • 1つ以上の入力ファイル。複数のソース・ファイルをロードするには、ファイル・データストアのリソース名でワイルドカード文字としてアスタリスクまたは疑問符を入力します(例: webshop_*.log)。

  • ファイル形式:

    • 固定長

    • デリミタ付き

    • カスタマイズされた形式

  • ロード・オプション:

    • 即時または遅延ロード

    • 上書きまたは追加

    • Hive外部表

表3-8に、IKM File to Hive (Load Data)のオプションを示します。詳細は、ナレッジ・モジュールを参照してください。

表3-8 IKM File to Hiveのオプション

オプション 説明

CREATE_TARG_TABLE

ターゲット表を作成する場合は、このオプションを選択します。USE_STAGING_TABLEfalseに設定されている場合、ターゲット表定義(特に行形式とファイル形式の詳細)が正しい場合にのみデータが正しく読み取られます。

TRUNCATE

ターゲット表/パーティションの内容を新しいデータで置き換える場合は、このオプションをtrueに設定します。そうしない場合、新しいデータはターゲット表に追加されます。TRUNCATEおよびUSE_STAGING_TABLEfalseに設定した場合、すべてのソース・ファイル名が一意である必要があり、すでにターゲット表にロードされているデータ・ファイルと競合することは許されません。

FILE_IS_LOCAL

ソース・ファイルをローカル(現在のHadoopクラスタの外側)とみなすかどうかを定義します。このオプションをtrueに設定した場合、データ・ファイルは最初にHadoopクラスタにコピーされます。Hiveサーバーがローカルまたは共有のファイル・システムを介してこのファイルにアクセスできる必要があります。このオプションをfalseに設定した場合、データ・ファイルはHadoopクラスタに移動され、ソースの場所では使用できなくなります。ソース・ファイルがすでにHDFSに存在する場合、このオプションをfalseに設定すると、ファイル名の変更が行われるのみなので、操作は非常に高速で行われます。

このオプションは、EXTERNAL_TABLEfalseに設定されている場合にのみ適用されます。

EXTERNAL_TABLE

ターゲット/ステージング表を外部で管理する表として宣言するかどうかを定義します。外部表でない場合、Hiveがすべてのデータ・ファイルを管理します。つまり、すべてのデータ・ファイルが<hive.metastore.warehouse.dir>/<table_name>に移動されます。外部表の場合、Hiveはいずれのファイルの移動も削除も行いません。ODIスキーマで指定されている場所からデータがロードされます。

このオプションをtrueに設定した場合、次のようになります。

  • 物理データ・スキーマで指定されているディレクトリ内のすべてのファイルがロードされます。このため、ソース・データストアのリソース名のファイル名またはワイルドカード情報は無視されます。

  • ディレクトリ構造およびファイル名は、表のHivesディレクトリ編成(パーティション化やクラスタ化など)に準拠している必要があります。

  • ディレクトリおよびそのファイルはHDFSに存在する必要があります。

  • Hive LOAD-DATA文は発行されないため、(ターゲット側の式を使用して)ファイルを特定のパーティションにロードすることはできません。

USE_STAGING_TABLE

中間ステージング表を作成するかどうかを定義します。

次の場合は、Hiveステージング表が必要です。

  • ターゲット表がパーティション化されているが、データが複数のパーティションに分散されている

  • ターゲット表がクラスタ化されている

  • ターゲット表(パーティション)がソートされているが、入力ファイルはソートされていない

  • ターゲット表がすでに定義されているが、ターゲット表定義がKMで必要な定義と一致していない

  • ターゲット列順序がソース・ファイル列順序と一致していない

  • マップされていないソース列が存在する

  • マップされていない非パーティション・ターゲット列が存在する

  • ソースが固定長ファイルであり、ターゲットに文字列以外の列が存在する

前述のいずれにも該当しない場合は、パフォーマンスを向上させるためにこのオプションをオフにできます。

DELETE_TEMPORARY_OBJECTS

統合後に表、ファイル、スクリプトなどの一時オブジェクトを削除します。デバッグなどに使用できるよう一時ファイルを保持する場合は、このオプションをNoに設定します。

DEFER_TARGET_LOAD

ステージング表として宣言されているファイルを今すぐターゲット表にロードするか、後で実行時にロードするかを定義します。指定できる値は、STARTNEXTENDまたは<empty>です。

このオプションは、USE_STAGE_TABLEtrueに設定されている場合にのみ適用されます。

このオプションの代表的な使用例は、複数のファイルが存在し、それぞれのファイルでデータの再配布/ソートが必要であり、インタフェースを何度もコールしてファイルを収集する場合です。たとえば、1つのパッケージでインタフェースを使用して別々の場所から(多数の小さな)ファイルを取得し、Oracle Data Integrator変数に保存されている場所をターゲット・パーティション列で使用するとします。この場合、最初のインタフェース実行でDEFER_TARGET_LOADSTARTに設定され、その次のインタフェース実行でDEFER_TARGET_LOADNEXTに設定され、最後のインタフェースでENDに設定されます。DEFER_ TARGET _LOADSTART/NEXTに設定されたインタフェースはデータ・ファイルを(ターゲット表にはまだロードせずに) HDFSにロードするだけであり、クラスタへのファイル・アップロードを高速で行うためにこれらのインタフェースをパラレルで実行できます。

OVERRIDE_ROW_FORMAT

ステージング表(USE_STAGE_TABLEtrueに設定されている場合)またはターゲット表(USE_STAGE_TABLEfalseに設定されている場合)のHive行形式定義全体のオーバーライドを許可します。これには、行形式定義に使用されるテキストも含まれます。Apache Combined WebLogファイルの読取り例を次に示します。

ROW FORMAT SERDE 'org.apache.hadoop.hive.contrib.serde2.RegexSerDe' WITH SERDEPROPERTIES ( "input.regex" = "([^ ]*) ([^ ]*) ([^ ]*) (-|\\[[^\\]]*\\]) ([^ \"]*|\"[^\"]*\") (-|[0-9]*) (-|[0-9]*) (\".*?\") (\".*?\") (\".*?\")", "output.format.string" = "%1$s %2$s %3$s %4$s %5$s %6$s %7$s %8$s %9$s %10$s" ) STORED AS TEXTFILE

ソース・データストアの列のリストは、正規表現の入力グループのリストと一致している(列の数が同じであり、データ型が適切である)必要があります。USE_STAGE_TABLEfalseに設定されている場合、ターゲット列の数は、SerDeにより返される列の数(前述の例では正規表現のグループの数)と一致している必要があります。ソース列の数は無視されます(少なくとも1列をターゲットにマップする必要があります)。すべてのソース・データは列順序に従ってターゲット表構造にマップされ、SerDeの最初の列は最初のターゲット列にマップされ、SerDeの2番目の列は2番目のターゲット列にマップされます(以降も同様です)。USE_STAGE_TABLEtrueに設定されている場合、ソース・データストアの列数はSerDeにより返される列数と同じである必要があります。マップされた列のデータのみが転送されます。

STOP_ON_FILE_NOT_FOUND

入力ファイルが見つからない場合にKMを停止するかどうかを定義します。

HIVE_COMPATIBILE

Hiveバージョンの互換性を指定します。このオプションで指定できる値は、0.7および0.8です。

  • 0.7: 追加動作をシミュレートします。Hive 0.7 (CDH3)の場合はこれを使用する必要があります。

  • 0.8: Hiveの追加機能を使用します(このほうがパフォーマンスがよくなります)。Hive 0.8 (CDH4)以上が必要です。


3.6.2 HBaseからHiveへのデータのロード

HBase表からHiveにデータをロードする手順は次のとおりです。

  1. HiveにロードするHBase表のデータ・ストアを作成します。

    HBaseデータソースのリバース・エンジニアリングおよび構成の詳細は、「HBaseデータソースの設定」を参照してください。

  2. ソースとしてHBaseデータ・ストアを、ターゲットとして対応するHive表を使用して、マッピングを作成します。マッピングの物理ダイアグラムで指定されているLKM HBase to Hive (HBase-SerDe)ナレッジ・モジュールを使用します。このナレッジ・モジュールは、HiveからHBase表への読取りアクセスを提供します。

LKM HBase to Hive (HBase-SerDe)

LKM HBase to Hive (HBase-SerDe)では、次のものがサポートされます。

  • 単一ソースのHBase表。

表3-9に、LKM HBase to Hive (HBase-SerDe)のオプションを示します。詳細は、ナレッジ・モジュールを参照してください。

表3-9 LKM HBase to Hive (HBase-SerDe)のオプション

オプション 説明

DELETE_TEMPORARY_OBJECTS

データ統合後に表、ファイル、スクリプトなどの一時オブジェクトを削除します。デバッグなどに使用できるよう一時オブジェクトを保持する場合は、このオプションをNOに設定します。


3.6.3 HiveからHBaseへのデータのロード

Hive表からHBaseにデータをロードする手順は次のとおりです。

  1. HBaseにロードするHive表のデータ・ストアを作成します。

    Hiveデータソースのリバース・エンジニアリングおよび構成の詳細は、「Hiveデータソースの設定」を参照してください。

  2. ソースとしてHiveデータ・ストアを、ターゲットとして対応するHBase表を使用して、マッピングを作成します。マッピングの物理ダイアグラムで指定されているIKM Hive to HBase Incremental Update (HBase-SerDe)ナレッジ・モジュールを使用します。この統合ナレッジ・モジュールは、HiveからHBaseにデータをロードします。新しい行の挿入および既存の行の更新がサポートされています。

IKM Hive to HBase Incremental Update (HBase-SerDe)

IKM Hive to HBase Incremental Update (HBase-SerDe)では、次のものがサポートされます。

  • Hiveのフィルタ、結合、データセット、変換および集計

  • IKM Hive Transformにより生成されたインライン・ビュー

  • IKM Hive Control Appendにより生成されたインライン・ビュー

表3-10に、IKM Hive to HBase Incremental Update (HBase-SerDe)のオプションを示します。詳細は、ナレッジ・モジュールを参照してください。

表3-10 IKM Hive to HBase Incremental Update (HBase-SerDe)のオプション

オプション 説明

CREATE_TARG_TABLE

HBaseターゲット表を作成します。

TRUNCATE

ターゲット表の内容を新しいデータで置換します。このオプションをfalseに設定した場合、新しいデータはターゲット表に追加されます。

DELETE_TEMPORARY_OBJECTS

データ統合後に表、ファイル、スクリプトなどの一時オブジェクトを削除します。デバッグなどに使用できるよう一時オブジェクトを保持する場合は、このオプションをNOに設定します。

HBASE_WAL

HBaseがデータ損失を回避するために使用するWrite-Ahead-Log (WAL)を有効または無効にします。パフォーマンスを向上させるためには、WALを無効にできます。


3.6.4 SQLデータベースからHive、HBaseおよびファイルへのデータのロード

SQLデータベースからHive、HBaseおよびファイル・ターゲットにデータをロードする手順は次のとおりです。

  1. Hive、HBaseまたはファイル・ターゲットにロードするSQLソースのデータ・ストアを作成します。

    SQLデータソースのリバース・エンジニアリングおよび構成の詳細は、『Oracle Data Integrator接続およびナレッジ・モジュール・ガイド』を参照してください。

  2. ソースとしてSQLソース・データ・ストアを、ターゲットとして対応するHBase表、Hive表またはHDFSファイルを使用して、マッピングを作成します。マッピングの物理ダイアグラムで指定されているIKM SQL to Hive-HBase-File (SQOOP)ナレッジ・モジュールを使用します。この統合ナレッジ・モジュールは、SQLソースからHive、HBaseまたはファイル・ターゲットにデータをロードします。SQOOPを使用して、Hive、HBaseおよびファイル・ターゲットにデータをロードします。SQOOPは、パラレルなJDBC接続を使用してデータをロードします。

IKM SQL to Hive-HBase-File (SQOOP)

IKM SQL to Hive-HBase-File (SQOOP)では、次のものがサポートされます。

  • ステージングでのマッピング

  • ステージングでの結合

  • ステージングでのフィルタ式

  • データセット

  • ルックアップ

  • 導出表

表3-11に、IKM SQL to Hive-HBase-File (SQOOP)のオプションを示します。詳細は、ナレッジ・モジュールを参照してください。

表3-11 IKM SQL to Hive-HBase-File (SQOOP)のオプション

オプション 説明

CREATE_TARG_TABLE

ターゲット表を作成します。このオプションは、ターゲットがHiveまたはHBaseである場合にのみ適用されます。

TRUNCATE

既存のターゲット表の内容を新しいデータで置換します。HiveおよびHBaseターゲットの場合、ターゲット・データが切り捨てられます。ファイル・ターゲットの場合、ターゲット・ディレクトリが削除されます。ファイル・ターゲットの場合は、このオプションをtrueに設定する必要があります。

SQOOP_PARALLELISM

並列度を指定します。より正確には、抽出に使用されるマッパー・プロセスの数を指定します。

SQOOP_PARALLELISMオプションを1より大きい値に設定した場合、SPLIT_BYオプションを定義する必要があります。

SPLIT_BY

パラレル抽出のためにソース・データをn個のチャンクに分割する際に使用されるターゲット列を指定します(nはSQOOP_PARALLELISM)。データ・チャンクのサイズを均等にするためには、均一に配布された値が分割列に含まれている必要があります。データ・チャンク境界を計算するためには、SELECT MIN(EMP.EMPNO), MAX(EMP.EMPNO) from EMPLOYEE EMPのような問合せが使用されます。余分な全表スキャンが行われないように、分割列に索引を付ける必要があります。

BOUNDARY_QUERY

パラレル抽出のためにソース・データをチャンクに分割する際に、分割列の最小値と最大値が取得されます(KMオプションSPLIT-BY)。状況によっては、これが最善の境界値ではなかったり、境界値を取得する最適な方法ではないこともあります。このような場合は、このKMオプションを、1つの行と2つの列(分割列に使用される最小値と最大値)を返すSQL問合せに設定できます。この範囲は、パラレル実行のためにSQOOP_PARALLELISMチャンクに分割されます。ハードコードされたOracleソース範囲の例:

SELECT 1000, 2000 FROM DUAL

コンテキストの独立性を保つため、通常の表名はodiRef.getObjectNameコールを介して挿入する必要があります。たとえば、次のようになります。

SELECT MIN(EMPNO), MAX(EMPNO) FROM <%=odiRef.getObjectName("EMP")%>

TEMP_DIR

一時ファイルの格納に使用するディレクトリ(sqoopスクリプト、stdout、stderrリダイレクトなど)を指定します。このオプションを空白のままにした場合、次に示すシステムのデフォルトの一時ディレクトリが使用されます。

<?=System.getProperty("java.io.tmp")?>

MAPRED_OUTPUT_BASE_DIR

SQOOPにより一時ファイル用のサブディレクトリが作成される先のhdfsディレクトリを指定します。作業表に似た名前のサブディレクトリが、一時データを格納するためにここに作成されます。

DELETE_TEMPORARY_OBJECTS

データ統合後に表、ファイル、スクリプトなどの一時オブジェクトを削除します。デバッグなどに使用できるよう一時オブジェクトを保持する場合は、このオプションをNOに設定します。

USE_HIVE_STAGING_TABLE

データをHiveターゲット表にロードする前にHive作業表にロードします。このオプションをfalseに設定した場合、データはターゲット表に直接ロードされます。

このオプションをfalseに設定できるのは、次のすべての条件に該当する場合のみです。

  • すべてのターゲット列がマップされている場合

  • 既存のHive表で標準のHive行セパレータ(\n)および列デリミタ(\01)が使用されている場合

このオプションをfalseに設定すると、余分なデータ転送手順がなくなるために、パフォーマンスが向上します。

このオプションは、ターゲット・テクノロジがHiveである場合にのみ適用されます。

USE_GENERIC_JDBC_CONNECTOR

ターゲット・テクノロジ用のコネクタが使用できない場合に汎用JDBCコネクタを使用するかどうかを指定します。

SQOOPには、特定のテクノロジに対する固有のコネクタが用意されています。これらのコネクタによってSQL方言が処理され、パフォーマンスが最適化されます。各ターゲット・テクノロジ用のコネクタが存在する場合は、このコネクタを使用する必要があります。存在しない場合は、汎用JDBCコネクタを使用できます。

EXTRA_HADOOP_CONF_PROPERTIES

オプションの汎用Hadoopプロパティ。

EXTRA_SQOOP_CONF_PROPERTIES

オプションのSQOOPプロパティ。

EXTRA_SQOOP_CONNECTOR_CONF_PROPERTIES

オプションのSQOOPコネクタ・プロパティ。


3.6.5 Hive内のデータの検証と変換

データがHiveにロードされた後は、次のナレッジ・モジュールを使用してデータを検証および変換できます。

3.6.5.1 IKM Hive Control Append

このナレッジ・モジュールは、データを検証および制御し、切捨て/挿入(追加)モードでHiveターゲット表に統合します。無効なデータはエラー表に分離され、再利用できます。IKM Hive Control Appendでは、このナレッジ・モジュールまたはIKM Hive Transformを使用するインライン・ビュー・マッピングがサポートされています。

表3-12にオプションを示します。詳細は、ナレッジ・モジュールを参照してください。

表3-12 IKM Hive Control Appendのオプション

オプション 説明

FLOW_CONTROL

フロー制御をアクティブにします。

RECYCLE_ERRORS

以前の制御から拒否されたデータをリサイクルします。

STATIC_CONTROL

ターゲット・データの挿入または更新後にターゲット表を制御します。

CREATE_TARG_TABLE

ターゲット表を作成します。

TRUNCATE

ターゲット表の内容を新しいデータで置換します。このオプションをtrueに設定すると、パフォーマンスが向上します。

DELETE_TEMPORARY_OBJECTS

データ統合後に表、ファイル、スクリプトなどの一時オブジェクトを削除します。デバッグなどに使用できるよう一時オブジェクトを保持する場合は、このオプションをNOに設定します。

HIVE_COMPATIBILE

Hiveバージョンの互換性を指定します。このオプションで指定できる値は、0.7および0.8です。

  • 0.7: 追加動作をシミュレートします。Hive 0.7 (CDH3)の場合はこれを使用する必要があります。

  • 0.8: Hiveの追加機能を使用します(このほうがパフォーマンスがよくなります)。Hive 0.8 (CDH4)以上が必要です。


3.6.5.2 CKM Hive

このナレッジ・モジュールは、Hive表のデータ整合性をチェックします。Hiveデータ・ストアの制約の妥当性を検証し、無効なレコードをエラー表に転送します。CKM Hiveは、静的制御およびフロー制御に使用できます。格納されるデータに対するこれらの制約を定義する必要もあります。

表3-13に、このチェック・ナレッジ・モジュールのオプションを示します。詳細は、ナレッジ・モジュールを参照してください。

表3-13 CKM Hiveのオプション

オプション 説明

DROP_ERROR_TABLE

実行前にエラー表を削除します。このオプションをYESに設定した場合、ターゲット表に対する制御が実行されるたびに、エラー表が削除されます。つまり、以前の制御操作中に拒否、特定および格納されたレコードはすべて失われます。それ以外の場合、以前の拒否は保持されます。エラー表の他に、<error table>_tmpという名前の表も削除されます。

HIVE_COMPATIBILE

Hiveバージョンの互換性を指定します。このオプションで指定できる値は、0.7および0.8です。

  • 0.7: 追加動作をシミュレートします。Hive 0.7 (CDH3)の場合はこれを使用する必要があります。

  • 0.8: Hiveの追加機能を使用します(このほうがパフォーマンスがよくなります)。Hive 0.8 (CDH4)以上が必要です。


3.6.5.3 IKM Hive Transform

このナレッジ・モジュールは変換を実行します。シェル・スクリプトを使用してデータを変換してから、置換モードを使用してそれをHiveターゲット表に統合します。ナレッジ・モジュールはインライン・ビュー・マッピングをサポートしており、IKM Hive Control Appendのインライン・ビューとして使用できます。

変換スクリプトでは、ソース・データ・ストアで定義されている順序で入力列を読み取る必要があります。マップされたソース列のみが変換に送られます。変換スクリプトで、ターゲット・データストアで定義されている順に出力列を提供する必要があります。

表3-14に、この統合ナレッジ・モジュールのオプションを示します。詳細は、ナレッジ・モジュールを参照してください。

表3-14 IKM Hive Transformのオプション

オプション 説明

CREATE_TARG_TABLE

ターゲット表を作成します。

DELETE_TEMPORARY_OBJECTS

データ統合後に表、ファイル、スクリプトなどの一時オブジェクトを削除します。デバッグなどに使用できるよう一時オブジェクトを保持する場合は、このオプションをNOに設定します。

TRANSFORM_SCRIPT_NAME

変換スクリプトのファイル名を定義します。この変換スクリプトを使用して、入力データが出力構造に変換されます。次のようなローカル・パスとHDFSパスの両方がサポートされています。

ローカル・スクリプトの場所: file:///tmp/odi/script1.pl

HDFSスクリプトの場所: hdfs://namenode:nnPort/tmp/odi/script1.pl

次の要件が満たされていることを確認してください。

  • パス/ファイルには、ODIエージェントとHiveサーバーの両方からアクセスできる必要があります。スクリプトを起動する結果のMRジョブを実行するのはHiveサーバーなので、Hiveサーバーに読取りアクセスが必要です。

  • TRANSFORM_SCRIPTが設定されている(ODIでマッピング実行時にスクリプト・ファイルが作成される)場合、HDFS Java APIを使用してスクリプト・ファイルを記述するのはODIエージェントなので、ODIエージェントでパス/ファイルが書込み可能になっている必要があります。

KMオプションTRANSFORM_SCRIPTが設定されている場合、次の記述を構成の際の参考にしてください。

  • HDFSスクリプトの場所の場合:

    作成されたスクリプト・ファイルはODIエージェント・ユーザーにより所有され、所有側ディレクトリのグループを受け取ります。詳細は、『Hadoop Hdfs Permissions Guide』を参照してください。HDFSスクリプトに対する前述の2つの要件を満たすための標準構成は、HDFSスクリプト・ディレクトリのグループにODIエージェント・ユーザー(oracleの場合)およびHiveサーバー・ユーザー(hiveの場合)が含まれるようにすることです。グループhadoopにoracleおよびhiveが含まれている場合、次に示すサンプル・コマンドでは、HDFSスクリプト・ディレクトリの所有権が調整されます。

    logon as hdfs user hdfs dfs -chown oracle:hadoop /tmp/odi/myscriptdir

  • ローカル・スクリプトの場所の場合:

    作成されたスクリプト・ファイルはODIエージェント・ユーザーにより所有され、ODIエージェント・ユーザーのデフォルト・グループを受け取ります(スクリプト・ディレクトリに対してSGIDが設定されていない場合)。スティッキー・グループ・ビットが設定されている場合、ファイルはかわりにスクリプト・ディレクトリのグループにより所有されます。ローカル・スクリプトに対する前述の2つの要件を満たすための標準構成は、SGIDを使用するHDFS構成と同様です。

    chown oracle:hadoop /tmp/odi/myscriptdir chmod g+s /tmp/odi/myscriptdir

TRANSFORM_SCRIPT

変換スクリプトの内容を定義します。この変換スクリプトを使用して、入力データが出力構造に変換されます。空白のままにした場合、TRANSFORM_SCRIPT_NAMEで指定されたファイルがすでに存在している必要があります。空白にしない場合、スクリプト・ファイルが作成されます。

スクリプトの例(1対1の変換): #! /usr/bin/csh -f cat

マップされたすべてのソース列が、タブ区切りデータとして、stdinを介してこのスクリプトにスプールされます。続いて、このunixスクリプトによってデータが変換され、データがstdoutにタブ区切りデータとして書き出されます。このスクリプトでは、ターゲット列と同じ数の出力列を提供する必要があります。

TRANSFORM_SCRIPT_MODE

8進表記で先頭にゼロが付く、スクリプト・ファイルに対するUnix/HDFSファイル権限。たとえば、所有者およびグループに対する完全な権限は、0770です。

警告: 0777のような広範囲の権限を使用すると、セキュリティ・リスクが発生します。

ディレクトリ権限の詳細は、TRANSFORM_SCRIPT_NAMEのKMオプションの説明も参照してください。

PRE_TRANSFORM_DISTRIBUTE

ナレッジ・モジュールによる変換スクリプト適用前のデータの分散を可能にするソース列名のカンマ区切りリスト(オプション)を提供します。

PRE_TRANSFORM_SORT

ナレッジ・モジュールによる変換スクリプト適用前のデータのソートを可能にするソース列名のカンマ区切りリスト(オプション)を提供します。

POST_TRANSFORM_DISTRIBUTE

ナレッジ・モジュールによる変換スクリプト適用後のデータの分散を可能にするターゲット列名のカンマ区切りリスト(オプション)を提供します。

POST_TRANSFORM_SORT

ナレッジ・モジュールによる変換スクリプト適用後のデータのソートを可能にするターゲット列名のカンマ区切りリスト(オプション)を提供します。


3.6.6 HiveおよびHDFSからOracleデータベースへのデータのロード

IKM File-Hive to Oracle (OLH-OSCH)は、Oracle Loader for Hadoopを使用してHDFSファイルまたはHiveソースからOracleデータベース・ターゲットにデータを統合します。ナレッジ・モジュールは、マッピング構成および選択されたオプションを使用して、適切なOracle Databaseターゲット・インスタンスを生成します。HiveとHadoopのバージョンは、Oracle Loader for Hadoopの要件に従う必要があります。


関連資料:


表3-15に、この統合ナレッジ・モジュールのオプションを示します。詳細は、ナレッジ・モジュールを参照してください。

表3-15 IKM File - Hive to Oracle (OLH-OSCH)

オプション 説明

OLH_OUTPUT_MODE

HadoopデータをOracleにロードする方法を指定します。指定できる値は、JDBC、OCI、DP_COPY、DP_OSCHおよびOSCHです。

  • JDBC出力モード: 多数のダイレクト・インサートJDBC接続を使用してデータが挿入されます。まれに、JDBCモードでは、Hadoopでタスクの再開が試行されるためにターゲット表でレコードが重複することがあります。

  • OCI出力モード: ダイレクト・パス・モードで多数のダイレクト・インサートOCI接続を使用してデータが挿入されます。USE_ORACLE_STAGINGfalseに設定されている場合、ターゲット表をパーティション化する必要があります。USE_ORACLE_STAGINGtrueに設定されている場合、FLOW_TABLE_OPTIONSで明示的にパーティション化を指定する必要があります(例: "PARTITION BY HASH(COL1) PARTITIONS 4")。まれに、OCIモードでは、Hadoopでタスクの再開が試行されるためにターゲット表でレコードが重複することがあります。

  • DP_COPY出力モード: OLHによって多数のDataPumpエクスポート・ファイルが作成されます。これらのファイルは"Hadoop fs -copyToLocal"コマンドによって、EXT_TAB_DIR_LOCATIONで指定されたローカル・パスに転送されます。Oracle Databaseエンジンがこのパスにアクセスできる必要があります。コピー・ジョブが完了すると、ターゲット・データベースで外部表が定義され、それによりEXT_TAB_DIR_LOCATIONからファイルへのアクセスが行われます。

  • DP_OSCH出力モード: OLHによって多数のDataPumpエクスポート・ファイルが作成されます。エクスポート・フェーズ後、ターゲット・データベースに外部表が作成され、それによりOSCHを介したこれらの出力ファイルへの直接アクセスが行われます。Oracle Databaseエンジンがこのパスにアクセスできる必要があります。コピー・ジョブが完了すると、ターゲット・データベースで外部表が定義され、それによりEXT_TAB_DIR_LOCATIONからファイルへのアクセスが行われます。

  • OSCH出力モード: OSCHモードのロードでは、OLHは使用されません。ODIによって、ターゲット・データベースに外部表が作成され、これによりOSCHを介した入力ファイルへのアクセスが行われます。読取りできるのはデリミタ付きファイルおよび固定長ファイルのみです。OLHの前処理は行われないため、Hiveまたはカスタム入力形式(RegexInputFormatなど)からのロードはサポートされません。

REJECT_LIMIT

Oracle Loader for Hadoopおよび外部表のエラーの最大数を指定します。たとえば、UNLIMITEDを指定すると、すべてのエラーを除外します。整数値(10を指定すると、10件の拒否を許可): この値は、Oracle Loader for Hadoopのジョブ定義および外部表定義で使用されます。

CREATE_TARG_TABLE

ターゲット表を作成します。

TRUNCATE

ターゲット表の内容を新しいデータで置換します。

DELETE_ALL

ターゲット表内のすべてのデータを削除します。

USE_HIVE_STAGING_TABLE

Oracle Loader for Hadoopで抽出が実行される前に、Hiveソース・データをマテリアライズします。このオプションをfalseに設定した場合、Oracle Loader for Hadoopは直接Hiveソース・データにアクセスします。このオプションをfalseに設定できるのは、次のすべての条件に該当する場合のみです。

  • 単一ソース表のみ

  • 変換、フィルタ、結合なし

  • データセットなし

このオプションをfalseに設定すると、余分なデータ転送手順がなくなるために、パフォーマンスが向上します。

このオプションは、ソース・テクノロジがHiveである場合にのみ適用されます。

USE_ORACLE_STAGING_TABLE

中間Oracleデータベース・ステージング表を使用します。

抽出されたデータは、外部表によってOracleで使用可能になります。USE_ORACLE_STAGING_TABLEtrueに設定されている場合(デフォルト)、外部表は一時(I$)表として作成されます。次に、このI$表データがターゲット表に挿入されます。このオプションをfalseに設定できるのは、次のすべての条件に該当する場合のみです。

  • OLH_OUTPUT_MODEJDBCまたはOCIに設定されている場合

  • すべてのソース列がマップされている場合

  • すべてのターゲット列がマップされている場合

  • ターゲット側のマッピング式がない場合

このオプションをfalseに設定すると、余分なデータ転送手順がなくなるためにパフォーマンスが向上しますが、Oracle Loader for Hadoopによって複数のトランザクションでデータがロードされるため、部分データがターゲット表にロードされる可能性があります。

EXT_TAB_DIR_LOCATION

外部表のファイル・システム・パスを指定します。以下の点に注意する必要があります。

  • OLH_OUTPUT_MODE = DP_*|OSCHの場合にのみ適用されます。

  • OLH_OUTPUT_MODE = DP_*の場合: このパスには、ODIエージェントとターゲット・データベース・エンジンの両方からアクセスできる必要があります。

  • OLH_OUTPUT_MODE = DP_*の場合: 外部ディレクトリ・オブジェクトの名前はI$表の名前です。

  • OLH_OUTPUT_MODE = DP_COPYの場合: ODIエージェントはhadoop-fsコマンドを使用して、dpファイルをこのディレクトリにコピーします。

  • OLH_OUTPUT_MODE = DP_*|OSCHの場合: このパスには外部表のlog/bad/dscファイルが含まれます。

  • ODIエージェントは、クリーンアップ時にこのディレクトリからすべてのファイルを削除してから、OLH/OSCHを起動します。

TEMP_DIR

一時ファイルの格納に使用するディレクトリ(sqoopスクリプト、stdout、stderrリダイレクトなど)を指定します。このオプションを空白のままにした場合、次に示すシステムのデフォルトの一時ディレクトリが使用されます。

<?=System.getProperty("java.io.tmp")?>

MAPRED_OUTPUT_BASE_DIR

Oracle Loader for Hadoopジョブで一時ファイル/datapump出力ファイル用のサブディレクトリが作成される先のHDFSディレクトリを指定します。

FLOW_TABLE_OPTIONS

作成時に統合表の属性を指定するもので、パフォーマンス向上のために使用します。このオプションは、デフォルトでNOLOGGINGに設定されます。このオプションは空のままにしておくこともできます。

DELETE_TEMPORARY_OBJECTS

データ統合後に表、ファイル、スクリプトなどの一時オブジェクトを削除します。デバッグなどに使用できるよう一時オブジェクトを保持する場合は、このオプションをNOに設定します。

OVERRIDE_INPUTFORMAT

デフォルトでは、InputFormatクラスはソースのデータストア/テクノロジ(DelimitedTextInputFormatまたはHiveToAvroInputFormat)から導出されます。このオプションを使用すると、ユーザーはカスタムInputFormatのクラス名を指定できます。OLH_OUTPUT_MODE=OSCHと一緒に使用することはできません。

たとえば、Webログ・ファイルのようなカスタム・ファイル形式を読み取る場合、値oracle.hadoop.loader.lib.input.RegexInputFormatを割り当てることによりOLH RegexInputFormatを使用できます。

正規表現の指定方法の詳細は、KMオプションの「EXTRA_OLH_CONF_PROPERTIES」を参照してください。

EXTRA_OLH_CONF_PROPERTIES

特に、カスタムInputFormatを使用する場合(詳細はKMオプション「OVERRIDE_INPUTFORMAT」を参照)、InputFormatに追加の構成パラメータが必要となることがあります。これらは、OLH構成ファイル内に提供されています。このKMオプションを使用すると、追加のプロパティをOLH構成ファイルに追加できます。OLH_OUTPUT_MODE=OSCHと一緒に使用することはできません。

たとえば、apache Webログ・ファイル形式のロードで、カスタム・ファイル形式の読取りにOLH RegexInputFormatを使用する場合、このKMオプションにより正規表現およびその他の解析詳細を指定します。

<property> <name>oracle.hadoop.loader.input.regexPattern</name> <value>([^ ]*) ([^ ]*) ([^ ]*) (-|\[[^\]]*\]) ([^ \"]*|\"[^\"]*\") (-|[0-9]*) (-|[0-9]*) (\".*?\") (\".*?\") (\".*?\")</value> <description>RegEx for Apache WebLog format</description> </property>


3.6.7 HiveおよびHDFSからSQLデータベースへのデータのロード

IKM File-Hive to SQL (SQOOP)は、SQOOPを使用してHDFSファイルまたはHiveソースからSQLデータベースにデータを統合します。

IKM File-Hive to SQL (SQOOP)

IKM File-Hive to SQL (SQOOP)では、次のものがサポートされます。

  • Hiveのフィルタ、結合、データセット、変換および集計

  • IKM Hive Control Appendにより生成されたインライン・ビュー

  • IKM Hive Transformにより生成されたインライン・ビュー

  • LKM HBase to Hive (HBase SerDe)を使用するHive-HBaseソース表

  • ファイル・ソース・データ(デリミタ付きファイル形式のみ)

表3-16に、この統合ナレッジ・モジュールのオプションを示します。詳細は、ナレッジ・モジュールを参照してください。

表3-16 IKM File-Hive to SQL (SQOOP)

オプション 説明

CREATE_TARG_TABLE

ターゲット表を作成します。

TRUNCATE

ターゲット・データストアの内容を新しいデータで置換します。このオプションをfalseに設定した場合、新しいデータはターゲット・データストアに追加されます。

DELETE_ALL

ターゲット・データストア内のすべての行を削除します。

SQOOP_PARALLELISM

並列度を指定します。より正確には、SQOOPエクスポート時に使用されるマッパーの数と、パラレルJDBC接続の数を指定します。

USE_TARGET_STAGING_TABLE

デフォルトでは、ソース・データはターゲット側のステージング表にステージングされてから、ターゲット表に移動されます。このオプションをfalseに設定した場合、SQOOPによってソース・データが直接ターゲット表にロードされるため、追加のデータ転送手順がなくなることでパフォーマンスは向上し、ターゲットRDBM内の表領域の必要性が少なくなります。

ファイル・ソースの設定でこのオプションをfalseに設定できるのは、次のすべての条件に該当する場合のみです。

  • すべてのソース列をマップする必要がある場合

  • ソース列とターゲット列の順序が同じである場合

  • 最初のファイル列を最初のターゲット列にマップする必要がある場合

  • マッピングの差分がない場合

  • 1対1のマッピングのみの場合(式がない)

以下の点に注意する必要があります。

  • SQOOPは複数のライタを使用し、それぞれがターゲットに対する独自のJDBC接続を持ちます。各ライタは、複数のトランザクションを使用してデータを挿入します。つまり、USE_TARGET_STAGING_TABLEfalseに設定されている場合、ターゲット表に対する変更はアトミックでなくなり、ライタが失敗するとターゲット表が部分的に更新されることがあります。

  • SQOOP用のTeradataコネクタは常に、ロード中に追加のステージング表を作成します。このコネクタ・ステージング表は、KMオプションとは無関係です。

USE_GENERIC_JDBC_CONNECTOR

ターゲット・テクノロジ用のコネクタが使用できない場合に汎用JDBCコネクタを使用するかどうかを指定します。

SQOOPには、特定のテクノロジに対する固有のコネクタが用意されています。これらのコネクタによってSQL方言が処理され、パフォーマンスが最適化されます。各ターゲット・テクノロジ用のコネクタが存在する場合は、このコネクタを使用する必要があります。存在しない場合は、汎用JDBCコネクタを使用できます。

FLOW_TABLE_OPTIONS

ターゲット側の作業表を作成する際に、RDBMS固有の表オプションを使用すると、パフォーマンスを向上させることができます。デフォルトでは、このオプションは空であり、ナレッジ・モジュールは次の表オプションを使用します。

  • Oracleの場合: NOLOGGING

  • DB2の場合: NOT LOGGED INITIALLY

  • Teradataの場合: no fallback, no before journal, no after journal

明示的な値を指定すると、これらのデフォルトがオーバーライドされます。

TEMP_DIR

一時ファイルの格納に使用するディレクトリ(sqoopスクリプト、stdout、stderrリダイレクトなど)を指定します。このオプションを空白のままにした場合、次に示すシステムのデフォルトの一時ディレクトリが使用されます。

<?=System.getProperty("java.io.tmp")?>

MAPRED_OUTPUT_BASE_DIR

SQOOPにより一時ファイル用のサブディレクトリが作成される先のHDFSディレクトリを指定します。作業表に似た名前のサブディレクトリが、一時データを格納するためにここに作成されます。

DELETE_TEMPORARY_OBJECTS

データ統合後に表、ファイル、スクリプトなどの一時オブジェクトを削除します。デバッグなどに使用できるよう一時オブジェクトを保持する場合は、このオプションをNOに設定します。

TERADATA_PRIMARY_INDEX

ターゲット表の主索引。Teradataは主索引を使用して、データを複数のAMPに分散します。データを均等に分散して処理パフォーマンスを最大にするには、カーディナリティが高い(個別値が多数存在する)主索引を選択することが重要です。主索引を選択する際は、Teradataの推奨事項に従ってください。

このオプションは、Teradataターゲットにのみ適用されます。

TERADATA_FLOW_TABLE_TYPE

Teradataフロー表のタイプ(SETまたはMULTISET)。

このオプションは、Teradataターゲットにのみ適用されます。

TERADATA_OUTPUT_METHOD

Teradataコネクタがデータをロードする方法を指定します。有効な値は次のとおりです。

  • batch.insert: バッチ処理されたプリペアド文を使用する複数のJDBC接続(最初は最も簡単)

  • multiple.fastload: 複数のFastLoad接続

  • internal.fastload: 単一の調整済FastLoad接続(パフォーマンスは最も高い)

このオプションは、Teradataターゲットにのみ適用されます。

EXTRA_HADOOP_CONF_PROPERTIES

オプションの汎用Hadoopプロパティ。

EXTRA_SQOOP_CONF_PROPERTIES

オプションのSQOOPプロパティ。

EXTRA_SQOOP_CONNECTOR_CONF_PROPERTIES

オプションのSQOOPコネクタ・プロパティ。