プライマリ・コンテンツに移動
Oracle® Big Data Connectorsユーザーズ・ガイド
リリース5 (5.0)
F21918-01
目次へ移動
目次
索引へ移動
索引

前
次

3 Oracle Loader for Apache Hadoop

この章では、Oracle Loader for Apache Hadoop (Oracle Loader for Hadoop)を使用してApache HadoopからOracle Databaseの表にデータをロードする方法について説明します。内容は次のとおりです。

3.1 Oracle Loader for Hadoopとは

Oracle Loader for Hadoopは、HadoopクラスタからOracle Databaseの表にデータをすばやくロードするための効率的でパフォーマンスのよいローダーです。これは、必要に応じてデータを事前にパーティション化し、そのデータをデータベース対応形式に変換します。また、データのロードや出力ファイルの作成の前に主キーまたはユーザー指定の列でレコードをソートすることもできます。Oracle Loader for Hadoopは、他のローダーでは一般にデータベース・サーバーでロード処理の一部として行うこれらの事前処理を、Hadoopの並列処理フレームワークを利用して行います。これらの操作をHadoopにオフロードすることによってデータベース・サーバーに必要なCPUの量を削減し、他のデータベース・タスクのパフォーマンスに与える影響を軽減します。

Oracle Loader for Hadoopは、リデューサ間のデータのバランスを調整してパフォーマンスを向上させるJava MapReduceアプリケーションです。このアプリケーションは様々な入力データ形式を扱い、フィールドを集めたレコード形式でデータを表します。レコード形式のデータが存在するソース(AvroファイルやApache Hive表など)からデータを読み取ったり、テキスト・ファイルの行をフィールドに分割できます。

Javaプログラミングのスキルがあれば、カスタム入力形式を定義して、ローダーで処理できるデータ・タイプを拡張できます。Oracle Loader for Hadoopは、そのカスタム・コードを使用してフィールドとレコードを抽出します。

3.2 Oracle Loader For Hadoopのインタフェース

Oracle Loader for Hadoopを使用する方法には、次の3つがあります。

  • Oracle Shell for Hadoop Loaders (OHSH)

    OHSHは、Oracle Loader for Hadoopを使用するためのお薦めの方法です。これには、OLHなどの様々なリソースを使用してHadoopとOracle Databaseの間でデータを移動するためのCLI(その単純なコマンド構文をスクリプト記述することもできる)が含まれています。

  • Oracle SQL Developer

    Oracle SQL Developerは、多くの製品の中でも特にOracle DatabaseおよびOracle Big Data Connectorsとの統合を実現した無償のグラフィカルIDEです。これには、Oracle Big Data Connectorsへのアクセスとその使用を支援するウィザードが付属しています。

  • hadoopコマンドライン・ユーティリティ

    コマンドラインで、構成設定を使用してジョブの詳細を指定します。通常、これらの設定はジョブ構成ファイルに指定します。優先UI (OHSHまたはSQL Developer)でサポートされていない機能を使用する必要がある場合は、このオプションを検討できます。ほとんどのユースケースでは、OHSHまたはSQL Developerで十分です。

関連項目:

このガイドの「Oracle SQL DeveloperとOracle Big Data Connectorsの併用」では、Oracle SQL Developerのダウンロード手順と、Oracle Big Data Connectorsと併用するためのその構成手順が説明されています。

3.3 Oracle Loader for Hadoopを使用する前に

これらの手順では、OHSHを使用してOracle Loader for Hadoopを使用する方法を示します。

作業を開始する前に

Hadoopに格納されたデータをOLHを使用してOracle Database表にロードする前に、次のことを知っておく必要があります。

  • 接続先のデータベース・スキーマのパスワード(データベース接続URLによって示される)または関連するその他のデータベース資格証明情報。

  • Oracle Database表の名前。

  • Hadoop内に格納されているデータのソース(HDFSディレクトリのパス、またはHive表の名前)。

  • 推奨されるロード方式。JDBCまたはダイレクト・パスのいずれかを選択します。ダイレクト・パス・ロードのほうが高速ですが、パーティション化されたターゲット表が必要です。JDBCでは必要ありません。

リソースについて

OHSHでは、リソースという用語は、OHSHがデータソース、宛先およびコマンド言語を定義するために示すインタフェースのことを指します。次の4種類のリソースを使用できます。

  • Hadoopリソース: HDFSコマンドを実行し、ソースまたは宛先としてHDFSを使用する場合。

  • Hiveリソース: Hiveコマンドを実行し、ソースまたは宛先としてHiveを指定する場合。

  • JDBCリソース: データベースへのJDBC接続を行う場合。

  • SQLリソース: データベース・スキーマでSQLコマンドを実行する場合。

OHSHの起動時に作成される2種類のリソースは次のとおりです。

  • hive0: デフォルトのHiveデータベースにアクセスできるようにします。

  • hadoop0: HDFSにアクセスできるようにします。

セッション内でSQLおよびJDBCリソースおよび追加のHiveリソースを作成できます(たとえば、他のHiveデータベースに接続する場合)。次の例のように、わかりやすい名前をリソースに割り当てます。ここで、sql10およびora_mydatabaseという名前がリソースのタイプを明確に示しています。

ここでは、リソースは次のコマンドで呼び出され、パーセント記号(%)接頭辞はリソース名を示します。

Oracle Database表のロード

  1. OHSHセッションを開始します。

    $ ohsh
    ohsh>
  2. 次のリソースを作成します。

    • SQLリソース:
      ohsh> create sqlplus resource sql0 connectid="<database connection url>"

      プロンプトで、データベース・パスワードを入力します。

      • JDBC SSL使用時のSQLリソース:

        JDBC SSL接続を使用してOracle Databaseに接続できます(たとえば、Oracle Autonomous Databaseに接続する場合)。クライアント資格証明をダウンロードし、tnsnames.oraファイル内のTNSエントリを識別するには、「JDBC SSLの使用」を参照してください。

        次に例を示します。
        ohsh> create sqlplus resource sql_ssl connectid="inst1_ssl"

        inst1_sslは、JDBC SSL接続のTNSエントリです。

        プロンプトで、データベース・パスワードを入力します。

      • Javaキーストアの使用時のSQLリソース

        Javaキーストアを使用してパスワードを保存でき、ユーザー名とパスワードの入力を求められることがなくなります。データをロードするために開発するスクリプトにこれを追加します。Javaキーストアを作成するには、「セキュアな外部JavaキーストアおよびHadoop資格証明コマンドの使用」を参照してください。

        次に例を示します。
        ohsh> create sqlplus resource sql_cs user=oracle                
        passwordalias=oracle_passwd               
        provider="jceks://file/home/oracle/passwd.jceks"               
        connectid="inst1" 
    • JDBCリソース:

      ターゲット・スキーマを示すJDBCリソース名にすることをお薦めします。

      ohsh> create jdbc resource ora_mydatabase 
      connectid="<database connection ur1>"

      プロンプトで、データベース・パスワードを入力します。

      • JDBC SSL使用時のJDBCリソース:

        JDBC SSL接続を使用してOracle Databaseに接続できます(たとえば、Oracle Autonomous Databaseに接続する場合)。

        次に例を示します。
        ohsh> create jdbc resource ora_mydatabase_ssl 
        connectiondir=/home/oracle/ssl_client_wallet 
        connectid="inst1_ssl"

        inst1_sslは、JDBC SSL接続のTNSエントリです。

        プロンプトで、データベース・パスワードを入力します。

        クライアント資格証明をダウンロードし、tnsnames.oraファイル内のTNSエントリを識別するには、「JDBC SSLの使用」を参照してください。

      • Javaキーストアの使用時のJDBCリソース

        Javaキーストアを使用してパスワードを保存でき、ユーザー名とパスワードの入力を求められることがなくなります。データをロードするために開発するスクリプトにこれを追加します。Javaキーストアを作成するには、「セキュアな外部JavaキーストアおよびHadoop資格証明コマンドの使用」を参照してください。

        次に例を示します。
        ohsh> create jdbc resource ora_mydatabase_cs 
        connectiondir=oracle
        passwordalias=oracle_passwd              
        provider="jceks://file/home/oracle/passwd.jceks"              
        connectid="inst1"
    • 追加のHiveリソース(必要な場合):

      デフォルトのHiveリソースhive0は、Hive内のデフォルト・データベースに接続します。別のHiveデータベースに接続する必要がある場合は、別のリソースを作成します。

      ohsh> create hive resource hive_mydatabase connectionurl=”jdbc:hive2:///<Hive database name>
  3. loadコマンドを使用して、HDFSからOracleデータベース内のターゲット表にファイルをロードします。

    次のコマンドは、ダイレクト・パス・オプションを使用して、HDFSの<HDFSパス>内のデリミタ付きテキスト・ファイルからOracle Database内のターゲット表にデータをロードします。

    ohsh> load oracle table ora_mydatabase:<target table in the Oracle database> from path hadoop0:/user/<HDFS path> using directpath

    注意:

    デフォルトのダイレクト・パス方式は、最も迅速に表をロードできる方法です。ただし、パーティション化されたターゲット表が必要です。ダイレクト・パスは必ずパーティション表とともに使用することをお薦めします。パーティション化されていないターゲット表にロードするには、JDBCオプションを使用します。

    コマンドで明示的にロード方式を示さない場合は、OHSHによって自動的に適切な方式が使用されます。ターゲットOracle表がパーティション化されている場合は、デフォルトで、OHSHによってダイレクト・パス(つまり、Oracle OCI)が使用されます。Oracle表がパーティション化されていない場合は、JDBCが使用されます。

  4. ロード後は、行数を確認します。

    OHSHのコマンドラインからこれを実行できます。

    ohsh> %sql0 select count(*) from <target table in Oracle Database>

Oracle Database表へのHive表のロード

OHSHを使用して、Hive表をOracleデータベース内のターゲット表にロードできます。次のコマンドは、ダイレクト・パス方式を使用してこれを行う方法を示します。

ohsh> load oracle table ora_mydatabase:<target table in Oracle Database> from hive table hive0:<Hive table name>

ターゲット表がパーティション化されている場合はOHSHによって自動的にダイレクト・パスが使用されることに注意してください。コマンドでusing directpathを明示的に入力する必要はありません。

ターゲット表がパーティション化されていない場合は、かわりにJDBC方式を指定します。

ohsh> load oracle table ora_mydatabase:<target table in Oracle Database> from hive table hive0:<Hive table name> using jdbc

注意:

loadコマンドは、Hive表内とOracle Database表内の列名が一致することが前提となっています。一致しない場合は、OHSHのloadermapを使用します。

OHSHのローダー・マップの使用

この項で示す単純なロード例では、次のことが前提となっています。

  • ここでは、Hadoop内のテキスト・ファイルからOracle Database表にデータをロードします。ターゲット表内の列の宣言された順序は、ファイル内のデリミタ付きテキスト・フィールドの物理的な順序付けに正しくマップされます。

  • ここでは、Hive表をOracle Database表にロードします。HiveとOracle Databaseの列名は同じです。

ただし、列名(または、列名とデリミタ付きテキスト・フィールドの順序)が一致しない複雑なケースの場合は、OHSHのloadermapコンストラクタを使用して、これらの不一致を修正してください。

loadermapを使用して、表にロードするターゲット列のサブセットを指定することや、テキスト・ファイルからロードする場合はロード時にフィールドの書式を指定することもできます。

ローダー・マップについては、この概要では説明されていません。

OHSHでのOracle Loader for Hadoopのパフォーマンス・チューニング

ネットワーク帯域幅の他に、2つの要因がOracle Loader for Hadoopのパフォーマンスに大きく影響する可能性があります。OHSHでは両方をチューニングできます。

  • 並列度

    並列度は、HadoopでOracle Loader for Hadoopを実行するときのパフォーマンスに影響します。デフォルトの方式(ダイレクト・パス)では、並列度は、リデューサ・タスクの数によって決まります。リデューサ・タスクの数が多いほど、パフォーマンスが高速になります。デフォルト値は4です。タスクの数を設定するには、次のコマンドを実行します。

    ohsh> set reducetasks 18

    JDBCオプションの場合、並列度はマップ・タスクの数によって決まり、最適な数は自動的に決定されます。ただし、ターゲット表がパーティション化されている場合はダイレクト・パスのほうがJDBCより速いということを覚えておいてください。

  • ロード・バランシング

    パフォーマンスは、負荷がリデュース・タスク全体に均等に分散されている場合に最大になります。負荷はサンプリングによって検出されます。サンプリングは、JDBCおよびデフォルト・コピー方式を使用して、負荷についてデフォルトで有効になっています。

OHSHでのデバッグ

次のいくつかのOHSH設定によって、デバッグ情報の利用可能度が制御されます。

  • outputlevel

    outputlevelは、デフォルトでminimalに設定されます。コマンド失敗時にスタック・トレースを返すには、verboseに設定します。

    ohsh> set outputlevel verbose
  • logbadrecords

    ohsh> set logbadrecords true

    これはデフォルトでtrueに設定されます。

次のログ・ファイルはデバッグに有益です。

  • Oracle Loader for Hadoopログ・ファイル

    /user/<username>/smartloader/jobhistory/oracle/<target table schema>/<target table name>/<OHSH job ID>/_olh
  • マップ・タスクおよびリデュース・タスクによって生成されたログ・ファイル

Oracle Loader for Hadoopに役立つその他のOHSHプロパティ

OHSHのコマンドラインまたはスクリプトで、次のプロパティを設定できます。

  • dateformat

    ohsh> set dateformat “yyyy-MM-dd HH:mm:ss”

    このコマンドの構文は、Java日付書式によって指定されます。

  • rejectlimit

    デリミタ付きテキスト・ファイルのロードが失敗する前に拒否できる行の数です。

  • fieldterminator

    デリミタ付きテキスト・ファイルのロード時のフィールド終端文字です。

  • hadooptnsadmin

    Hadoopクラスタ内のOracle TNS adminディレクトリの場所です。

  • hadoopwalletlocation

    Hadoopクラスタ内のOracle Walletディレクトリの場所です。

3.3.1 追加情報

exttab (外部表)メソッドの使用によるデータのロード

HadoopからOracle Databaseにデータをロードするための3つ目のオプションは、exttabです。

注意:

exttabオプションは、OHSHのオンプレミス・デプロイメントでのみ使用できます。これは、Oracleクラウド・サービスでは使用できません。

exttabでは、データは外部表を介してロードされます。OHSHは、Oracle SQL Connector for HDFSを使用して外部表を作成してから、Create table as Select文を使用してデータをターゲット表にロードします。

ohsh> load oracle table ora_mydatabase:<target table in Oracle Database> from hive table hive0:<Hive table name> using exttab 

3.4 Hadoopコマンドライン・ユーティリティによるOracle Loader for Hadoopの使用

Oracle Loader for Hadoopを使用する場合は、次の基本的なステップを実行します。

  1. 初めてOracle Loader for Hadoopを使用する場合は、ソフトウェアがインストールおよび構成されていることを確認します。

    「Oracle Loader for Hadoopの設定」を参照してください。

  2. Oracle Databaseに接続してターゲット表を作成します。

    「ターゲット表の作成」を参照してください。

  3. Oracle Databaseへのセキュアな接続を確立します。
  4. HadoopクラスタのノードまたはクラスタのHadoopクライアントとして設定されているシステムにログインします。
  5. オフライン・データベース・モードを使用する場合、ログインしたHadoopシステムに表のメタデータをコピーします。
  6. 構成ファイルを作成します。このファイルは、ターゲット表のメタデータへのアクセス、データの入力形式、出力形式などの構成情報を示すXMLドキュメントです。

    「ジョブ構成ファイルの作成」を参照してください。

  7. 入力フィールドをOracleデータベース表の列にマップするXMLドキュメントを作成します。オプション。
  8. Oracle Loader for Hadoopのジョブを実行するシェル・スクリプトを作成します。

    「ローダー・ジョブの実行」を参照してください。

  9. セキュアなクラスタに接続する場合は、自分自身を認証するためにkinitを実行します。
  10. シェル・スクリプトを実行します。
  11. ジョブが失敗した場合、出力の診断メッセージを使用してエラーを特定し、修正します。

    「ジョブのレポート作成」を参照してください。

  12. ジョブが成功したら、コマンド出力を参照し、拒否されたレコード数を確認します。拒否されたレコードが多すぎる場合は、入力形式のプロパティの変更が必要になることがあります。
  13. テキスト・ファイルまたはデータ・ポンプ形式ファイルを生成した場合は、次のいずれかの方法でOracle Databaseにデータをロードします。
  14. ターゲット表の所有者としてOracle Databaseに接続します。この表に問い合せて、データが適切にロードされたことを確認します。適切にロードされなかった場合は、必要に応じて入力形式または出力形式のプロパティを変更し、問題を修正してください。
  15. OraLoaderジョブを本番環境で実行する前に、次の最適化を行います。

3.4.1 操作モードの概要

Oracle Loader for Hadoopには次の2つの動作モードがあります。

3.4.1.1 オンライン・データベース・モード

オンライン・データベース・モードでは、Oracle Loader for Hadoopはジョブ構成ファイルまたはOracle Walletに格納されている資格証明を使用してターゲット・データベースに接続します。ローダーはこのデータベースから表のメタデータを取得します。新規レコードは、直接ターゲット表に挿入することも、Hadoopクラスタ内のファイルに書き込むこともできます。データベースのデータが必要なとき、またはデータベース・システムが比較的空いているときには、レコードを出力ファイルからロードできます。

次の図は、オンライン・データベース・モードの要素間の関係を示しています。

図3-1 オンライン・データベース・モード

図3-1の説明はこの後にあります
「図3-1 オンライン・データベース・モード」の説明

3.4.1.2 オフライン・データベース・モード

オフライン・データベース・モードでは、Oracle DatabaseシステムがHadoopクラスタと異なるネットワークにあるなどの事情によってデータベースにアクセスできない場合に、Oracle Loader for Hadoopを使用できます。このモードでは、Oracle Loader for Hadoopは表のメタデータ・ファイルに指定された情報を使用します。このメタデータ・ファイルは、ユーザーが別のユーティリティで生成します。ローダーのジョブによって、出力データがHadoopクラスタ上のバイナリまたはテキスト形式の出力ファイルに保存されます。Oracle Databaseにデータをロードする手順は、Oracle SQL Connector for Hadoop Distributed File System (HDFS)やSQL*Loaderなど、別のユーティリティを使用して別途実行します。

次の図は、オフライン・データベース・モードの要素間の関係を示しています。この図には、データをターゲット表にロードする別途の手順は示されていません。

図3-2 オフライン・データベース・モード

図3-2の説明はこの後にあります
「図3-2 オフライン・データベース・モード」の説明

3.4.2 ターゲット表の作成

Oracle Loader for Hadoopはデータを1つのターゲット表にロードします。この表はOracleデータベース内に存在する必要があります。表は、空でも、データが格納されていてもかまいません。Oracle Loader for Hadoopは既存のデータを上書きしません。

表は、他の用途に使用する場合も同じ方法で作成します。その際は、次の制限に従う必要があります。

3.4.2.1 ターゲット表でサポートされるデータ型

ターゲット表の定義には次のデータ型を使用できます。

  • BINARY_DOUBLE

  • BINARY_FLOAT

  • CHAR

  • DATE

  • FLOAT

  • INTERVAL DAY TO SECOND

  • INTERVAL YEAR TO MONTH

  • NCHAR

  • NUMBER

  • NVARCHAR2

  • RAW

  • TIMESTAMP

  • TIMESTAMP WITH LOCAL TIME ZONE

  • TIMESTAMP WITH TIME ZONE

  • VARCHAR2

ターゲット表には、サポートされていないデータ型の列が含まれていてもかまいませんが、これらの列はnull値可能である必要があります。そうでない場合、値を設定します。

3.4.2.2 ターゲット表でサポートされるパーティション化方式

パーティション化は、非常に大規模な表の管理および効率的な問合せを行うためのデータベースの機能です。アプリケーションに対して完全に透過的な方法で、大規模な表をパーティションと呼ばれる小規模でより管理し易いサイズに分割する方法を提供します。

ターゲット表の定義には、次のシングルレベルおよびコンポジットレベルのパーティション化方式を使用できます。

  • ハッシュ

  • ハッシュ-ハッシュ

  • ハッシュ-リスト

  • ハッシュ-レンジ

  • 時間隔

  • 時間隔-ハッシュ

  • 時間隔-リスト

  • 時間隔-レンジ

  • リスト

  • リスト-ハッシュ

  • リスト-リスト

  • リスト-レンジ

  • レンジ

  • レンジ-ハッシュ

  • レンジ-リスト

  • レンジ-レンジ

Oracle Loader for Hadoopでは、参照パーティション化または仮想列ベースのパーティション化はサポートされません。

関連項目:

『Oracle Database VLDBおよびパーティショニング・ガイド』

3.4.2.3 圧縮

Oracle Loader for Hadoopでは、データを圧縮しません。ロード中にデータを圧縮する場合は、表およびデータベースのプロパティによって定義します。圧縮された表にデータをロードするには、表プロパティおよびデータベース・プロパティでそれぞれ定義してください。

3.4.3 ジョブ構成ファイルの作成

構成ファイルは、HadoopがMapReduceジョブを実行するために必要なすべての情報を格納しているXMLドキュメントです。このファイルには、Oracle Loader for Hadoopに必要なすべての情報も指定できます。「Oracle Loader for Hadoop構成プロパティ・リファレンス」を参照してください。

構成プロパティは、Oracle Loader for Hadoopのすべてのジョブに必要な次の情報を示します。

OraLoaderは、org.apache.hadoop.util.Toolインタフェースを実装し、MapReduceアプリケーションを構築する標準的なHadoopの方法に従います。これらの構成プロパティは、以下に示すようなファイルまたはhadoopのコマンドラインで指定できます。「ローダー・ジョブの実行」を参照してください。

ファイルの作成には任意のテキスト・エディタまたはXMLエディタを使用できます。次の例に、ジョブ構成ファイルの例を示します。

例3-1 ジョブ構成ファイル

<?xml version="1.0" encoding="UTF-8" ?>
<configuration>
 
<!--                          Input settings                             -->
 <property>
   <name>mapreduce.job.inputformat.class</name>
   <value>oracle.hadoop.loader.lib.input.DelimitedTextInputFormat</value>
 </property>
 
 <property>
   <name>mapreduce.input.fileinputformat.inputdir</name>
   <value>/user/oracle/moviedemo/session/*00000</value>
 </property>
 
 <property>
   <name>oracle.hadoop.loader.input.fieldTerminator</name>
   <value>\u0009</value>
 </property>
 
 <property>
   <name>oracle.hadoop.loader.input.fieldNames</name>
   <value>SESSION_ID,TIME_IDDATE,CUST_ID,DURATION_SESSION,NUM_RATED,DURATION_RATED,NUM_COMPLETED,DURATION_COMPLETED,TIME_TO_FIRST_START,NUM_STARTED,NUM_BROWSED,DURATION_BROWSED,NUM_LISTED,DURATION_LISTED,NUM_INCOMPLETE,NUM_SEARCHED</value>
 </property>
 
 <property>
   <name>oracle.hadoop.loader.defaultDateFormat</name>
   <value>yyyy-MM-dd:HH:mm:ss</value>
 </property>
 

<!--                          Output settings                             -->
 <property>
   <name>mapreduce.job.outputformat.class</name>
   <value>oracle.hadoop.loader.lib.output.OCIOutputFormat</value>
 </property>
 
 <property>
   <name>mapreduce.output.fileoutputformat.outputdir</name>
   <value>temp_out_session</value>
 </property>
 
<!--                          Table information                           -->
 <property>
   <name>oracle.hadoop.loader.loaderMap.targetTable</name>
   <value>movie_sessions_tab</value>
 </property>   

 
<!--                          Connection information                      -->
 
<property>
  <name>oracle.hadoop.loader.connection.url</name>
  <value>jdbc:oracle:thin:@${HOST}:${TCPPORT}/${SERVICE_NAME}</value>
</property>
 
<property>
  <name>TCPPORT</name>
  <value>1521</value>
</property>
 
<property>
  <name>HOST</name>
  <value>myoraclehost.example.com</value>
</property>
 
<property>
 <name>SERVICE_NAME</name>
 <value>orcl</value>
</property>
 
<property>
  <name>oracle.hadoop.loader.connection.user</name>
  <value>MOVIEDEMO</value>
</property>
 
<property>
  <name>oracle.hadoop.loader.connection.password</name>
  <value>oracle</value>        
  <description> Note: Protect this file with 600 permissions since it has password in clear text.</description>
</property>
 
</configuration>

3.4.4 SSLおよびOracleウォレットを使用したOracle Databaseへのセキュアな接続の確立

Oracle Databaseへのセキュアな接続の確立について学習します。

この項では、OracleウォレットまたはJDBC SSLプロトコルを作成および使用して、Oracle Databaseに対して非常にセキュアな接続を作成および確立する方法について説明します。

3.4.4.1 Oracleウォレットの使用

Oracleウォレットは認証および署名資格証明を格納するセキュアなソフトウェア・コンテナです。資格証明にはウォレットを使用することをお薦めします。Oracleウォレットを使用するには、次のプロパティをジョブ構成ファイルに入力します。

3.4.4.2 JDBC SSLの使用

SSLは、ネットワーク上でのセキュアな通信を提供する、広く使用されている業界標準プロトコルです。SSLでは、認証、データ暗号化およびデータ整合性が提供されます。Oracle Autonomous Data Warehouse Cloud ServiceなどのOracle Cloudサービスに接続する場合は、SSLが必要です。

3.4.4.2.1 JDBC SSLを使用したOracle Databaseへの接続

JDBC SSLを使用したOracle Databaseへの接続について学習します。

  1. Oracle Databaseに接続するには、「JDBC SSLの使用」の手順に従います。
  2. ジョブ構成ファイルに次のプロパティを追加します。
    <property> 
    <name>oracle.hadoop.loader.connection.directory</name> 
    <value><directory_location></value>
    <description>For example: /home/oracle/SSL_wallet</description>
    </property> 
    
    <property>
    <name>oracle.hadoop.loader.connection.tns_admin</name>
    <value><directory_location></value>
    <description>For example: /home/oracle/SSL_wallet</description>
    </property>
    
    <property>
    <name>oracle.hadoop.loader.connection.tnsEntryName</name> 
    <value><tns_entry></value>
    <description>The TNS Entry must use the tcps protocol in order to activate SSL in the JDBC Thin driver.For example,
     inst1_ssl.</description> 
    </property>

3.4.4.3 ターゲット表メタデータの生成(オフライン・データベース・モードの場合)

オフライン・データベース・モードの場合のターゲット表メタデータの生成について学習します。

ローダー・ジョブでデータベースにアクセスできない場合があります。たとえば、HadoopクラスタがOracle Databaseとは別のネットワークにある場合などです。この場合、OraLoaderMetadataユーティリティを使用して、ターゲット表のメタデータをファイルに抽出し、保存します。OraLoaderMetadataユーティリティの詳細は、「OraLoaderMetadataユーティリティ」を参照してください。

3.4.5 入力形式の概要

入力形式は、Hadoopに保存されている特殊な種類のデータを読み取る場合に使用します。次に示す様々な入力形式を使用して、Hadoopで一般的に利用されるデータ形式を読み取ることができます。

固有のカスタム入力形式を使用することもできます。組込み形式の説明に、カスタムInputFormatクラスの開発に役立つ情報を記入します。「カスタム入力形式」を参照してください。

データベース表にロードするデータの特定の入力形式を指定するには、ジョブ構成ファイルのmapreduce.job.inputformat.class構成プロパティを使用します。

注意:

組込みテキスト形式では、引用符で囲んだ値に埋め込まれたヘッダー行や改行文字(\n)は処理されません。

3.4.5.1 デリミタ付きテキスト入力形式

デリミタ付きテキスト・ファイルからデータをロードするには、mapreduce.job.inputformat.classを次のように設定します

oracle.hadoop.loader.lib.input.DelimitedTextInputFormat

3.4.5.1.1 DelimitedTextInputFormatの概要

入力ファイルは次の要件に従う必要があります。

  • レコードは改行文字で区切る。

  • フィールドは、カンマやタブなどの1文字のマーカーで区切る。

空の文字列のトークンは囲まれていても囲まれていなくても、nullで置き換えられます。

DelimitedTextInputFormatは、SQL*Loaderのトークン化方式をエミュレートします。つまり、各データはtで終了し、オプションでieまたはieteで囲みます。DelimitedTextInputFormatは次の構文規則に従います。tはフィールドの終端文字、ieは開始フィールド囲み文字、teは終了フィールド囲み文字、cは1文字です。

  • Line = Token t Line | Token\n

  • Token = EnclosedToken | UnenclosedToken

  • EnclosedToken = (white-space)* ie [(non-te)* te te]* (non-te)* te (white-space)*

  • UnenclosedToken = (white-space)* (non-t)*

  • white-space = {c | Character.isWhitespace(c) and c!=t}

囲まれたトークン(データ値)の前後の空白は破棄されます。囲まれていないトークンの場合、先頭の空白は破棄されますが、末尾の空白(ある場合)は破棄されません。

この実装では、カスタム囲み文字と終端文字は許可されますが、レコード終端文字は改行、空白はJavaのCharacter.isWhitespaceにハードコードされます。空白はフィールドの終端文字として定義できますが、その文字は、あいまいになるのを防ぐために空白文字のクラスから削除されます。

圧縮テキスト・ファイルは、読取り時にHadoopによって自動的に解凍されます。

3.4.5.1.2 必須の構成プロパティ

ありません。デフォルトの形式では、フィールドをカンマで区切り、フィールドの囲み文字は使用しません。

3.4.5.1.3 オプションの構成プロパティ

DelimitedTextInputFormatのフィールド・デリミタを定義するには、次のいずれかのプロパティを使用します。

入力フィールドの名前を指定するには、次のプロパティを使用します。

3.4.5.2 複合テキスト入力形式

DelimitedTextInputFormatで処理するには複雑すぎるテキスト・ファイルからデータをロードするには、mapreduce.job.inputformat.classを次のように設定します

oracle.hadoop.loader.lib.input.RegexInputFormat

たとえば、Webログのあるフィールドが引用符で区切られ、別のフィールドが角カッコで区切られている場合があります。

3.4.5.2.1 RegexInputFormatの概要

RegexInputFormatを使用する場合、レコードは改行文字で区切る必要があります。各テキスト行のフィールドは、正規表現のマッチングによって識別されます。

  • 正規表現はテキスト行全体が一致する必要があります。

  • フィールドの識別には正規表現のキャプチャ・グループが使用されます。

RegexInputFormatjava.util.regexの正規表現ベースのパターン・マッチング・エンジンを使用します。圧縮ファイルは、読取り時にHadoopによって自動的に解凍されます。

関連項目:

java.util.regexの詳細は、次のサイトにあるJava Platform Standard Edition 6 Javaリファレンスを参照してください。

http://docs.oracle.com/javase/6/docs/api/java/util/regex/package-summary.html

3.4.5.2.2 必須の構成プロパティ

データ入力ファイルを記述するには、次のプロパティを使用します。

3.4.5.2.3 オプションの構成プロパティ

すべての入力フィールドの名前を識別するには、次のプロパティを使用します。

大文字と小文字を区別しないマッチングを有効にするには、次のプロパティを使用します。

3.4.5.3 Hive表入力形式

Hive表からデータをロードするには、mapreduce.job.inputformat.classを次のように設定します

oracle.hadoop.loader.lib.input.HiveToAvroInputFormat

3.4.5.3.1 HiveToAvroInputFormatの概要

パーティション化されていない表の場合は、HiveToAvroInputFormatが表全体(Hive表のディレクトリ内の全ファイル)をインポートします。

パーティション化表の場合は、HiveToAvroInputFormatが1つ以上のパーティションをインポートします。パーティションはロードまたはスキップのいずれかを行うことができます。ただし、パーティションを一部ロードすることはできません。

Oracle Loader for Hadoopは、複合(非プリミティブの)列に値があるすべての行を拒否します。プリミティブ値に解決するUNIONTYPEフィールドがサポートされています。「拒否されたレコードの処理」を参照してください。

HiveToAvroInputFormatは、Hive表の行をAvroレコードに変換し、Hive表の列名を大文字に変換して、フィールド名を生成します。この自動大文字変換により、フィールド名がターゲット表の列名と一致する確率が高くなります。「ターゲット表列への入力フィールドのマッピング」を参照してください。

注意:

この入力形式では、列名に引用符で囲まれた識別子が使用されているHive表はサポートされません。「HIVE-6013」を参照してください

HiveToAvroInputFormatSQL Standard Based Hive Authorizationを実施しないことにも注意してください。詳細は、https://cwiki.apache.org/confluence/display/Hive/SQL+Standard+Based+Hive+Authorizationを参照してください。

3.4.5.3.2 必須の構成プロパティ

次の構成プロパティを使用して、Hiveのデータベースと表の名前を指定する必要があります。

3.4.5.3.3 オプションの構成プロパティ

ロードする入力Hive表の行のサブセットを指定するには、次のプロパティを使用します。

3.4.5.4 Avro入力形式

標準的なAvro形式のレコードが格納されているバイナリAvroデータ・ファイルからデータをロードするには、mapreduce.job.inputformat.classを次のように設定します

oracle.hadoop.loader.lib.input.AvroInputFormat

拡張子が.avroのファイルのみを処理するには、mapreduce.input.fileinputformat.inputdir構成プロパティにリストされているディレクトリに*.avroを追加します。

3.4.5.4.1 構成プロパティ

ありません。

3.4.5.5 Oracle NoSQL Database入力形式

Oracle NoSQL Databaseからデータをロードするには、mapreduce.job.inputformat.classを次のように設定します

oracle.kv.hadoop.KVAvroInputFormat

この入力形式はOracle NoSQL Database 11g、リリース2以降で定義されています。

3.4.5.5.1 KVAvroInputFormatの概要

Oracle Loader for Hadoopでは、KVAvroInputFormatを使用してOracle NoSQL Databaseから直接データを読み取ります。

KVAvroInputFormatは、Oracle NoSQL Databaseのキーと値のペアからキーではなく値を渡します。Oracle NoSQL DatabaseのキーにAvroデータ値としてアクセスする必要がある場合(ターゲット表に格納する場合など)、oracle.kv.hadoop.AvroFormatterを実装するJavaのInputFormatクラスを作成する必要があります。その後で、Oracle Loader for Hadoop構成ファイルのoracle.kv.formatterClassプロパティを指定できます。

KVAvroInputFormatクラスはorg.apache.hadoop.mapreduce.InputFormat<oracle.kv.Key, org.apache.avro.generic.IndexedRecord>のサブクラスです。

関連項目:

次のサイトにあるKVInputFormatBaseクラスのJavadoc

http://docs.oracle.com/cd/NOSQL/html/javadoc/index.html

3.4.5.5.2 必須の構成プロパティ

次の構成プロパティを使用して、キーと値のストアの名前と場所を指定する必要があります。

「Oracle NoSQL Databaseの構成プロパティ」を参照してください。

3.4.5.6 カスタム入力形式

組込み入力形式では不十分な場合は、カスタム入力形式のJavaクラスを作成できます。以下では、Oracle Loader for Hadoopで使用できる入力形式のフレームワークについて説明します。

3.4.5.6.1 カスタム入力形式の実装の概要

Oracle Loader for Hadoopは、org.apache.hadoop.mapreduce.InputFormatを拡張するクラスから入力を取得します。このクラスの名前をmapreduce.job.inputformat.class構成プロパティに指定する必要があります。

この入力形式では、getCurrentValueメソッドからAvroのIndexedRecord入力オブジェクトを返すRecordReaderインスタンスを作成する必要があります。次のメソッド・シグネチャを使用します。

public org.apache.avro.generic.IndexedRecord getCurrentValue()
throws IOException, InterruptedException;

Oracle Loader for Hadoopでは、IndexedRecord入力オブジェクトのスキーマを使用して入力フィールドの名前を検出し、ターゲット表の列にマップします。

3.4.5.6.2 エラー処理の概要

IndexedRecordの値の処理でエラーが発生した場合、Oracle Loader for HadoopはRecordReadergetCurrentKeyメソッドで返されるオブジェクトを使用してフィードバックを提供します。また、キーのtoStringメソッドを呼び出し、結果をエラー・メッセージで書式設定します。InputFormatの開発者は、次のいずれかの情報を返すことにより、拒否されたレコードの識別でユーザーを支援できます。

  • データ・ファイルのURI

  • InputSplit情報

  • データ・ファイル名とそのファイルのレコードのオフセット

機密情報が含まれる可能性があるため、レコードをクリア・テキスト形式で返すことはお薦めできません。返された値はクラスタ全体のHadoopのログに出力できます。「拒否されたレコードの不正なファイルへの記録」を参照してください。

レコードが失敗すると、キーがnullの場合、ローダーは識別情報を生成しません。

3.4.5.6.3 データ・サンプリングのサポート

Oracle Loader for Hadoopは、サンプラを使用してMapReduceジョブのパフォーマンスを向上させます。サンプラはマルチスレッド化され、各サンプラ・スレッドは、指定されたInputFormatクラスのコピーをインスタンス化します。新しいInputFormatを実装する場合は、スレッドセーフであることを確認します。「パーティション化表にデータをロードする場合のロード・バランシング」を参照してください。

3.4.5.6.4 InputFormatのサンプル・ソース・コード

Oracle Loader for Hadoopには、InputFormatサンプルのソース・コードもあります。

このサンプルにアクセスするには、$OLH_HOMEにあるexamples.zipファイルを解凍します。InputFormatサンプルはexamples/jsrcディレクトリにあります。

サンプルの形式では、データを単純なカンマ区切り値(CSV)ファイルからロードします。この入力形式を使用するには、HADOOP_CLASSPATH$OLH_HOME/examples/oraloader-examples.jarを追加し、ジョブ構成ファイル内のmapreduce.job.inputformat.classの値としてoracle.hadoop.loader.examples.CSVInputFormatを指定します。

この入力形式では、F0、F1、F2といったフィールド名が自動的に割り当てられます。構成プロパティはありません。

3.4.6 ターゲット表列への入力フィールドのマッピング

マッピングは、入力フィールドをターゲット表のどの列にロードするかを示します。自動マッピング機能を使用することも、常に手動で入力フィールドをターゲット列にマップすることもできます。

3.4.6.1 自動マッピング

Oracle Loader for Hadoopでは、入力データが次の要件に従っていれば、フィールドを適切な列に自動的にマップできます。

  • ターゲット表のすべての列をロードする。

  • IndexedRecord入力オブジェクトの入力データ・フィールド名が列名と完全に一致している。例: Hive表からロードする場合、Oracleターゲット表の列の名前は、Hive表の列の名前と完全に一致します。

  • DATE列にマップされるすべての入力フィールドを、同じJava日付形式を使用して解析できる。

自動マッピングの場合は、次の構成プロパティを使用します。

3.4.6.2 手動マッピング

自動マッピングの要件に準拠していないロードの場合は、追加のプロパティを定義する必要があります。これらのプロパティでは、次のことが可能です。

  • データをターゲット表の列のサブセットにロードする。

  • 入力フィールド名がデータベースの列名とまったく同じではない場合に、明示的なマッピングを作成する。

  • 入力フィールドごとに異なる日付形式を指定する。

手動マッピングの場合は、次のプロパティを使用します。

注意:

手動マッピングは、異なる日付列の書式が異なる場合に特に役立ちます。

3.4.6.3手動マッピング: 例

手動マッピングの例を次に示します。

テキスト・ファイルからロードする際の構成ファイルconf.xml

HDFS上のテキスト・ファイルから区切り文字付きテキストをロードする場合、テキスト・ファイル内の列を参照するには、F0、F1、…を使用します。この例では、F0がcolumnNamesプロパティのEMPLOYEE_IDにマップされ、F1がLAST_NAMEにマップされます。

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<configuration>   
     <property>       
          <name>oracle.hadoop.loader.loaderMap.targetTable</name>       
          <value>HR.EMPLOYEES</value>    
     </property>    
     <property>       
          <name>oracle.hadoop.loader.loaderMap.columnNames</name>       
          <value>EMPLOYEE_ID,LAST_NAME,EMAIL,HIRE_DATE,JOB_ID</value>   
     </property>   
      <property>       
          <name>oracle.hadoop.loader.loaderMap.EMPLOYEE_ID.field</name>       
          <value>F0</value>    
      </property>     
       <property>       
          <name>oracle.hadoop.loader.loaderMap.EMPLOYEE_ID.format</name>       
          <value></value>    
      </property>    
       <property>       
          <name>oracle.hadoop.loader.loaderMap.LAST_NAME.field</name>       
          <value>F1</value>    
      </property>    
       <property>       
          <name>oracle.hadoop.loader.loaderMap.LAST_NAME.format</name>       
          <value></value>   
      </property>    
       <property>       
          <name>oracle.hadoop.loader.loaderMap.EMAIL.field</name>       
          <value>F2</value>   
      </property>   
       <property>       
          <name>oracle.hadoop.loader.loaderMap.EMAIL.format</name>       
          <value></value>   
      </property>    
       <property>       
          <name>oracle.hadoop.loader.loaderMap.HIRE_DATE.field</name>       
          <value>F3</value>    
      </property>    
       <property>       
          <name>oracle.hadoop.loader.loaderMap.HIRE_DATE.format</name>       
          <value>MM-dd-yyyy</value>    
      </property>    
       <property>        
           <name>oracle.hadoop.loader.loaderMap.JOB_ID.field</name>       
           <value>F4</value>    
      </property>    
       <property>       
           <name>oracle.hadoop.loader.loaderMap.JOB_ID.format</name>       
           <value></value>    
       </property>
</configuration>

Hive表からロードする際の構成ファイルconf.xml

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<configuration>    
     <property>       
          <name>oracle.hadoop.loader.loaderMap.targetTable</name>          
          <value>HR.EMPLOYEES</value>   
    </property>    
     <property>       
          <name>oracle.hadoop.loader.loaderMap.columnNames</name>       
          <value>EMPLOYEE_ID,LAST_NAME,EMAIL,HIRE_DATE,JOB_ID</value>    
    </property>    
     <property>       
          <name>oracle.hadoop.loader.loaderMap.EMPLOYEE_ID.field</name>       
          <value>EMPLOYEE_ID</value>    
    </property>    
     <property>       
          <name>oracle.hadoop.loader.loaderMap.EMPLOYEE_ID.format</name>       
          <value></value>    
     </property>    
     <property>       
          <name>oracle.hadoop.loader.loaderMap.LAST_NAME.field</name>       
          <value>LAST_NAME</value>    
     </property>    
      <property>       
          <name>oracle.hadoop.loader.loaderMap.LAST_NAME.format</name>       
          <value></value>    
     </property>    
      <property>       
          <name>oracle.hadoop.loader.loaderMap.EMAIL.field</name>       
          <value>EMAIL</value>    
     </property>    
      <property>       
          <name>oracle.hadoop.loader.loaderMap.EMAIL.format</name>       
          <value></value>    
     </property>     
      <property>       
          <name>oracle.hadoop.loader.loaderMap.HIRE_DATE.field</name>       
          <value>HIRE_DATE</value>    
      </property>     
      <property>       
          <name>oracle.hadoop.loader.loaderMap.HIRE_DATE.format</name>       
          <value>MM-dd-yyyy</value>    
      </property>     
       <property>       
          <name>oracle.hadoop.loader.loaderMap.JOB_ID.field</name>       
          <value>JOB_ID</value>    
      </property>    
       <property>      
          <name>oracle.hadoop.loader.loaderMap.JOB_ID.format</name>       
          <value></value>    
      </property>
</configuration>

3.4.7 出力形式の概要

オンライン・データベース・モードでは、データを直接Oracleデータベース表にロードするか、ファイルに保存するかを選択できます。オフライン・データベース・モードでは、出力データの保存先はファイルに制限され、このファイルをターゲット表に個別のプロシージャとしてロードできます。ジョブ構成ファイルに出力形式を指定するには、mapreduce.job.outputformat.classプロパティを使用します。

次の出力形式から選択します。

3.4.7.1 JDBC出力形式

HadoopシステムとOracle Databaseとの間のJDBC接続を利用してデータをロードできます。ローダー・ジョブの出力レコードは、タスクをオンライン・データベース・モードのOraLoaderプロセスの一部としてマップまたはリデュースすると、ターゲット表に直接ロードされます。データをロードするための追加ステップは不要です。

ジョブの実行中は、HadoopクラスタとOracle Databaseシステムとの間のJDBC接続をオープンしている必要があります。

この出力形式を使用するには、mapreduce.job.outputformat.classを次のように設定します

oracle.hadoop.loader.lib.output.JDBCOutputFormat

3.4.7.1.1 JDBCOutputFormatの概要

JDBCOutputFormatでは、標準のJDBCバッチを使用してパフォーマンスと効率を最適化します。バッチの実行中に制約違反などのエラーが発生した場合、JDBCドライバはただちに実行を停止します。つまり、バッチに100行あり、10行目でエラーが発生した場合、9行は挿入され、91行は挿入されません。

JDBCドライバではエラーが発生した行が特定されないため、Oracle Loader for Hadoopでは、バッチ内の各行の挿入ステータスは把握されません。バッチ内のエラーが発生したすべての行に問題があるとみなされ、行はターゲット表に挿入される場合もあれば、挿入されない場合もあります。次のバッチのロードが続けられます。バッチ・エラーの数と問題のある行の数を示すロード・レポートがジョブの最後に生成されます。

この問題に対処する方法の1つは、ターゲット表に対して一意キーを定義することです。たとえば、HR.EMPLOYEES表にEMPLOYEE_IDという名前の主キーがあるとします。この場合、データをHR.EMPLOYEESにロードした後、EMPLOYEE_IDで問合せを行って欠落している従業員IDを検出します。欠落している従業員IDが入力データに見つかったら、ロードに失敗した原因を特定し、再度ロードを試行できます。

3.4.7.1.2 構成プロパティ

バッチ・サイズを制御するには、次のプロパティを設定します。

oracle.hadoop.loader.connection.defaultExecuteBatch

3.4.7.2 Oracle OCIダイレクト・パス出力形式

Oracle Call Interface (OCI)のダイレクト・パス・インタフェースを使用して、データをターゲット表にロードします。オンライン・データベース・モードでは、各リデューサが異なるデータベース・パーティションにロードするため、並列ロードのパフォーマンス向上が可能になります。データをロードするための追加ステップは不要です。

ジョブの実行中は、HadoopクラスタとOracle Databaseシステムとの間のOCI接続をオープンしている必要があります。

この出力形式を使用するには、mapreduce.job.outputformat.classを次のように設定します

oracle.hadoop.loader.lib.output.OCIOutputFormat

3.4.7.2.1 OCIOutputFormatの概要

OCIOutputFormatには、次の制限があります。

  • Linux x86.64プラットフォームでのみ使用できます。

  • MapReduceジョブで1つ以上のリデューサを作成する必要があります。

  • ターゲット表は、パーティション化されている必要があります。

  • Oracle Database 11g (11.2.0.3)では、ターゲット表が、サブパーティション・キーにCHARVARCHAR2NCHARまたはNVARCHAR2列が含まれるコンポジット時間隔パーティション化表の場合、Oracle Bug#13498646を適用します。後続バージョンのOracle Databaseでは、このパッチは必要ありません。

3.4.7.2.2 構成プロパティ

ダイレクト・パス・ストリーム・バッファのサイズを制御するには、次のプロパティを設定します。

oracle.hadoop.loader.output.dirpathBufsize

3.4.7.3 デリミタ付きテキスト出力形式

Hadoopクラスタでデリミタ付きテキスト出力ファイルを作成できます。マップまたはリデュース・タスクは、ジョブ構成ファイルに指定されたフィールド・デリミタと囲み文字を使用して、デリミタ付きテキスト・ファイルを生成します。後で、このデータを個別のプロシージャとしてOracleデータベースにロードできます。「DelimitedTextOutputFormatの概要」を参照してください。

この出力形式では、オンライン・データベース・モードの場合には、Oracle Databaseシステムへのオープン状態の接続で表のメタデータを取得し、オフライン・データベース・モードの場合には、OraloaderMetadataユーティリティによって生成された表のメタデータ・ファイルを使用できます。

この出力形式を使用するには、mapreduce.job.outputformat.classを次のように設定します

oracle.hadoop.loader.lib.output.DelimitedTextOutputFormat

3.4.7.3.1 DelimitedTextOutputFormatの概要

出力タスクによって、デリミタ付きテキスト形式ファイル、1つ以上の対応するSQL*Loader制御ファイルおよび外部表を使用してロードするためのSQLスクリプトが生成されます。

ターゲット表がパーティション化されていない場合、またはoracle.hadoop.loader.loadByPartitionfalseの場合には、DelimitedTextOutputFormatによって次のファイルが生成されます。

  • データ・ファイル: oraloader-taskId-csv-0.dat

  • ジョブ全体のSQL*Loader制御ファイル: oraloader-csv.ctl。

  • デリミタ付きテキスト・ファイルをターゲット表にロードするSQLスクリプト: oraloader-csv.sql

パーティション化された表の場合、複数の出力ファイルが作成されます。各ファイルの名前は次のとおりです。

  • データ・ファイル: oraloader-taskId-csv-partitionId.dat

  • SQL*Loader制御ファイル: oraloader-taskId-csv-partitionId.ctl

  • SQLスクリプト: oraloader-csv.sql

生成されたファイル名のtaskIdはマッパー(リデューサ)識別子を表し、partitionIdはパーティション識別子を表します。

HadoopクラスタがOracle Databaseシステムに接続している場合、Oracle SQL Connector for HDFSを使用してデリミタ付きテキスト・データをOracleデータベースにロードできます。「Oracle SQL Connector for Hadoop Distributed File System」を参照してください。

または、デリミタ付きテキスト・ファイルをデータベース・システムにコピーして、次のいずれかの方法でデータをターゲット表にロードすることもできます。

  • 生成された制御ファイルを使用してSQL*Loaderを実行し、デリミタ付きテキスト・ファイルからデータをロードします。

  • 生成されたSQLスクリプトを使用して、外部表をロードします。

ファイルは${mapreduce.output.fileoutputformat.outputdir}/_olhディレクトリにあります。

3.4.7.3.2 構成プロパティ

出力ファイル内のレコードとフィールドの形式は、次のプロパティによって制御されます。

次の例に、出力タスクで生成されるサンプルSQL*Loader制御ファイルを示します。

例3-2 サンプルSQL*Loader制御ファイル

LOAD DATA CHARACTERSET AL32UTF8
INFILE 'oraloader-csv-1-0.dat'
BADFILE 'oraloader-csv-1-0.bad'
DISCARDFILE 'oraloader-csv-1-0.dsc'
INTO TABLE "SCOTT"."CSV_PART" PARTITION(10) APPEND
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
(
   "ID"      DECIMAL EXTERNAL,
   "NAME"    CHAR,
   "DOB"     DATE 'SYYYY-MM-DD HH24:MI:SS'
)

3.4.7.4 Oracle Data Pump出力形式

Hadoopクラスタでデータ・ポンプ形式ファイルを作成できます。データ・ポンプ・ファイルは、マップまたはリデュース・タスクによって生成されます。後で、このデータを個別のプロシージャとしてOracleデータベースにロードできます。「DataPumpOutputFormatの概要」を参照してください。

この出力形式では、オンライン・データベース・モードの場合には、Oracle Databaseシステムへのオープン状態の接続を使用し、オフライン・データベース・モードの場合には、OraloaderMetadataユーティリティによって生成された表のメタデータ・ファイルを使用できます。

この出力形式を使用するには、mapreduce.job.outputformat.classを次のように設定します

oracle.hadoop.loader.lib.output.DataPumpOutputFormat

3.4.7.4.1 DataPumpOutputFormatの概要

DataPumpOutputFormatは、データ・ファイルを生成し、次の形式でファイル名を付けます。

oraloader-taskId-dp-partitionId.dat

生成されたファイル名のtaskIdはマッパー(リデューサ)識別子を表し、partitionIdはパーティション識別子を表します。

HadoopクラスタがOracle Databaseシステムに接続している場合、Oracle SQL Connector for HDFSを使用してデータ・ポンプ・ファイルをOracleデータベースにロードできます。「Oracle SQL Connector for Hadoop Distributed File System」を参照してください。

または、データ・ポンプ・ファイルをデータベース・システムにコピーし、Oracle Loader for Hadoopによって生成されたSQLスクリプトを使用してロードすることもできます。このスクリプトは次のタスクを実行します。

  1. ORACLE_DATAPUMPアクセス・ドライバを使用する外部表定義を作成します。バイナリ形式のOracle Data Pump出力ファイルは、外部表のLOCATION句にリストされます。

  2. 外部表によって使用されるディレクトリ・オブジェクトを作成します。スクリプトを実行する前に、このコマンドのコメントを解除する必要があります。スクリプトで使用するディレクトリ名を指定するには、ジョブ構成ファイルにoracle.hadoop.loader.extTabDirectoryNameプロパティを設定します。

  3. 外部表からターゲット表に行を挿入します。スクリプトを実行する前に、このコマンドのコメントを解除する必要があります。

SQLスクリプトは${mapreduce.output.fileoutputformat.outputdir}/_olhディレクトリにあります。

関連項目:

  • 外部表の作成と管理の詳細は、『Oracle Database管理者ガイド』

  • ORACLE_DATAPUMPアクセス・ドライバの詳細は、『Oracle Databaseユーティリティ』

3.4.8 ローダー・ジョブの実行

Oracle Loader for Hadoopでジョブを実行するには、hadoopコマンドのOraLoaderユーティリティを使用します。

基本的な構文は次のとおりです。

hadoop jar $OLH_HOME/jlib/oraloader.jar oracle.hadoop.loader.OraLoader \
-conf job_config.xml \
-libjars input_file_format1.jar[,input_file_format2.jar...]

任意の汎用的なhadoopコマンドライン・オプションを指定できます。OraLoaderは、org.apache.hadoop.util.Toolインタフェースを実装し、MapReduceアプリケーションを構築する標準的なHadoopの方法に従います。

次の手順で、oraloader-examples.jarファイルを使用するために、$OLH_HOMEにあるexamples.zipファイルを解凍します。

基本オプション

-conf job_config.xml

ジョブ構成ファイルを識別します。「ジョブ構成ファイルの作成」を参照してください。

-libjars

入力形式としてJARファイルを識別します。

  • サンプル入力形式を使用する場合は、$OLH_HOME/jlib/oraloader-examples.jarを指定します。(InputFormatのサンプル・ソース・コードの説明に従って、使用できるように最初にサンプルを設定する必要があります)。

  • HiveまたはOracle NoSQL Databaseの入力形式を使用する場合は、この項で後述する追加JARファイルを指定する必要があります。

  • カスタム入力形式を使用する場合は、JARを指定します。HADOOP_CLASSPATHにも忘れずにJARを追加してください。

複数のファイル名をカンマで区切り、各ファイル名を明示的にリストします。ワイルドカード文字および空白は使用できません。

Oracle Loader for Hadoopは、MapReduceタスク用に内部構成情報を準備します。また、表のメタデータ情報と従属するJavaライブラリを分散キャッシュに格納して、クラスタ全体でMapReduceタスクに使用できるようにします。

OraLoaderの起動例

次では、組込み入力形式を使用し、ジョブ構成ファイルの名前をMyConf.xmlとしています。

HADOOP_CLASSPATH="$OLH_HOME/jlib/*:$OLH_HOME/examples/oraloader-examples.jar:$HADOOP_CLASSPATH"

hadoop jar $OLH_HOME/jlib/oraloader.jar oracle.hadoop.loader.OraLoader \
-conf MyConf.xml -libjars $OLH_HOME/jlib/oraloader-examples.jar

3.4.8.1 Hive入力形式のJARファイルの指定

HiveToAvroInputFormatを使用する場合は、Hive構成ディレクトリをHADOOP_CLASSPATH環境変数に追加する必要があります。

HADOOP_CLASSPATH="$OLH_HOME/jlib/*:hive_home/lib/*:hive_conf_dir:$HADOOP_CLASSPATH"

次のHive JARファイルを、カンマ区切りリスト形式で、hadoopコマンドの-libjarsオプションに追加する必要もあります。アスタリスク(*)を完全なファイル名に置き換えます。

  • hive-exec-*.jar

  • hive-metastore-*.jar

  • libfb303*.jar

次の例は、Cloudera's Distribution including Apache Hadoop (CDH) 5.8の完全なファイル名を示しています。

# hadoop jar $OLH_HOME/jlib/oraloader.jar oracle.hadoop.loader.OraLoader \ 
-conf MyConf.xml \
-libjars hive-exec-1.1.0-cdh5.8.0.jar, hive-metastore-1.1.0-cdh5.8.0.jar, libfb303-0.9.3.jar  

3.4.8.2 Oracle NoSQL Database入力形式のJARファイルの指定

Oracle NoSQL Database 11gリリース2のKVAvroInputFormatを使用する場合、HADOOP_CLASSPATH$KVHOME/lib/kvstore.jarを含め、hadoopコマンドに-libjarsオプションを含める必要があります。

hadoop jar $OLH_HOME/jlib/oraloader.jar oracle.hadoop.loader.OraLoader \ 
-conf MyConf.xml \
-libjars $KVHOME/lib/kvstore.jar

3.4.8.3 ジョブのレポート作成

Oracle Loader for Hadoopは、個々のタスクからのレポート情報をまとめて${mapreduce.output.fileoutputformat.outputdir}/_olh/oraloader-report.txtファイルを作成します。このレポートには、その他の統計とともに、各マッパーおよびリデューサのタイプとタスク別に分類されたエラーの数が表示されます。

3.4.9 拒否されたレコードの処理

Oracle Loader for Hadoopは、次のような様々な理由で入力レコードを拒否します。

  • マッピング・プロパティのエラー

  • 入力データ内の欠落フィールド

  • 無効な表パーティションにマップされたレコード

  • 不正な書式のレコード(たとえば、日付が日付形式に一致しない場合や、レコードが正規表現パターンに一致しない場合)

3.4.9.1 拒否されたレコードの不正なファイルへの記録

デフォルトでは、Oracle Loader for Hadoopは、拒否されたレコードをHadoopログに記録せず、拒否されたレコードの識別方法のみを記録します。これにより、クラスタ全体に存在するHadoopログにユーザーの機密情報が格納されることを防ぎます。

拒否されたレコードを記録するようにOracle Loader for Hadoopを管理するには、構成プロパティoracle.hadoop.loader.logBadRecordstrueに設定します。Oracle Loader for Hadoopは、ジョブの出力ディレクトリ内にある_olh/ディレクトリの1つ以上の「不正な」ファイルに不正なレコードを記録します。

3.4.9.2 ジョブの拒否制限の設定

一部の問題により、Oracle Loader for Hadoopが入力のすべてのレコードを拒否することがあります。このような問題による時間とリソースの無駄を軽減するため、Oracle Loader for Hadoopは、1000レコードが拒否されると、ジョブを中止します。

拒否レコードの最大許可数を変更するには、構成プロパティoracle.hadoop.loader.rejectLimitを設定します。負の値を設定すると、拒否制限が無効になり、拒否されるレコードの数に関係なくジョブの実行が完了します。

3.4.10 パーティション化表にデータをロードする場合のロード・バランシング

ロード・バランシングの目標は、すべてのリデューサにほぼ同量の処理を割り当てるMapReduceパーティション化スキームを生成することです。

Oracle Loader for Hadoopのサンプリング機能を使用すると、パーティション化されたデータベース表にデータをロードするときにリデューサ間で負荷を分散できます。このサンプリング機能では、データベース・パーティションをリデューサに割り当てる効率的なMapReduceパーティション化スキームが生成されます。

リデューサの実行時間は、通常、処理するレコードの数に比例します。レコードが多いほど、実行時間は長くなります。サンプリング機能が無効の場合、特定のデータベース・パーティションのすべてのレコードが1つのリデューサに送られます。データベース・パーティションによってレコードの数が異なることがあるため、これによってリデューサの負荷は不均等になります。Hadoopジョブの実行時間は、通常、最も遅いリデューサの実行時間によって決まるため、リデューサの負荷が不均等な場合、ジョブ全体のパフォーマンスが低下します。

3.4.10.1 サンプリング機能の使用

サンプリング機能の有効/無効を切り替えるには、構成プロパティoracle.hadoop.loader.sampler.enableSamplingを設定します。サンプリング機能はデフォルトで有効になっています。

3.4.10.2 ロード・バランシングのチューニング

次のジョブ構成プロパティによってロード・バランシング機能の質を制御します。

サンプラは、所定のリデューサ負荷係数を使用してパーティション化スキームの質を評価します。負荷係数は、(assigned_load - ideal_load)/ideal_loadの計算で求められる各リデューサの相対的な過負荷を表します。このメトリックは、リデューサの負荷が、完全に分散されたリデューサの負荷とどの程度違っているかを示します。負荷係数1.0は、完全に分散された負荷(過負荷ではない)を表します。

負荷係数が小さい場合、負荷分散が適切であることを表します。maxLoadFactorのデフォルト0.05は、5%以上の過負荷状態になるリデューサがないことを表します。サンプラでは、loadCIの値で決まる統計的信頼度でこのmaxLoadFactorが保証されます。loadCIのデフォルト値は0.95で、maxLoadFactorを超えるリデューサの負荷係数は5%のみであることを表します。

サンプラの実行時間と負荷分散の質の間にはトレードオフがあります。maxLoadFactorの値を低くしてloadCIの値を高くすると、リデューサの負荷はより均等化されますが、サンプリング時間は長くなります。maxLoadFactor=0.05およびloadCI=0.95というデフォルト値では、負荷分散の質と実行時間の兼合いが適切にとられます。

3.4.10.3 サンプリング動作のチューニング

デフォルトでは、サンプラは、maxLoadFactorloadCIの基準を満たすパーティション化スキームを生成するのに十分なサンプルを収集するまで実行されます。

ただし、サンプリングする最大レコード数を指定するoracle.hadoop.loader.sampler.maxSamplesPctプロパティを設定すると、サンプラの実行時間を制限できます。

3.4.10.4 Oracle Loader for Hadoopがサンプラのパーティション化スキームを使用するのはどのような場合か

Oracle Loader for Hadoopでは、サンプリングが成功の場合にのみ、生成されたパーティション化スキームを使用します。統計的信頼度loadCIで保証される最大リデューサ負荷係数(1+ maxLoadFactor)のパーティション化スキームが生成される場合、サンプリングは成功です。

パーティション・レポートは、様々なマッパーに割り当てられたキーを識別します。このレポートは、サンプラで使用するためのXML形式で保存されます。ユーザーが使用するための情報は含まれません。このレポートには、${mapreduce.output.fileoutputformat.outputdir}/_balancer/orabalancer_report.xmlという名前が付けられます。サンプル化されたジョブ専用に生成されます。このxmlファイルには、マッピング出力を異なるリデューサに割り当てる方法およびサンプリング統計の説明が含まれます。

デフォルト値maxLoadFactorloadCIおよびmaxSamplesPctにより、サンプラは、様々な入力データ分布に対する質の高いパーティション化スキームを正常に生成できます。ただし、制約が厳しすぎる場合や、必要なサンプルの数が、ユーザーが指定した最大数であるmaxSamplesPctを超えている場合などには、サンプラがカスタム・プロパティ値を使用したパーティション化スキームの生成に失敗することがあります。このような場合、Oracle Loader for Hadoopは、問題を特定するログ・メッセージを生成し、データベースのパーティション化スキームを使用してレコードの分割を行い、負荷分散は保証されません。

代替策は、構成プロパティの値を緩和することです。これは、maxSamplesPctを大きくするか、maxLoadFactorまたはloadCI、あるいはその両方を小さくすることによって行えます。

3.4.10.5 メモリーの問題の解決

カスタム入力形式では、メモリーに収まらない入力分割が返されることがあります。このような場合、サンプラは、ローダー・ジョブが発行されるクライアント・ノードでメモリー不足エラーを返します。

この問題の解決策は、次のとおりです。

カスタム入力形式を開発する場合は、「カスタム入力形式」を参照してください。

3.4.10.6 サンプリング機能のプロパティの値が無効な場合

サンプリング機能の構成プロパティが、許容可能な範囲外の値に設定されている場合、例外は返されません。かわりに、サンプラは警告メッセージを出力し、プロパティをデフォルト値に設定して実行を続けます。

3.4.11 Oracleエンジニアド・システム間の通信の最適化

Oracle Loader for Hadoopを使用してデータをOracle Big Data ApplianceからOracle Exadata Database Machineにロードする場合、InfiniBandプライベート・ネットワーク上でSockets Direct Protocol (SDP)を使用するようにシステムを構成することによって、スループットを向上させることができます。この設定は、データのロードのみを目的としてOracle Databaseに接続するための追加接続属性を指定します。

SDPプロトコルを指定するには、次のようにします。

  1. HADOOP_OPTS環境変数にJVMオプションを追加して、JDBC SDPエクスポートを有効にします。

    HADOOP_OPTS="-Doracle.net.SDP=true -Djava.net.preferIPv4Stack=true"
    
  2. 次のようにして、このHadoop構成プロパティを子タスクJVMに設定します。

    -D mapred.child.java.opts="-Doracle.net.SDP=true -Djava.net.preferIPv4Stack=true"
    

    注意:

    このHadoop構成プロパティは、OLHコマンドラインに追加したり、構成ファイルに設定したりできます。

  3. 標準のイーサネット通信を構成します。ジョブ構成ファイルで、次の構文に従ってoracle.hadoop.loader.connection.urlを設定します。

    jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS_LIST=
         (ADDRESS=(PROTOCOL=TCP)(HOST=hostName)(PORT=portNumber)))
         (CONNECT_DATA=(SERVICE_NAME=serviceName)))
    
  4. ExadataでOracleリスナーを、SDPプロトコルをサポートするように構成し、特定のポート・アドレス(1522など)にバインドします。ジョブ構成ファイルで、次の構文に従ってoracle.hadoop.loader.connection.oci_urlの値としてリスナー・アドレスを指定します。

    (DESCRIPTION=(ADDRESS=(PROTOCOL=SDP)
        (HOST=hostName) (PORT=portNumber))
        (CONNECT_DATA=(SERVICE_NAME=serviceName)))
    

    hostNameportNumberおよびserviceNameは、Oracle Exadata Database Machine上のSDPリスナーを識別するための適切な値に置き換えます。

関連項目:

InfiniBandによる通信の構成の詳細は、『Oracle Big Data Applianceソフトウェア・ユーザーズ・ガイド』を参照してください。

3.5 Oracle Loader for Hadoop構成プロパティ・リファレンス

OraLoaderは、構成プロパティの指定にhadoopコマンドの標準的なメソッドを使用します。構成ファイルを指定する場合は-confオプションを使用し、個別のプロパティを指定する場合は-Dオプションを使用します。

この項では、一般にOraLoaderジョブに設定する必要があるOraLoader構成プロパティ、Oracle NoSQL Database構成プロパティ、そしていくつかの汎用的なHadoop MapReduceプロパティについて説明します。

すべてのOraLoaderプロパティを示す構成ファイルは、$OLH_HOME/doc/oraloader-conf.xmlにあります。

関連項目:

ジョブ構成ファイルに関するHadoopのドキュメント

http://wiki.apache.org/hadoop/JobConfFile

MapReduce構成プロパティ

プロパティ 説明

mapreduce.job.name

型: String

デフォルト値: OraLoader

説明: Hadoopのジョブ名。一意の名前を付けることで、Hadoop JobTracker WebインタフェースやCloudera Managerなどのツールを使用してジョブを監視できます。

mapreduce.input.fileinputformat.inputdir

型: String

デフォルト値: 定義されていません。

説明: 入力ディレクトリの名前のカンマ区切りリスト。

mapreduce.job.inputformat.class

型: String

デフォルト値: 定義されていません。

説明: 入力データの形式を識別します。次のいずれかの組込み入力形式またはカスタムInputFormatクラスの名前を入力できます。

  • oracle.hadoop.loader.lib.input.AvroInputFormat

  • oracle.hadoop.loader.lib.input.DelimitedTextInputFormat

  • oracle.hadoop.loader.lib.input.HiveToAvroInputFormat

  • oracle.hadoop.loader.lib.input.RegexInputFormat

  • oracle.kv.hadoop.KVAvroInputFormat

組込み入力形式の詳細は、「入力形式の概要」を参照してください。

mapreduce.output.fileoutputformat.outputdir

型: String

デフォルト値: 定義されていません。

説明: 出力ディレクトリのカンマ区切りリスト。ジョブを実行する前には存在しません。必須。

mapreduce.job.outputformat.class

型: String

デフォルト値: 定義されていません。

説明: 出力タイプを指定します。値は次のとおりです。

  • oracle.hadoop.loader.lib.output.DataPumpOutputFormat

    外部表を使用してターゲット表にロードされるバイナリ形式ファイルにデータ・レコードを書き込みます。

  • oracle.hadoop.loader.lib.output.DelimitedTextOutputFormat

    データ・レコードを、カンマ区切り(CSV)形式ファイルなどのデリミタ付きテキスト形式ファイルに書き込みます。

  • oracle.hadoop.loader.lib.output.JDBCOutputFormat

    JDBC接続を使用して行をターゲット表に挿入します。

  • oracle.hadoop.loader.lib.output.OCIOutputFormat

    Oracle OCIダイレクト・パス・インタフェースを使用して、行をターゲット表に挿入します。

「出力形式の概要」を参照してください。

mapreduce.job.reduces

型: Integer

デフォルト値: 1

説明: Oracle Loader for Hadoopジョブで使用されるリデュース・タスクの数。デフォルト値の1ではパラレル処理がサポートされないため、複数のパラレル・データ・ロードをサポートするよう値を大きくすると、パフォーマンスが向上します。ジョブのリデュース・タスクの数には、十分であるが過剰でない値を選択してください。使用可能なリソースによって決定されるポイントでリデュース・タスクの数を過度に増やすと、向上がみられなくなる一方で、他のジョブのパフォーマンスが低下する可能性もあります。

OraLoaderの構成プロパティ

プロパティ 説明

oracle.hadoop.loader.badRecordFlushInterval

型: Integer

デフォルト値: 500

説明: ログ・ファイルをフラッシュするまでにタスクの試行を記録できる最大レコード数を設定します。この設定により、レコードの拒否が制限(oracle.hadoop.loader.rejectLimit)に達し、ジョブの実行が停止した場合に失われる可能性があるレコード数が制限されます。

フラッシュ間隔を有効にするには、oracle.hadoop.loader.logBadRecordsプロパティをtrueに設定する必要があります。

oracle.hadoop.loader.compressionFactors

型: 小数

デフォルト値: BASIC=5.0,OLTP=5.0,QUERY_LOW=10.0,QUERY_HIGH=10.0,ARCHIVE_LOW=10.0,ARCHIVE_HIGH=10.0

説明: これらの値は、サンプリングが有効でターゲット表が圧縮されているときにOracle Loader for Hadoopによって使用されます。これらは、ターゲット表の圧縮係数です。最高のパフォーマンスを得るには、このプロパティの値がターゲット表の圧縮係数と一致している必要があります。値は名前=値のペアのカンマ区切りリストです。名前は次のキーワードのいずれかである必要があります。

ARCHIVE_HIGH

ARCHIVE_LOW

BASIC

OLTP

QUERY_HIGH

QUERY_LOW

oracle.hadoop.loader.connection.defaultExecuteBatch

型: Integer

デフォルト値: 100

説明: データベースへのトリップごとに挿入されるレコード数。JDBCOutputFormatおよびOCIOutputFormatにのみ適用されます。

1以上の値を指定します。最大値の制限はありませんが、パフォーマンスはあまり向上せずにメモリー・フットプリントが大きくなるため、非常に大きいバッチ・サイズを使用することは推奨されません。

値が1未満の場合は、デフォルト値が設定されます。

oracle.hadoop.loader.connection.oci_url

型: String

デフォルト値: oracle.hadoop.loader.connection.urlの値

説明: OCIOutputFormatで使用されるデータベース接続文字列。このプロパティを指定することによって、JDBC接続URLとは異なる接続パラメータを使用してOCIクライアントからデータベースに接続できます。

次の例では、OCI接続にソケット・ダイレクト・プロトコル(SDP)を指定しています。

(DESCRIPTION=(ADDRESS_LIST=

(ADDRESS=(PROTOCOL=SDP)(HOST=myhost)(PORT=1521)))

(CONNECT_DATA=(SERVICE_NAME=my_db_service_name)))

この接続文字列に接頭辞"jdbc:oracle:thin:@"は不要です。最初のアット記号(@)までのすべての文字が削除されます。

oracle.hadoop.loader.connection.password

型: String

デフォルト値: 定義されていません。

説明: 接続するユーザーのパスワード。パスワードの保存にはクリア・テキストを使用しないことをお薦めします。かわりにOracle Walletを使用してください。

oracle.hadoop.loader.connection.sessionTimeZone

型: String

デフォルト値: LOCAL

説明: データベース接続のセッション・タイムゾーンを変更します。有効な値は、次のとおりです。

  • [+|-]hh:mm: 協定世界時(UTC)との差分を表す時間数と分数(例: 東部標準時の場合は-5:00)

  • LOCAL: JVMのデフォルト・タイムゾーン

  • time_zone_region: 有効なJVMタイムゾーン・リージョン(東部標準時を表すESTやAmerica/New_Yorkなど)

このプロパティは、TIMESTAMP WITH TIME ZONEおよびTIMESTAMP WITH LOCAL TIME ZONEのデータベース列タイプにロードされる入力データに使用されるデフォルト・タイムゾーンも決定します。

oracle.hadoop.loader.connection.cluster.tns_admin

型: String

デフォルト値: 定義されていません。

説明: TNS adminの場所がクライアント側と異なる場合の、クラスタ・ノード上のTNS adminの場所。

デフォルトでは、クライアント側のTNS adminの場所は、クラスタ・ノード上と同じくoracle.hadoop.loader.connection.tns_adminによって指定します。

oracle.hadoop.loader.connection.tns_adminが指定されていない場合、このプロパティの指定は無効です。

oracle.hadoop.loader.connection.directory

型: String

デフォルト値: 定義されていません。

説明: Hadoopクラスタの各ノードのディレクトリへのファイル・パス。

oracle.hadoop.loader.connection.tns_admin

型: String

デフォルト値: 定義されていません。

説明: Hadoopクラスタの各ノードにある、sqlnet.oratnsnames.oraなどのSQL*Net構成ファイルが含まれるディレクトリへのファイル・パス。データベース接続文字列でTNSエントリ名を使用できるようにこのプロパティを設定します。

Oracle Walletを外部パスワード・ストアとして使用する場合(推奨)、このプロパティを設定する必要があります。「oracle.hadoop.loader.connection.wallet_location」を参照してください。

oracle.hadoop.loader.connection.tnsEntryName

型: String

デフォルト値: 定義されていません。

説明: tnsnames.oraファイルに定義されたTNSエントリ名。このプロパティは、oracle.hadoop.loader.connection.tns_adminとともに使用します。

oracle.hadoop.loader.connection.url

型: String

デフォルト値: 定義されていません。

説明: データベース接続のURL。このプロパティは、他のすべての接続プロパティより優先されます。

Oracle Walletが外部パスワード・ストアとして構成されている場合(推奨)、プロパティ値は、ドライバ接頭辞jdbc:oracle:thin:@で始まる必要があり、データベース接続文字列は、ウォレットに格納されている資格証明と完全に一致する必要があります。「oracle.hadoop.loader.connection.wallet_location」を参照してください。

次の例に、接続URLの有効な値を示します。

  • Oracle Net形式:

    jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS_LIST=
             (ADDRESS=(PROTOCOL=TCP)(HOST=myhost)(PORT=1521)))
             (CONNECT_DATA=(SERVICE_NAME=example_service_name)))
  • TNSエントリ形式:

    jdbc:oracle:thin:@myTNSEntryName
    
  • Thinスタイル:

    jdbc:oracle:thin:@//myhost:1521/my_db_service_name

oracle.hadoop.loader.connection.user

型: String

デフォルト値: 定義されていません。

説明: データベース・ユーザー名。このプロパティではoracle.hadoop.loader.connection.passwordも設定する必要があります。ただし、パスワードの格納にはOracleウォレットを使用することをお薦めします。クリア・テキスト形式では格納しないでください。

オンライン・データベース・モードを使用する場合は、このプロパティまたはoracle.hadoop.loader.connection.wallet_locationを設定する必要があります。

oracle.hadoop.loader.connection.wallet_location

型: String

デフォルト値: 定義されていません。

説明: Hadoopクラスタの各ノードにある、接続資格証明が格納されているOracle Walletディレクトリへのファイル・パス。

Oracle Walletを使用する場合、次のプロパティも設定する必要があります。

oracle.hadoop.loader.connection.cluster.wallet_location

型: String

デフォルト値: 定義されていません。

説明: ウォレットの場所がクライアント側と異なる場合の、クラスタ・ノード上のウォレットの場所。

デフォルトでは、クライアント側のウォレットの場所は、クラスタ・ノード上のウォレットの場所と同じくoracle.hadoop.loader.connection.wallet_locationによって指定します。

oracle.hadoop.loader.connection.wallet_locationが指定されていない場合、このプロパティの指定は無効です。

oracle.hadoop.loader.defaultDateFormat

型: String

デフォルト値: yyyy-MM-dd HH:mm:ss

説明: java.text.SimpleDateformatパターンとデフォルトのロケールを使用して、入力フィールドをDATE列に解析します。入力ファイルのフィールドごとに異なるパターンが必要な場合は、手動マッピング・プロパティを使用します。「手動マッピング」を参照してください。

oracle.hadoop.loader.enableSorting

型: Boolean

デフォルト値: true

説明: 各リデューサ・グループ内の出力レコードをソートするかどうかを制御します。ターゲット表のソート・キーとなる列を指定するには、oracle.hadoop.loader.sortKeyプロパティを使用します。このプロパティを指定しなければ、レコードは主キーでソートされます。

oracle.hadoop.loader.enforceClasspath

型: Boolean

デフォルト値: true

一致しないバージョンのJARがクラスパスに追加されないようにするために、Oracle Loader for Hadoopでは、内部クラスが${oracle.hadoop.loader.olh_home}/jlib/jarsからロードされることが確認されます。

このチェックを無効にするには、プロパティをfalseに設定します。

oracle.hadoop.loader.extTabDirectoryName

型: String

デフォルト値: OLH_EXTTAB_DIR

説明: 外部表のLOCATIONデータ・ファイルのデータベース・ディレクトリ・オブジェクトの名前。Oracle Loader for Hadoopがこのディレクトリにデータ・ファイルをコピーするのではなく、外部表のDDLを格納しているSQLファイルがファイル出力形式によって生成され、このファイルにディレクトリ名が記録されます。

このプロパティはDelimitedTextOutputFormatおよびDataPumpOutputFormatのみに適用されます。

oracle.hadoop.loader.input.fieldNames

型: String

デフォルト値: F0,F1,F2,...

説明: 入力フィールドの名前のカンマ区切りリスト。

組込み入力形式の場合は、目的のフィールドだけではなく、データ内のすべてのフィールドの名前を指定します。入力行のフィールド数がこのプロパティに指定されたフィールド名の数より多い場合、余分なフィールドは破棄されます。行のフィールド数がこのプロパティに指定されたフィールド名の数より少ない場合、余分なフィールドにはnullが設定されます。選択したフィールドのみをロードする場合は、「ターゲット表列への入力フィールドのマッピング」を参照してください。

名前は、レコードのAvroスキーマの作成に使用されるため、有効なJSON名文字列である必要があります。

このプロパティは、DelimitedTextInputFormatおよびRegexInputFormatにのみ適用されます。

oracle.hadoop.loader.input.fieldTerminator

型: String

デフォルト値: , (カンマ)

説明: DelimitedTextInputFormatの入力フィールドの終了を示す文字。値には、1文字または\uHHHH (HHHHは文字のUTF-16エンコーディング)を指定できます。

oracle.hadoop.loader.input.hive.databaseName

型: String

デフォルト値: 定義されていません。

説明: 入力表が格納されているHiveデータベースの名前

oracle.hadoop.loader.input.hive.partitionFilter

注意:

このプロパティは非推奨です。かわりにoracle.hadoop.loader.input.hive.rowFilterを使用してください。

型: String

デフォルト値: 定義されていません。

説明: HiveToAvroInputFormatのソースHive表パーティションをフィルタするのに使用される有効なHiveQL式。式にはパーティション列のみを含む必要があります。他の列を含めてもエラーは発生しませんが、意図しない結果となる可能性があります。他の列は含めないことをお薦めします。値が設定されていない場合、Oracle Loader for HadoopはソースHive表のすべてのパーティションからデータをロードします。表がパーティション化されていない場合、このプロパティは無視されます。これは、oracle.hadoop.loader.input.hive.rowFilterが設定されている場合も無視されます。

式は次の制限に従う必要があります。

  • パーティション内にある個々のレコードではなく、パーティションを選択します。

  • 意図しない結果をもたらす可能性があるため、表をパーティション化するのに使用されない列は含めません。

  • 副問合せは含めません。

  • ユーザー定義関数(UDF)は含めません(サポートされていません)。組込み関数はサポートされています。

  • すべての変数の拡張をHadoopレベルで解決します。Hive変数ネームスペース(env:system:hiveconf:およびhivevar:など)に意味はありません。Oracle Loader for Hadoopはhive.variable.substitutefalseに設定し、これによりHive変数の拡張は無効になります。次の拡張方法の中から選択できます。

    すべての変数を拡張してから、このプロパティを設定します。Hive CLIでは、次のコマンドを使用します。

    CREATE VIEW view_name AS SELECT * from database.table_name WHERE expression;
    DESCRIBE FORMATTED view_name;

    「View Original Text」フィールドには、すべての変数が拡張された問合せが含まれます。whereから始まるwhere句をコピーします。

    Oracle Loader for Hadoopにあるすべての変数を定義します。Oracle Loader for Hadoopを実行するhadoopコマンドでは、汎用オプション(-Dおよび-conf)を使用します。

Hive CLIを使用して式をテストし、所定の結果が返されることを確認できます。

次の例では、このコマンドでソース表が定義されていることを前提としています。

CREATE TABLE t(c string)
   PARTITIONED BY (p1 string, p2 int, p3 boolean, p4 string, p5 timestamp);

例1: ネストされた式

p1 like 'abc%' or (p5 >= '2010-06-20' and p5 <= '2010-07-03')

例2: 組込み関数

year(p5) = 2014

例3: 悪い使用例: 表のパーティション化に使用されていない列

この例では、cを使用することで、表のパーティション化に使用されていない列は不要で、予期しない結果を引き起こす可能性があることを示します。

次の例はp2 > 35と同じ結果になります。

p2 > 35 and c like 'abc%'

次の例は、すべてのパーティションをロードします。すべてのパーティションはc like 'abc%を含む可能性があるため、パーティションはフィルタで除外されます。

p2 > 35 or c like 'abc%'

oracle.hadoop.loader.input.hive.rowFilter

型: String

デフォルト値: 定義されていません。

説明: HiveToAvroInputFormatのソースHive表の行をフィルタするために使用される有効なHiveQL式。この値が設定されていない場合(デフォルト)、Oracle Loader for Hadoopはoracle.hadoop.loader.input.hive.partitionFilterの値の使用を試みます(表がパーティション化されている場合)。それ以外の場合は、Oracle Loader for HadoopはソースHive表全体をロードします。

式は次の制限に従う必要があります。

  • 副問合せは含めません。

  • ユーザー定義関数(UDF)は含めません(サポートされていません)。組込み関数はサポートされています。

  • すべての変数の拡張をHadoopレベルで解決します。Hive変数ネームスペース(env:、system:、hiveconf:およびhivevar:など)に意味はありません。Oracle Loader for Hadoopはhive.variable.substituteをfalseに設定し、これによりHive変数の拡張は無効になります。次の拡張方法の中から選択できます。

    • すべての変数を拡張してから、このプロパティを設定します。Hive CLIでは、次のコマンドを使用します。

      CREATE VIEW view_name AS SELECT * from database.table_name WHERE expression;
      DESCRIBE FORMATTED view_name;

      「View Original Text」フィールドには、すべての変数が拡張された問合せが含まれます。WHERE句にある式をコピーします。(WHEREキーワード自体は含めないでください。)

    • Oracle Loader for Hadoopですべての変数を定義します。Oracle Loader for Hadoopを実行するためのHadoopコマンドで、汎用オプション(-Dおよび-conf)を使用します。

いずれの場合も、Hive CLIを使用して式をテストし、期待される結果が返されることを確認できます。次の例では、このコマンドでソース表が定義されていることを前提としています。

CREATE TABLE t(c string)
   PARTITIONED BY (p1 string, p2 int, p3 boolean, p4 string, p5 timestamp);

例#1: ネストされた式

c like 'abc%' and (p5 <= '2010-06-20' and p5 <= '2010-07-03')

例 #2: 組込み関数

year(p5) = 2013)

Oracleでは、ネイティブHive表(ストレージ・ハンドラによって管理されない表)から行のサブセットをインポートするときにはhive.optimize.index.filterをオンにすることをお薦めします。これはORCおよびPARQUETなどの入力形式に役立つと知られていますが、いくつかの注意点があります。

  • このプロパティは、-Dを使用して設定する必要があります(-confを使用しても機能しません)。または、このプロパティをhive-site.xmlで設定することもできます。

  • これは、Hive 0.12のORC表の場合に機能します。

oracle.hadoop.loader.input.hive.tableName

型: String

デフォルト値: 定義されていません。

説明: 入力データが格納されているHive表の名前。

oracle.hadoop.loader.input.initialFieldEncloser

型: String

デフォルト値: 定義されていません。

説明: フィールドの開始を示す文字。値には、1文字または\uHHHH (HHHHは文字のUTF-16エンコーディング)を指定できます。デフォルト設定(囲み文字なし)に戻すには、長さが0の値を入力します。フィールドの囲み文字には、入力形式に定義された終端文字および空白文字とは異なる文字を使用する必要があります。

このプロパティが設定されている場合、パーサーは、各フィールドを囲まれていないトークン(値)として読み取る前にまず、囲まれたトークンとして読み取ります。フィールド囲み文字が設定されていない場合、パーサーは各フィールドを囲まれていないトークンとして読み取ります。

このプロパティを設定し、oracle.hadoop.loader.input.trailingFieldEncloserを設定していない場合は、両方のプロパティに同じ値が使用されます。

oracle.hadoop.loader.input.regexCaseInsensitive

型: Boolean

デフォルト値: false

説明: パターンの照合時に大文字と小文字を区別するかどうかを制御します。trueに設定すると、大文字と小文字の違いは無視され、"string"は"String"、"STRING"、"string"、"StRiNg"などと一致します。デフォルトでは、"string"は"string"のみと一致します。

このプロパティはorg.apache.hadoop.hive.contrib.serde2.RegexSerDeinput.regex.case.insensitiveプロパティと同じです。

oracle.hadoop.loader.input.regexPattern

型: String

デフォルト値: 定義されていません。

説明: 正規表現のパターン文字列。

正規表現はテキスト行全体が一致する必要があります。たとえば、入力行"a,b,c,"の正しい正規表現パターンは"([^,]*),([^,]*),([^,]*),"です。しかし、"([^,]*),"は無効です。その理由は、この表現は入力テキストの行に反復して適用されていないためです。

RegexInputFormatでは、正規表現の一致による取得グループをフィールドとして使用します。特殊なグループのゼロは、入力行全体を表すため無視されます。

このプロパティはorg.apache.hadoop.hive.contrib.serde2.RegexSerDeinput.regexプロパティと同じです。

関連項目:

正規表現と取得グループの詳細は、次のサイトにあるJava Platform Standard Edition 6 API仕様java.util.regexのエントリを参照してください。

http://docs.oracle.com/javase/6/docs/api/java/util/regex/Pattern.html

oracle.hadoop.loader.input.trailingFieldEncloser

型: String

デフォルト値: oracle.hadoop.loader.input.initialFieldEncloserの値

説明: フィールドの終了を示す文字を表します。値には、1文字または\uHHHH (HHHHは文字のUTF-16エンコーディング)を指定できます。終了囲み文字がない場合は、長さが0の値を入力します。

フィールドの囲み文字には、入力形式に定義された終端文字および空白文字とは異なる文字を使用する必要があります。

終了フィールド囲み文字が入力フィールドに組み込まれている場合、リテラル・テキストとして解析されるようにするには、二重にする必要があります。たとえば、'(1つの単一引用符)をロードするには、入力フィールドに''(2つの単一引用符)を指定する必要があります。

このプロパティを設定する場合、oracle.hadoop.loader.input.initialFieldEncloserも設定する必要があります。

oracle.hadoop.loader.loadByPartition

型: Boolean

デフォルト値: true

説明: パーティションを認識するロードを指定します。Oracle Loader for Hadoopは、Hadoopクラスタ上のすべての出力形式の出力をパーティション別に整理します。このタスクはデータベース・システムのリソースには影響しません。

DelimitedTextOutputFormatおよびDataPumpOutputFormatでは複数のファイルが生成され、各ファイルに1つのパーティションのレコードが格納されます。DelimitedTextOutputFormatでは、このプロパティによって、SQL*Loader用に生成された制御ファイルにPARTITIONキーワードを含めるかどうかも制御されます。

OCIOutputFormatにはパーティション化表が必要です。このプロパティをfalseに設定すると、OCIOutputFormatが有効になります。その他の出力形式では、loadByPartitionfalseに設定すると、Oracle Loader for Hadoopはパーティション化表がパーティション化されていない表と同様に処理されます。

oracle.hadoop.loader.loaderMap.columnNames

型: String

デフォルト値: 定義されていません。

説明: ターゲット表の列名を任意の順序で示したカンマ区切りリスト。名前は引用符で囲むか囲まないかのいずれかです。引用符で囲む名前には二重引用符(")を最初と最後に付けることで、入力したとおりに使用されます。引用符で囲まれていない名前は大文字に変換されます。

このプロパティは、oracle.hadoop.loader.loaderMap.targetTableを設定しないと無視されます。オプションで、oracle.hadoop.loader.loaderMap.column_name.fieldおよびoracle.hadoop.loader.loaderMap.column_name.formatを設定できます。

oracle.hadoop.loader.loaderMap.column_name.field

型: String

デフォルト値: 正規化された列名

説明: Avroレコードを含むフィールドの名前で、このプロパティ名で識別される列にマップされます。列名は引用符で囲むか囲まないかのいずれかです。引用符で囲む名前には二重引用符(")を最初と最後に付けることで、入力したとおりに使用されます。引用符で囲まれていない名前は大文字に変換されます。オプション。

このプロパティは、oracle.hadoop.loader.loaderMap.columnNamesを設定しないと無視されます。

oracle.hadoop.loader.loaderMap.column_name.format

型: String

デフォルト値: 定義されていません。

説明: このプロパティ名で識別される列にロードするデータのデータ形式を指定します。日付形式にはjava.text.SimpleDateformatパターンを、テキストには正規表現パターンを使用します。オプション。

このプロパティは、oracle.hadoop.loader.loaderMap.columnNamesを設定しないと無視されます。

oracle.hadoop.loader.loaderMap.targetTable

型: String

デフォルト値: 定義されていません。

説明: ロード先の表のスキーマで修飾された名前。このプロパティは、oracle.hadoop.loader.loaderMapFileよりも優先されます。

列のサブセットをロードするには、oracle.hadoop.loader.loaderMap.columnNamesプロパティを設定します。columnNamesに関しては、オプションで、oracle.hadoop.loader.loaderMap.column_name.fieldを設定して列にマップするフィールドの名前を指定したり、oracle.hadoop.loader.loaderMap.column_name.formatを設定してそれらのフィールドのデータの形式を指定できます。表のすべての列をロードし、入力フィールド名がデータベース列名と一致している場合、columnNamesを設定する必要はありません。

oracle.hadoop.loader.loaderMapFile

ローダー・マップは、リリース2.3以降で非推奨になりました。ローダー・マップ・ファイルは、oracle.hadoop.loader.loaderMap.*構成プロパティに置き換えられています。「手動マッピング」を参照してください。

oracle.hadoop.loader.log4j.propertyPrefix

型: String

デフォルト値: log4j.logger.oracle.hadoop.loader

説明: 構成ファイルからロードされたApache log4jプロパティで使用する接頭辞を識別します。

Oracle Loader for Hadoopでlog4jのプロパティを指定するには、hadoopコマンドに-confオプションおよび-Dオプションを使用します。次に例を示します。

-D log4j.logger.oracle.hadoop.loader.OraLoader=DEBUG
-D log4j.logger.oracle.hadoop.loader.metadata=INFO

この接頭辞で始まるすべての構成プロパティがlog4jにロードされます。これらのプロパティは、log4j${log4j.configuration}からロードされたものと同じプロパティの設定をオーバーライドします。このオーバーライドは、Oracle Loader for Hadoopのジョブ・ドライバおよびそのマップとリデュースのタスクに適用されます。

構成プロパティはRAW値とともにlog4jにコピーされます。変数の拡張はすべてlog4jに対して実行されます。拡張に使用する構成変数もこの接頭辞で始まる必要があります。

oracle.hadoop.loader.logBadRecords

型: Boolean

デフォルト値: false

説明: Oracle Loader for Hadoopが不正なレコードをファイルにログ記録するかどうかを制御します。

このプロパティは、入力形式とマッパーで拒否されるレコードのみに適用されます。出力形式またはサンプリング機能で発生したエラーには適用されません。

oracle.hadoop.loader.logRetentionPolicy

型: String

デフォルト値: ALWAYS

説明: どのような場合にジョブの最後にOracle Loader for Hadoopログを生成/保持する必要があるかを指定します。有効な値は、次のとおりです。
  • ALWAYS – すべてのジョブの最後にログが生成および保持されます。

  • NEVER – ログは保持されません。

  • ON_ERROR – エラーが特定されないかぎり、ログは破棄されます。

 次の状況は、logRetentionPolicyにおいてはエラーとみなされます。
  • ゼロ以外の終了コード。

  • 入力レコードの解析エラー(oracle.hadoop.loader.rejectLimitおよびoracle.hadoop.loader.logBadRecordsを参照)。

  • 拒否された行(OCIOutputFormatまたはJDBCOutputFormatに対して)。

 次のファイルがこのプロパティの対象です。

  • ${mapreduce.output.fileoutputformat.outputdir}/_olh/*

     *.ctlおよび*.sqlファイルを除きます。

  • ${mapreduce.output.fileoutputformat.outputdir}/_balancer/

oracle.hadoop.loader.olh_home

型: String

デフォルト値: OLH_HOME環境変数の値

説明: OraLoaderジョブを開始するノード上のOracle Loader for Hadoopのホーム・ディレクトリのパス。このパスは、必要なライブラリの場所を示します。

oracle.hadoop.loader.olhcachePath

型: String

デフォルト値: ${mapreduce.output.fileoutputformat.outputdir}/../olhcache

説明: Oracle Loader for HadoopがMapReduceの分散キャッシュにロードするファイルを作成できるHDFSディレクトリのフル・パスを識別します。

この分散キャッシュは、大規模なアプリケーション固有ファイルをキャッシュし、クラスタ内のノード間に効率的に分散する機能です。

関連項目:

次のサイトにあるJavaドキュメントのorg.apache.hadoop.filecache.DistributedCacheの説明

http://hadoop.apache.org/

oracle.hadoop.loader.output.degreeOfParallelism

型: String

デフォルト値: 定義されていません。

説明: 設定されている場合、このプロパティの値は、次のいずれかを制御します。

  • リデュース・タスクの数(Oracle Loader for Hadoopによってマップリデュース・ジョブがトリガーされる場合)、または

  • マップ・タスクの数(Oracle Loader for Hadoopによってマップのみのジョブがトリガーされる場合)。

このプロパティが設定されていない場合は、${mapreduce.job.reduces}の値がリデュース・タスクの数に使用されます。

  • このジョブに対して${mapreduce.job.reduces}の値が明示的に設定されている場合(-D-confを介して、またはプログラムで設定されている)、その値がそのまま使用されます。

  • このジョブに対して${mapreduce.job.reduces}の値が明示的に設定されていない場合(例: *-{site|default}.xml構成ファイルのいずれかで設定されている)、その値はクラスタ全体の設定とみなされ、最大値は64に制限されます。oracle.hadoop.loader.output.degreeOfParallelismまたはmapreduce.job.reducesを明示的に設定すると、これを回避できます。

このプロパティによって、OCIOutputFormatJDBCOutputFormatで作成されたデータベース接続の数を制限するための統一された方法が提供されます。ただし、デバッグ・シナリオを容易にするために、このプロパティは、すべての出力形式に対して強制されます。たとえば、特定のリデュース・タスクによって処理されているデータを表示するには、OCIOutputFormatDelimitedTextOutputFormatで置き換えます。

oracle.hadoop.loader.output.dirpathBufsize

型: Integer

デフォルト値: 131072 (128 KB)

説明: OCIOutputFormatのダイレクト・パス・ストリーム・バッファのサイズをバイト単位で設定します。値は8KBの倍数に切り上げられます。

oracle.hadoop.loader.output.escapeEnclosers

型: Boolean

デフォルト値: false

説明: 埋込みの終了囲み文字をリテラル・テキストとして処理するかどうか(つまり、エスケープするかどうか)を制御します。このプロパティをtrueに設定すると、フィールドにデータ値の一部として終了囲み文字を含めることができます。「oracle.hadoop.loader.output.trailingFieldEncloser」を参照してください。

oracle.hadoop.loader.output.fieldTerminator

型: String

デフォルト値: , (カンマ)

説明: DelimitedTextInputFormatの出力フィールドの終了を示す文字。値には、1文字または\uHHHH (HHHHは文字のUTF-16エンコーディング)を指定できます。

oracle.hadoop.loader.output.granuleSize

型: Integer

デフォルト値: 10240000

説明: 生成されたデータ・ポンプ・ファイルのグラニュル・サイズ(バイト)。

グラニュルは、ORACLE_DATAPUMPアクセス・ドライバを使用してファイルをロードする場合の並列処理(PQスレーブ)の作業負荷を決定します。

関連項目:

ORACLE_DATAPUMPアクセス・ドライバの詳細は、『Oracle Databaseユーティリティ』を参照してください。

oracle.hadoop.loader.output.initialFieldEncloser

型: String

デフォルト値: 定義されていません。

説明: 出力で生成される、フィールドの開始を示す文字。値には、1文字または\uHHHH (HHHHは文字のUTF-16エンコーディング)を指定する必要があります。長さが0の値は、出力で囲み文字が生成されないことを表します(デフォルト値)。

フィールドにoracle.hadoop.loader.output.fieldTerminatorの値を含める場合は、このプロパティを使用します。フィールドにoracle.hadoop.loader.output.trailingFieldEncloserの値も含めることができるようにするには、oracle.hadoop.loader.output.escapeEncloserstrueに設定します。

このプロパティを設定する場合、oracle.hadoop.loader.output.trailingFieldEncloserも設定する必要があります。

oracle.hadoop.loader.output.trailingFieldEncloser

型: String

デフォルト値: oracle.hadoop.loader.output.initialFieldEncloserの値

説明: 出力で生成される、フィールドの終了を示す文字。値には、1文字または\uHHHH (HHHHは文字のUTF-16エンコーディング)を指定する必要があります。ゼロ長値は囲み文字がないことを表します(デフォルト値)。

フィールドにoracle.hadoop.loader.output.fieldTerminatorの値を含める場合は、このプロパティを使用します。フィールドにoracle.hadoop.loader.output.trailingFieldEncloserの値も含めることができるようにするには、oracle.hadoop.loader.output.escapeEncloserstrueに設定します。

このプロパティを設定する場合、oracle.hadoop.loader.output.initialFieldEncloserも設定する必要があります。

oracle.hadoop.loader.rejectLimit

型: Integer

デフォルト値: 1000

説明: ジョブの実行が停止するまでに拒否またはスキップできるレコードの最大数。負の値を設定すると、拒否制限が無効になり、ジョブの実行が完了します。

mapreduce.map.speculativetrueの場合(デフォルト)、拒否されるレコードの数が一時的に増加して、ジョブが未完了の状態で停止することがあります。

入力形式のエラーは、修復不可能でマップ・タスクが中止になるため、拒否制限に反映されません。サンプリング機能またはオンライン出力形式で発生したエラーも拒否制限に反映されません。

oracle.hadoop.loader.sampler.enableSampling

型: Boolean

デフォルト値: true

説明: サンプリング機能が有効かどうかを制御します。サンプリングを無効にするには、このプロパティをfalseに設定します。

enableSamplingプロパティがtrueに設定されている場合でも、サンプリングが不要な場合、または適切なサンプルを作成できないとローダーが判断した場合、ローダーによってサンプリングが自動的に無効になります。たとえば、表がパーティション化されていない場合、リデューサ・タスクの数が2未満の場合、または入力データが少なすぎて適切なロード・バランシングの計算ができない場合、サンプリングは無効になります。このような場合、ローダーは情報メッセージを返します。

oracle.hadoop.loader.sampler.hintMaxSplitSize

型: Integer

デフォルト値: 1048576 (1 MB)

説明: サンプリング・プロセスにHadoopのmapred.max.split.sizeプロパティを設定します。ジョブ構成のmapred.max.split.sizeの値は変わりません。1未満の値は無視されます。

一部の入力形式(FileInputFormatなど)では、getSplitsによって返される分割の数を判断するヒントとしてこのプロパティを使用します。値が小さいほど、ランダムにサンプリングされるデータ・チャンクが多いことを意味し、サンプリング性能が高くなります。

データセットのデータ量が数十TB単位に上る場合や、入力形式のgetSplitsメソッドからメモリー不足エラーが返される場合には、この値を増やします。

分割サイズが大きいほど、I/Oパフォーマンスは高くなりますが、サンプリング性能は必ずしも高くなりません。この値を、適切なサンプリング性能を得られるような小さい値(ただし、小さすぎない値)に設定します。極度に小さい値を設定すると、I/Oパフォーマンスが非効率になり、返される分割数が多すぎてgetSplitsでメモリー不足が発生する可能性があります。

org.apache.hadoop.mapreduce.lib.input.FileInputFormatメソッドでは、このプロパティの値に関係なく、常に最小分割サイズの設定以上の大きさの分割が返されます。

oracle.hadoop.loader.sampler.hintNumMapTasks

型: Integer

デフォルト値: 100

説明: サンプリング・プロセスにHadoopのmapred.map.tasks構成プロパティを設定します。ジョブ構成のmapred.map.tasksの値は変わりません。1未満の値は無視されます。

一部の入力形式(DBInputFormatなど)では、getSplitsメソッドによって返される分割の数を判断するヒントとしてこのプロパティを使用します。値が高いほど、ランダムにサンプリングされるデータ・チャンクが多いことを意味し、サンプリング性能が高くなります。

データセットに対して、この値を100万行より大きい値に増やします。ただし、極度に大きい値を設定すると、返される分割数が多すぎてgetSplitsでメモリー不足が発生する可能性があります。

oracle.hadoop.loader.sampler.loadCI

型: 小数

デフォルト値: 0.95

説明: リデューサの最大負荷係数に対する統計的信頼性インジケータ。

このプロパティは0.5以上1未満の値(0.5 <= < 1)を受け入れます。値が0.5未満の場合、プロパティはデフォルト値にリセットされます。一般的な値は0.900.95および0.99です。

「oracle.hadoop.loader.sampler.maxLoadFactor」を参照してください。

oracle.hadoop.loader.sampler.maxHeapBytes

型: Integer

デフォルト値: -1

説明: サンプラが使用可能なメモリーの最大容量をバイト単位で指定します。

次のいずれかの条件が真になった場合、サンプリングは中止されます。

  • サンプラがロード・バランシングに必要な最低数のサンプルを収集した。

  • サンプリングされたデータの割合(パーセント)がoracle.hadoop.loader.sampler.maxSamplesPctの値を超えている。

  • サンプリングされたバイト数がoracle.hadoop.loader.sampler.maxHeapBytesの値を超えている。プロパティに負の値が設定されている場合、この条件は適用されません。

oracle.hadoop.loader.sampler.maxLoadFactor

型: Float

デフォルト値: 0.05 (5%)

説明: リデューサに対する最大許容負荷係数。値が0.05の場合、リデューサは最適な負荷より最大5%多くのデータを割当て可能であることを表します。

このプロパティは0より大きい値を受け入れます。値が0以下の場合、プロパティはデフォルト値にリセットされます。一般的な値は0.05および0.1です。

負荷が完全に分散された状態では、各リデューサに均等な作業量(負荷)が割り当てられています。負荷係数は、(assigned_load - ideal_load)/ideal_loadの計算で求められる各リデューサの相対的な過負荷を表します。ロード・バランシングが成功した場合、ジョブは指定した信頼度の最大負荷係数の範囲内で実行されます。

「oracle.hadoop.loader.sampler.loadCI」を参照してください。

oracle.hadoop.loader.sampler.maxSamplesPct

型: Float

デフォルト値: 0.01 (1%)

説明: 最大サンプル・サイズ(入力データ内のレコード数の割合)を設定します。値0.05は、サンプラがサンプリングするのはレコードの総数の5%以下であることを示します。

このプロパティは0~1の範囲の値(0~100%)を受け入れます。負の値を設定すると、このプロパティは無効になります。

次のいずれかの条件が真になった場合、サンプリングは中止されます。

  • サンプラがロード・バランシングに必要な最低数のサンプルを収集した。このサンプル数は、このプロパティで設定した値より小さい場合があります。

  • サンプリングされたデータの割合(パーセント)がoracle.hadoop.loader.sampler.maxSamplesPctの値を超えている。

  • サンプリングされたバイト数がoracle.hadoop.loader.sampler.maxHeapBytesの値を超えている。プロパティに負の値が設定されている場合、この条件は適用されません。

oracle.hadoop.loader.sampler.minSplits

型: Integer

デフォルト値: 5

説明: サンプラが中止条件を評価するまでに読み取る入力分割の最小数。入力分割の合計数がminSplitsより少ない場合、サンプラはすべての入力分割から読み取ります。

0以下の数値は1として扱われます。

oracle.hadoop.loader.sampler.numThreads

型: Integer

デフォルト値: 5

説明: サンプラのスレッド数。スレッド数が多いほど、サンプリングの同時実行性が高くなります。値が1の場合、サンプラのマルチスレッドが無効になります。

Oracle Loader for Hadoopのジョブを開始するノード上のプロセッサおよびメモリー・リソースに基づいて値を設定します。

oracle.hadoop.loader.sortKey

型: String

デフォルト値: 定義されていません。

説明: リデューサ・グループ内の出力レコードのソート・キーを構成する列名のカンマ区切りリスト。

引用符で囲まれている識別子または引用符で囲まれていない識別子を列名にすることができます。

  • 引用符で囲まれている識別子の開始と終了には二重引用符(")を使用します。

  • 引用符で囲まれていない識別子は、使用する前に大文字に変換されます。

oracle.hadoop.loader.tableMetadataFile

型: String

デフォルト値: 定義されていません。

説明: ターゲット表のメタデータ・ファイルへのパス。このプロパティは、オフライン・データベース・モードで実行する場合に設定します。

ローカル・ファイルを指定するには、次の例のようにfile://の構文を使用します。

file:///home/jdoe/metadata.xml

表のメタデータ・ファイルを作成するには、OraLoaderMetadataユーティリティを実行します。「OraLoaderMetadataユーティリティ」を参照してください。

oracle.hadoop.loader.targetTable

非推奨。oracle.hadoop.loader.loaderMap.targetTableを使用してください。

Oracle NoSQL Databaseの構成プロパティ

プロパティ 説明

oracle.kv.kvstore

型: String

デフォルト値: 定義されていません。

説明: ソース・データがあるKVストアの名前。

oracle.kv.hosts

型: String

デフォルト値: 定義されていません。

説明: ソース・データがあるKVストア内のホストを識別する、1つ以上のhostname:portペアの配列。複数のペアはカンマで区切ります。

oracle.kv.batchSize

: Key

デフォルト値: 定義されていません。

説明: 各ネットワーク・ラウンドトリップ中、KVAvroInputFormatがフェッチに必要とするキー数。ゼロ(0)値は、プロパティをデフォルト値に設定します。

oracle.kv.parentKey

型: String

デフォルト値: 定義されていません。

説明: 返される値を、指定されたキーの子のキーと値のペアのみに制限します。メジャー・キー・パスを部分パスとし、マイナー・キー・パスを空にする必要があります。null値(デフォルト)は出力を制限しないため、KVAvroInputFormatがストア内のすべてのキーを返します。

oracle.kv.subRange

: KeyRange

デフォルト値: 定義されていません。

説明: 返される値を、oracle.kv.parentKeyにより指定された親キーの下の特定の子へ、さらに制限します。

oracle.kv.depth

: Depth

デフォルト値: PARENT_AND_DESCENDENTS

説明: 返される値を、oracle.kv.parentKeyの値の下の、特定の階層の深さに制限します。次のキーワードは有効な値です。

  • CHILDREN_ONLY: 子を返します。指定された親は返しません。

  • DESCENDANTS_ONLY: すべての子孫を返します。指定された親は返しません。

  • PARENT_AND_CHILDREN: 子および親を返します。

  • PARENT_AND_DESCENDANTS: すべての子孫と親を返します。

oracle.kv.consistency

: Consistency

デフォルト値: NONE_REQUIRED

説明: 子のキーと値のペアを読み取る際の一貫性保証です。次のキーワードは有効な値です。

  • ABSOLUTE: 一貫性が絶対的となるよう、マスターがトランザクションを提供する必要があります。

  • NONE_REQUIRED: レプリカが、マスターと比較したレプリカの状態に関係なく、トランザクションを提供することが可能です。

oracle.kv.timeout

: Long

デフォルト値:

説明: 選択したキーと値のペアを取得する場合の最大時間間隔(ミリ秒)を設定します。ゼロ(0)値は、プロパティをデフォルト値に設定します。

oracle.kv.formatterClass

型: String

デフォルト値: 定義されていません。

説明: KeyValueVersionインスタンスをAvro IndexedRecord文字列に書式設定するAvroFormatterインタフェースを実装するクラスの名前を指定します。

Oracle NoSQL DatabaseのAvroレコードは直接Oracle Loader for Hadoopに移るため、NoSQLキーはターゲットのOracle Database表へのマッピングに使用できません。しかし、フォーマッタ・クラスはNoSQLのキーと値の両方を受け取るので、値とキーの両方を含む新しいAvroレコードを作成して返すことができ、これをOracle Loader for Hadoopに渡すことが可能になります。