この章では、Oracle Loader for Apache Hadoop (Oracle Loader for Hadoop)を使用してApache HadoopからOracle Databaseの表にデータをロードする方法について説明します。内容は次のとおりです。
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は、そのカスタム・コードを使用してフィールドとレコードを抽出します。
Oracle Loader for Hadoopを使用する方法には、次の3つがあります。
OHSHは、Oracle Loader for Hadoopを使用するためのお薦めの方法です。これには、OLHなどの様々なリソースを使用してHadoopとOracle Databaseの間でデータを移動するためのCLI(その単純なコマンド構文をスクリプト記述することもできる)が含まれています。
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と併用するためのその構成手順が説明されています。これらの手順では、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表のロード
OHSHセッションを開始します。
$ ohsh ohsh>
次のリソースを作成します。
ohsh> create sqlplus resource sql0 connectid="<database connection url>"
プロンプトで、データベース・パスワードを入力します。
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キーストアを使用してパスワードを保存でき、ユーザー名とパスワードの入力を求められることがなくなります。データをロードするために開発するスクリプトにこれを追加します。Javaキーストアを作成するには、「セキュアな外部JavaキーストアおよびHadoop資格証明コマンドの使用」を参照してください。
ohsh> create sqlplus resource sql_cs user=oracle passwordalias=oracle_passwd provider="jceks://file/home/oracle/passwd.jceks" connectid="inst1"
ターゲット・スキーマを示すJDBCリソース名にすることをお薦めします。
ohsh> create jdbc resource ora_mydatabase
connectid="<database connection ur1>"
プロンプトで、データベース・パスワードを入力します。
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キーストアを使用してパスワードを保存でき、ユーザー名とパスワードの入力を求められることがなくなります。データをロードするために開発するスクリプトにこれを追加します。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リソースhive0
は、Hive内のデフォルト・データベースに接続します。別のHiveデータベースに接続する必要がある場合は、別のリソースを作成します。
ohsh> create hive resource hive_mydatabase connectionurl=”jdbc:hive2:///<Hive database name>
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が使用されます。
ロード後は、行数を確認します。
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ディレクトリの場所です。
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
学習リソース
次のOHSHブログ・エントリは、初めて使用する際に役立つ可能性があります。
OHSHの使用によるOracle表およびHive表のロード方法(第5部: Oracle表ロード時のloadermapの使用)
OHSHの使用によるOracle表およびHive表のロード方法(第6部: Oracle表のロードのためのetlメソッドの使用)
SimpleDateFormatクラスのドキュメントについては、Java™ Platform, Standard Edition 7 API仕様を参照してください。
Oracle Loader for Hadoopを使用する場合は、次の基本的なステップを実行します。
Oracle Loader for Hadoopには次の2つの動作モードがあります。
オンライン・データベース・モードでは、Oracle Loader for Hadoopはジョブ構成ファイルまたはOracle Walletに格納されている資格証明を使用してターゲット・データベースに接続します。ローダーはこのデータベースから表のメタデータを取得します。新規レコードは、直接ターゲット表に挿入することも、Hadoopクラスタ内のファイルに書き込むこともできます。データベースのデータが必要なとき、またはデータベース・システムが比較的空いているときには、レコードを出力ファイルからロードできます。
次の図は、オンライン・データベース・モードの要素間の関係を示しています。
オフライン・データベース・モードでは、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など、別のユーティリティを使用して別途実行します。
次の図は、オフライン・データベース・モードの要素間の関係を示しています。この図には、データをターゲット表にロードする別途の手順は示されていません。
Oracle Loader for Hadoopはデータを1つのターゲット表にロードします。この表はOracleデータベース内に存在する必要があります。表は、空でも、データが格納されていてもかまいません。Oracle Loader for Hadoopは既存のデータを上書きしません。
表は、他の用途に使用する場合も同じ方法で作成します。その際は、次の制限に従う必要があります。
パーティション化は、非常に大規模な表の管理および効率的な問合せを行うためのデータベースの機能です。アプリケーションに対して完全に透過的な方法で、大規模な表をパーティションと呼ばれる小規模でより管理し易いサイズに分割する方法を提供します。
ターゲット表の定義には、次のシングルレベルおよびコンポジットレベルのパーティション化方式を使用できます。
ハッシュ
ハッシュ-ハッシュ
ハッシュ-リスト
ハッシュ-レンジ
時間隔
時間隔-ハッシュ
時間隔-リスト
時間隔-レンジ
リスト
リスト-ハッシュ
リスト-リスト
リスト-レンジ
レンジ
レンジ-ハッシュ
レンジ-リスト
レンジ-レンジ
Oracle Loader for Hadoopでは、参照パーティション化または仮想列ベースのパーティション化はサポートされません。
関連項目:
『Oracle Database VLDBおよびパーティショニング・ガイド』
構成ファイルは、HadoopがMapReduceジョブを実行するために必要なすべての情報を格納しているXMLドキュメントです。このファイルには、Oracle Loader for Hadoopに必要なすべての情報も指定できます。「Oracle Loader for Hadoop構成プロパティ・リファレンス」を参照してください。
構成プロパティは、Oracle Loader for Hadoopのすべてのジョブに必要な次の情報を示します。
Oracle Databaseへの接続を保護する方法。
「SSLおよびOracleウォレットを使用したOracle Databaseへのセキュアな接続の確立」を参照してください。
入力データの形式。
「入力形式の概要」を参照してください。
出力データの形式。
「出力形式の概要」を参照してください。
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>
Oracle Databaseへのセキュアな接続の確立について学習します。
この項では、OracleウォレットまたはJDBC SSLプロトコルを作成および使用して、Oracle Databaseに対して非常にセキュアな接続を作成および確立する方法について説明します。
Oracleウォレットは認証および署名資格証明を格納するセキュアなソフトウェア・コンテナです。資格証明にはウォレットを使用することをお薦めします。Oracleウォレットを使用するには、次のプロパティをジョブ構成ファイルに入力します。
SSLは、ネットワーク上でのセキュアな通信を提供する、広く使用されている業界標準プロトコルです。SSLでは、認証、データ暗号化およびデータ整合性が提供されます。Oracle Autonomous Data Warehouse Cloud ServiceなどのOracle Cloudサービスに接続する場合は、SSLが必要です。
オフライン・データベース・モードの場合のターゲット表メタデータの生成について学習します。
ローダー・ジョブでデータベースにアクセスできない場合があります。たとえば、HadoopクラスタがOracle Databaseとは別のネットワークにある場合などです。この場合、OraLoaderMetadataユーティリティを使用して、ターゲット表のメタデータをファイルに抽出し、保存します。OraLoaderMetadataユーティリティの詳細は、「OraLoaderMetadataユーティリティ」を参照してください。
入力形式は、Hadoopに保存されている特殊な種類のデータを読み取る場合に使用します。次に示す様々な入力形式を使用して、Hadoopで一般的に利用されるデータ形式を読み取ることができます。
固有のカスタム入力形式を使用することもできます。組込み形式の説明に、カスタムInputFormat
クラスの開発に役立つ情報を記入します。「カスタム入力形式」を参照してください。
データベース表にロードするデータの特定の入力形式を指定するには、ジョブ構成ファイルのmapreduce.job.inputformat.class
構成プロパティを使用します。
注意:
組込みテキスト形式では、引用符で囲んだ値に埋め込まれたヘッダー行や改行文字(\n
)は処理されません。
デリミタ付きテキスト・ファイルからデータをロードするには、mapreduce.job.inputformat.class
を次のように設定します
oracle.hadoop.loader.lib.input.DelimitedTextInputFormat
入力ファイルは次の要件に従う必要があります。
レコードは改行文字で区切る。
フィールドは、カンマやタブなどの1文字のマーカーで区切る。
空の文字列のトークンは囲まれていても囲まれていなくても、nullで置き換えられます。
DelimitedTextInputFormat
は、SQL*Loaderのトークン化方式をエミュレートします。つまり、各データはtで終了し、オプションでieまたはieとteで囲みます。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によって自動的に解凍されます。
DelimitedTextInputFormat
で処理するには複雑すぎるテキスト・ファイルからデータをロードするには、mapreduce.job.inputformat.class
を次のように設定します
oracle.hadoop.loader.lib.input.RegexInputFormat
たとえば、Webログのあるフィールドが引用符で区切られ、別のフィールドが角カッコで区切られている場合があります。
RegexInputFormat
を使用する場合、レコードは改行文字で区切る必要があります。各テキスト行のフィールドは、正規表現のマッチングによって識別されます。
正規表現はテキスト行全体が一致する必要があります。
フィールドの識別には正規表現のキャプチャ・グループが使用されます。
RegexInputFormat
はjava.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
Hive表からデータをロードするには、mapreduce.job.inputformat.class
を次のように設定します
oracle.hadoop.loader.lib.input.HiveToAvroInputFormat
パーティション化されていない表の場合は、HiveToAvroInputFormat
が表全体(Hive表のディレクトリ内の全ファイル)をインポートします。
パーティション化表の場合は、HiveToAvroInputFormat
が1つ以上のパーティションをインポートします。パーティションはロードまたはスキップのいずれかを行うことができます。ただし、パーティションを一部ロードすることはできません。
Oracle Loader for Hadoopは、複合(非プリミティブの)列に値があるすべての行を拒否します。プリミティブ値に解決するUNIONTYPE
フィールドがサポートされています。「拒否されたレコードの処理」を参照してください。
HiveToAvroInputFormat
は、Hive表の行をAvroレコードに変換し、Hive表の列名を大文字に変換して、フィールド名を生成します。この自動大文字変換により、フィールド名がターゲット表の列名と一致する確率が高くなります。「ターゲット表列への入力フィールドのマッピング」を参照してください。
注意:
この入力形式では、列名に引用符で囲まれた識別子が使用されているHive表はサポートされません。「HIVE-6013」を参照してください
HiveToAvroInputFormat
はSQL Standard Based Hive Authorizationを実施しないことにも注意してください。詳細は、https://cwiki.apache.org/confluence/display/Hive/SQL+Standard+Based+Hive+Authorization
を参照してください。
標準的なAvro形式のレコードが格納されているバイナリAvroデータ・ファイルからデータをロードするには、mapreduce.job.inputformat.class
を次のように設定します
oracle.hadoop.loader.lib.input.AvroInputFormat
拡張子が.avroのファイルのみを処理するには、mapreduce.input.fileinputformat.inputdir
構成プロパティにリストされているディレクトリに*.avro
を追加します。
Oracle NoSQL Databaseからデータをロードするには、mapreduce.job.inputformat.class
を次のように設定します
oracle.kv.hadoop.KVAvroInputFormat
この入力形式はOracle NoSQL Database 11g、リリース2以降で定義されています。
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>
のサブクラスです。
次の構成プロパティを使用して、キーと値のストアの名前と場所を指定する必要があります。
「Oracle NoSQL Databaseの構成プロパティ」を参照してください。
組込み入力形式では不十分な場合は、カスタム入力形式のJavaクラスを作成できます。以下では、Oracle Loader for Hadoopで使用できる入力形式のフレームワークについて説明します。
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
入力オブジェクトのスキーマを使用して入力フィールドの名前を検出し、ターゲット表の列にマップします。
IndexedRecord
の値の処理でエラーが発生した場合、Oracle Loader for HadoopはRecordReader
のgetCurrentKey
メソッドで返されるオブジェクトを使用してフィードバックを提供します。また、キーのtoString
メソッドを呼び出し、結果をエラー・メッセージで書式設定します。InputFormat
の開発者は、次のいずれかの情報を返すことにより、拒否されたレコードの識別でユーザーを支援できます。
データ・ファイルのURI
InputSplit
情報
データ・ファイル名とそのファイルのレコードのオフセット
機密情報が含まれる可能性があるため、レコードをクリア・テキスト形式で返すことはお薦めできません。返された値はクラスタ全体のHadoopのログに出力できます。「拒否されたレコードの不正なファイルへの記録」を参照してください。
レコードが失敗すると、キーがnullの場合、ローダーは識別情報を生成しません。
Oracle Loader for Hadoopは、サンプラを使用してMapReduceジョブのパフォーマンスを向上させます。サンプラはマルチスレッド化され、各サンプラ・スレッドは、指定されたInputFormat
クラスのコピーをインスタンス化します。新しい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といったフィールド名が自動的に割り当てられます。構成プロパティはありません。
マッピングは、入力フィールドをターゲット表のどの列にロードするかを示します。自動マッピング機能を使用することも、常に手動で入力フィールドをターゲット列にマップすることもできます。
Oracle Loader for Hadoopでは、入力データが次の要件に従っていれば、フィールドを適切な列に自動的にマップできます。
ターゲット表のすべての列をロードする。
IndexedRecord
入力オブジェクトの入力データ・フィールド名が列名と完全に一致している。例: Hive表からロードする場合、Oracleターゲット表の列の名前は、Hive表の列の名前と完全に一致します。
DATE
列にマップされるすべての入力フィールドを、同じJava日付形式を使用して解析できる。
自動マッピングの場合は、次の構成プロパティを使用します。
oracle.hadoop.loader.loaderMap.targetTable
: ターゲット表を識別します。
oracle.hadoop.loader.defaultDateFormat
: すべてのDATE
フィールドに適用するデフォルトの日付形式を指定します。
自動マッピングの要件に準拠していないロードの場合は、追加のプロパティを定義する必要があります。これらのプロパティでは、次のことが可能です。
データをターゲット表の列のサブセットにロードする。
入力フィールド名がデータベースの列名とまったく同じではない場合に、明示的なマッピングを作成する。
入力フィールドごとに異なる日付形式を指定する。
手動マッピングの場合は、次のプロパティを使用します。
oracle.hadoop.loader.loaderMap.targetTable
構成プロパティは、ターゲット表を識別します。必須。
oracle.hadoop.loader.loaderMap.columnNames
: ロード対象の列をリストします。
oracle.hadoop.loader.defaultDateFormat
: すべてのDATE
フィールドに適用するデフォルトの日付形式を指定します。
oracle.hadoop.loader.loaderMap.column_name.format
: 特定の列のデータ形式を指定します。
oracle.hadoop.loader.loaderMap.column_name.field
: 特定の列にマップされるAvroレコード・フィールドの名前を識別します。
注意:
手動マッピングは、異なる日付列の書式が異なる場合に特に役立ちます。手動マッピングの例を次に示します。
テキスト・ファイルからロードする際の構成ファイル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>
オンライン・データベース・モードでは、データを直接Oracleデータベース表にロードするか、ファイルに保存するかを選択できます。オフライン・データベース・モードでは、出力データの保存先はファイルに制限され、このファイルをターゲット表に個別のプロシージャとしてロードできます。ジョブ構成ファイルに出力形式を指定するには、mapreduce.job.outputformat.class
プロパティを使用します。
次の出力形式から選択します。
JDBC出力形式: データをターゲット表に直接ロードします。
Oracle OCIダイレクト・パス出力形式: データをターゲット表に直接ロードします。
デリミタ付きテキスト出力形式: データをローカル・ファイルに保存します。
Oracle Data Pump出力形式: データをローカル・ファイルに保存します。
HadoopシステムとOracle Databaseとの間のJDBC接続を利用してデータをロードできます。ローダー・ジョブの出力レコードは、タスクをオンライン・データベース・モードのOraLoader
プロセスの一部としてマップまたはリデュースすると、ターゲット表に直接ロードされます。データをロードするための追加ステップは不要です。
ジョブの実行中は、HadoopクラスタとOracle Databaseシステムとの間のJDBC接続をオープンしている必要があります。
この出力形式を使用するには、mapreduce.job.outputformat.class
を次のように設定します
oracle.hadoop.loader.lib.output.JDBCOutputFormat
JDBCOutputFormat
では、標準のJDBCバッチを使用してパフォーマンスと効率を最適化します。バッチの実行中に制約違反などのエラーが発生した場合、JDBCドライバはただちに実行を停止します。つまり、バッチに100行あり、10行目でエラーが発生した場合、9行は挿入され、91行は挿入されません。
JDBCドライバではエラーが発生した行が特定されないため、Oracle Loader for Hadoopでは、バッチ内の各行の挿入ステータスは把握されません。バッチ内のエラーが発生したすべての行に問題があるとみなされ、行はターゲット表に挿入される場合もあれば、挿入されない場合もあります。次のバッチのロードが続けられます。バッチ・エラーの数と問題のある行の数を示すロード・レポートがジョブの最後に生成されます。
この問題に対処する方法の1つは、ターゲット表に対して一意キーを定義することです。たとえば、HR.EMPLOYEES
表にEMPLOYEE_ID
という名前の主キーがあるとします。この場合、データをHR.EMPLOYEES
にロードした後、EMPLOYEE_ID
で問合せを行って欠落している従業員IDを検出します。欠落している従業員IDが入力データに見つかったら、ロードに失敗した原因を特定し、再度ロードを試行できます。
Oracle Call Interface (OCI)のダイレクト・パス・インタフェースを使用して、データをターゲット表にロードします。オンライン・データベース・モードでは、各リデューサが異なるデータベース・パーティションにロードするため、並列ロードのパフォーマンス向上が可能になります。データをロードするための追加ステップは不要です。
ジョブの実行中は、HadoopクラスタとOracle Databaseシステムとの間のOCI接続をオープンしている必要があります。
この出力形式を使用するには、mapreduce.job.outputformat.class
を次のように設定します
oracle.hadoop.loader.lib.output.OCIOutputFormat
OCIOutputFormat
には、次の制限があります。
Linux x86.64プラットフォームでのみ使用できます。
MapReduceジョブで1つ以上のリデューサを作成する必要があります。
ターゲット表は、パーティション化されている必要があります。
Oracle Database 11g (11.2.0.3)では、ターゲット表が、サブパーティション・キーにCHAR
、VARCHAR2
、NCHAR
またはNVARCHAR2
列が含まれるコンポジット時間隔パーティション化表の場合、Oracle Bug#13498646を適用します。後続バージョンのOracle Databaseでは、このパッチは必要ありません。
Hadoopクラスタでデリミタ付きテキスト出力ファイルを作成できます。マップまたはリデュース・タスクは、ジョブ構成ファイルに指定されたフィールド・デリミタと囲み文字を使用して、デリミタ付きテキスト・ファイルを生成します。後で、このデータを個別のプロシージャとしてOracleデータベースにロードできます。「DelimitedTextOutputFormatの概要」を参照してください。
この出力形式では、オンライン・データベース・モードの場合には、Oracle Databaseシステムへのオープン状態の接続で表のメタデータを取得し、オフライン・データベース・モードの場合には、OraloaderMetadata
ユーティリティによって生成された表のメタデータ・ファイルを使用できます。
この出力形式を使用するには、mapreduce.job.outputformat.class
を次のように設定します
oracle.hadoop.loader.lib.output.DelimitedTextOutputFormat
出力タスクによって、デリミタ付きテキスト形式ファイル、1つ以上の対応するSQL*Loader制御ファイルおよび外部表を使用してロードするためのSQLスクリプトが生成されます。
ターゲット表がパーティション化されていない場合、またはoracle.hadoop.loader.loadByPartition
がfalse
の場合には、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」を参照してください。
または、デリミタ付きテキスト・ファイルをデータベース・システムにコピーして、次のいずれかの方法でデータをターゲット表にロードすることもできます。
ファイルは${mapreduce.output.fileoutputformat.outputdir}/_olh
ディレクトリにあります。
出力ファイル内のレコードとフィールドの形式は、次のプロパティによって制御されます。
次の例に、出力タスクで生成されるサンプル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' )
Hadoopクラスタでデータ・ポンプ形式ファイルを作成できます。データ・ポンプ・ファイルは、マップまたはリデュース・タスクによって生成されます。後で、このデータを個別のプロシージャとしてOracleデータベースにロードできます。「DataPumpOutputFormatの概要」を参照してください。
この出力形式では、オンライン・データベース・モードの場合には、Oracle Databaseシステムへのオープン状態の接続を使用し、オフライン・データベース・モードの場合には、OraloaderMetadata
ユーティリティによって生成された表のメタデータ・ファイルを使用できます。
この出力形式を使用するには、mapreduce.job.outputformat.class
を次のように設定します
oracle.hadoop.loader.lib.output.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スクリプトを使用してロードすることもできます。このスクリプトは次のタスクを実行します。
ORACLE_DATAPUMP
アクセス・ドライバを使用する外部表定義を作成します。バイナリ形式のOracle Data Pump出力ファイルは、外部表のLOCATION
句にリストされます。
外部表によって使用されるディレクトリ・オブジェクトを作成します。スクリプトを実行する前に、このコマンドのコメントを解除する必要があります。スクリプトで使用するディレクトリ名を指定するには、ジョブ構成ファイルにoracle.hadoop.loader.extTabDirectoryName
プロパティを設定します。
外部表からターゲット表に行を挿入します。スクリプトを実行する前に、このコマンドのコメントを解除する必要があります。
SQLスクリプトは${mapreduce.output.fileoutputformat.outputdir}/_olh
ディレクトリにあります。
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
ファイルを解凍します。
基本オプション
ジョブ構成ファイルを識別します。「ジョブ構成ファイルの作成」を参照してください。
入力形式として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
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
Oracle Loader for Hadoopは、次のような様々な理由で入力レコードを拒否します。
マッピング・プロパティのエラー
入力データ内の欠落フィールド
無効な表パーティションにマップされたレコード
不正な書式のレコード(たとえば、日付が日付形式に一致しない場合や、レコードが正規表現パターンに一致しない場合)
デフォルトでは、Oracle Loader for Hadoopは、拒否されたレコードをHadoopログに記録せず、拒否されたレコードの識別方法のみを記録します。これにより、クラスタ全体に存在するHadoopログにユーザーの機密情報が格納されることを防ぎます。
拒否されたレコードを記録するようにOracle Loader for Hadoopを管理するには、構成プロパティoracle.hadoop.loader.logBadRecords
をtrue
に設定します。Oracle Loader for Hadoopは、ジョブの出力ディレクトリ内にある_olh/
ディレクトリの1つ以上の「不正な」ファイルに不正なレコードを記録します。
一部の問題により、Oracle Loader for Hadoopが入力のすべてのレコードを拒否することがあります。このような問題による時間とリソースの無駄を軽減するため、Oracle Loader for Hadoopは、1000レコードが拒否されると、ジョブを中止します。
拒否レコードの最大許可数を変更するには、構成プロパティoracle.hadoop.loader.rejectLimit
を設定します。負の値を設定すると、拒否制限が無効になり、拒否されるレコードの数に関係なくジョブの実行が完了します。
ロード・バランシングの目標は、すべてのリデューサにほぼ同量の処理を割り当てるMapReduceパーティション化スキームを生成することです。
Oracle Loader for Hadoopのサンプリング機能を使用すると、パーティション化されたデータベース表にデータをロードするときにリデューサ間で負荷を分散できます。このサンプリング機能では、データベース・パーティションをリデューサに割り当てる効率的なMapReduceパーティション化スキームが生成されます。
リデューサの実行時間は、通常、処理するレコードの数に比例します。レコードが多いほど、実行時間は長くなります。サンプリング機能が無効の場合、特定のデータベース・パーティションのすべてのレコードが1つのリデューサに送られます。データベース・パーティションによってレコードの数が異なることがあるため、これによってリデューサの負荷は不均等になります。Hadoopジョブの実行時間は、通常、最も遅いリデューサの実行時間によって決まるため、リデューサの負荷が不均等な場合、ジョブ全体のパフォーマンスが低下します。
サンプリング機能の有効/無効を切り替えるには、構成プロパティoracle.hadoop.loader.sampler.enableSampling
を設定します。サンプリング機能はデフォルトで有効になっています。
次のジョブ構成プロパティによってロード・バランシング機能の質を制御します。
サンプラは、所定のリデューサ負荷係数を使用してパーティション化スキームの質を評価します。負荷係数は、(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
というデフォルト値では、負荷分散の質と実行時間の兼合いが適切にとられます。
デフォルトでは、サンプラは、maxLoadFactor
とloadCI
の基準を満たすパーティション化スキームを生成するのに十分なサンプルを収集するまで実行されます。
ただし、サンプリングする最大レコード数を指定するoracle.hadoop.loader.sampler.maxSamplesPct
プロパティを設定すると、サンプラの実行時間を制限できます。
Oracle Loader for Hadoopでは、サンプリングが成功の場合にのみ、生成されたパーティション化スキームを使用します。統計的信頼度loadCI
で保証される最大リデューサ負荷係数(1+ maxLoadFactor
)のパーティション化スキームが生成される場合、サンプリングは成功です。
パーティション・レポートは、様々なマッパーに割り当てられたキーを識別します。このレポートは、サンプラで使用するためのXML形式で保存されます。ユーザーが使用するための情報は含まれません。このレポートには、${mapreduce.output.fileoutputformat.outputdir}/_balancer/orabalancer_report.xml
という名前が付けられます。サンプル化されたジョブ専用に生成されます。このxmlファイルには、マッピング出力を異なるリデューサに割り当てる方法およびサンプリング統計の説明が含まれます。
デフォルト値maxLoadFactor
、loadCI
およびmaxSamplesPct
により、サンプラは、様々な入力データ分布に対する質の高いパーティション化スキームを正常に生成できます。ただし、制約が厳しすぎる場合や、必要なサンプルの数が、ユーザーが指定した最大数であるmaxSamplesPct
を超えている場合などには、サンプラがカスタム・プロパティ値を使用したパーティション化スキームの生成に失敗することがあります。このような場合、Oracle Loader for Hadoopは、問題を特定するログ・メッセージを生成し、データベースのパーティション化スキームを使用してレコードの分割を行い、負荷分散は保証されません。
代替策は、構成プロパティの値を緩和することです。これは、maxSamplesPct
を大きくするか、maxLoadFactor
またはloadCI
、あるいはその両方を小さくすることによって行えます。
カスタム入力形式では、メモリーに収まらない入力分割が返されることがあります。このような場合、サンプラは、ローダー・ジョブが発行されるクライアント・ノードでメモリー不足エラーを返します。
この問題の解決策は、次のとおりです。
ジョブが発行されるJVMのヒープ・サイズを大きくします。
次のプロパティを調整します。
カスタム入力形式を開発する場合は、「カスタム入力形式」を参照してください。
Oracle Loader for Hadoopを使用してデータをOracle Big Data ApplianceからOracle Exadata Database Machineにロードする場合、InfiniBandプライベート・ネットワーク上でSockets Direct Protocol (SDP)を使用するようにシステムを構成することによって、スループットを向上させることができます。この設定は、データのロードのみを目的としてOracle Databaseに接続するための追加接続属性を指定します。
SDPプロトコルを指定するには、次のようにします。
HADOOP_OPTS
環境変数にJVMオプションを追加して、JDBC SDPエクスポートを有効にします。
HADOOP_OPTS="-Doracle.net.SDP=true -Djava.net.preferIPv4Stack=true"
次のようにして、このHadoop構成プロパティを子タスクJVMに設定します。
-D mapred.child.java.opts="-Doracle.net.SDP=true -Djava.net.preferIPv4Stack=true"
注意:
このHadoop構成プロパティは、OLHコマンドラインに追加したり、構成ファイルに設定したりできます。
標準のイーサネット通信を構成します。ジョブ構成ファイルで、次の構文に従ってoracle.hadoop.loader.connection.url
を設定します。
jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS_LIST= (ADDRESS=(PROTOCOL=TCP)(HOST=hostName)(PORT=portNumber))) (CONNECT_DATA=(SERVICE_NAME=serviceName)))
ExadataでOracleリスナーを、SDPプロトコルをサポートするように構成し、特定のポート・アドレス(1522など)にバインドします。ジョブ構成ファイルで、次の構文に従ってoracle.hadoop.loader.connection.oci_url
の値としてリスナー・アドレスを指定します。
(DESCRIPTION=(ADDRESS=(PROTOCOL=SDP) (HOST=hostName) (PORT=portNumber)) (CONNECT_DATA=(SERVICE_NAME=serviceName)))
hostName、portNumberおよびserviceNameは、Oracle Exadata Database Machine上のSDPリスナーを識別するための適切な値に置き換えます。
関連項目:
InfiniBandによる通信の構成の詳細は、『Oracle Big Data Applianceソフトウェア・ユーザーズ・ガイド』を参照してください。
OraLoader
は、構成プロパティの指定にhadoopコマンドの標準的なメソッドを使用します。構成ファイルを指定する場合は-conf
オプションを使用し、個別のプロパティを指定する場合は-D
オプションを使用します。
この項では、一般にOraLoader
ジョブに設定する必要があるOraLoader構成プロパティ、Oracle NoSQL Database構成プロパティ、そしていくつかの汎用的なHadoop MapReduceプロパティについて説明します。
すべてのOraLoaderプロパティを示す構成ファイルは、$OLH_HOME/doc/oraloader-conf.xml
にあります。
MapReduce構成プロパティ
プロパティ | 説明 |
---|---|
mapreduce.job.name |
型: String デフォルト値: 説明: Hadoopのジョブ名。一意の名前を付けることで、Hadoop JobTracker WebインタフェースやCloudera Managerなどのツールを使用してジョブを監視できます。 |
mapreduce.input.fileinputformat.inputdir |
型: String デフォルト値: 定義されていません。 説明: 入力ディレクトリの名前のカンマ区切りリスト。 |
mapreduce.job.inputformat.class |
型: String デフォルト値: 定義されていません。 説明: 入力データの形式を識別します。次のいずれかの組込み入力形式またはカスタム
組込み入力形式の詳細は、「入力形式の概要」を参照してください。 |
mapreduce.output.fileoutputformat.outputdir |
型: String デフォルト値: 定義されていません。 説明: 出力ディレクトリのカンマ区切りリスト。ジョブを実行する前には存在しません。必須。 |
mapreduce.job.outputformat.class |
型: String デフォルト値: 定義されていません。 説明: 出力タイプを指定します。値は次のとおりです。
「出力形式の概要」を参照してください。 |
mapreduce.job.reduces |
型: Integer デフォルト値: 1 説明: Oracle Loader for Hadoopジョブで使用されるリデュース・タスクの数。デフォルト値の1ではパラレル処理がサポートされないため、複数のパラレル・データ・ロードをサポートするよう値を大きくすると、パフォーマンスが向上します。ジョブのリデュース・タスクの数には、十分であるが過剰でない値を選択してください。使用可能なリソースによって決定されるポイントでリデュース・タスクの数を過度に増やすと、向上がみられなくなる一方で、他のジョブのパフォーマンスが低下する可能性もあります。 |
OraLoaderの構成プロパティ
プロパティ | 説明 |
---|---|
oracle.hadoop.loader.badRecordFlushInterval |
型: Integer デフォルト値: 説明: ログ・ファイルをフラッシュするまでにタスクの試行を記録できる最大レコード数を設定します。この設定により、レコードの拒否が制限( フラッシュ間隔を有効にするには、 |
oracle.hadoop.loader.compressionFactors |
型: 小数 デフォルト値: 説明: これらの値は、サンプリングが有効でターゲット表が圧縮されているときにOracle Loader for Hadoopによって使用されます。これらは、ターゲット表の圧縮係数です。最高のパフォーマンスを得るには、このプロパティの値がターゲット表の圧縮係数と一致している必要があります。値は名前=値のペアのカンマ区切りリストです。名前は次のキーワードのいずれかである必要があります。
|
oracle.hadoop.loader.connection.defaultExecuteBatch |
型: Integer デフォルト値: 説明: データベースへのトリップごとに挿入されるレコード数。 1以上の値を指定します。最大値の制限はありませんが、パフォーマンスはあまり向上せずにメモリー・フットプリントが大きくなるため、非常に大きいバッチ・サイズを使用することは推奨されません。 値が1未満の場合は、デフォルト値が設定されます。 |
oracle.hadoop.loader.connection.oci_url |
型: String デフォルト値: 説明: 次の例では、OCI接続にソケット・ダイレクト・プロトコル(SDP)を指定しています。
この接続文字列に接頭辞"jdbc:oracle:thin:@"は不要です。最初のアット記号(@)までのすべての文字が削除されます。 |
oracle.hadoop.loader.connection.password |
型: String デフォルト値: 定義されていません。 説明: 接続するユーザーのパスワード。パスワードの保存にはクリア・テキストを使用しないことをお薦めします。かわりにOracle Walletを使用してください。 |
oracle.hadoop.loader.connection.sessionTimeZone |
型: String デフォルト値: 説明: データベース接続のセッション・タイムゾーンを変更します。有効な値は、次のとおりです。
このプロパティは、 |
oracle.hadoop.loader.connection.cluster.tns_admin |
型: String デフォルト値: 定義されていません。 説明: TNS adminの場所がクライアント側と異なる場合の、クラスタ・ノード上のTNS adminの場所。 デフォルトでは、クライアント側のTNS adminの場所は、クラスタ・ノード上と同じくoracle.hadoop.loader.connection.tns_adminによって指定します。
|
oracle.hadoop.loader.connection.directory |
型: String デフォルト値: 定義されていません。 説明: Hadoopクラスタの各ノードのディレクトリへのファイル・パス。 |
oracle.hadoop.loader.connection.tns_admin |
型: String デフォルト値: 定義されていません。 説明: Hadoopクラスタの各ノードにある、 Oracle Walletを外部パスワード・ストアとして使用する場合(推奨)、このプロパティを設定する必要があります。 |
oracle.hadoop.loader.connection.tnsEntryName |
型: String デフォルト値: 定義されていません。 説明: |
oracle.hadoop.loader.connection.url |
型: String デフォルト値: 定義されていません。 説明: データベース接続のURL。このプロパティは、他のすべての接続プロパティより優先されます。 Oracle Walletが外部パスワード・ストアとして構成されている場合(推奨)、プロパティ値は、ドライバ接頭辞 次の例に、接続URLの有効な値を示します。
|
oracle.hadoop.loader.connection.user |
型: String デフォルト値: 定義されていません。 説明: データベース・ユーザー名。このプロパティでは オンライン・データベース・モードを使用する場合は、このプロパティまたは |
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.defaultDateFormat |
型: String デフォルト値: 説明: |
oracle.hadoop.loader.enableSorting |
型: Boolean デフォルト値: 説明: 各リデューサ・グループ内の出力レコードをソートするかどうかを制御します。ターゲット表のソート・キーとなる列を指定するには、 |
oracle.hadoop.loader.enforceClasspath |
型: Boolean デフォルト値: 一致しないバージョンのJARがクラスパスに追加されないようにするために、Oracle Loader for Hadoopでは、内部クラスが このチェックを無効にするには、プロパティを |
oracle.hadoop.loader.extTabDirectoryName |
型: String デフォルト値: 説明: 外部表の このプロパティは |
oracle.hadoop.loader.input.fieldNames |
型: String デフォルト値: 説明: 入力フィールドの名前のカンマ区切りリスト。 組込み入力形式の場合は、目的のフィールドだけではなく、データ内のすべてのフィールドの名前を指定します。入力行のフィールド数がこのプロパティに指定されたフィールド名の数より多い場合、余分なフィールドは破棄されます。行のフィールド数がこのプロパティに指定されたフィールド名の数より少ない場合、余分なフィールドにはnullが設定されます。選択したフィールドのみをロードする場合は、「ターゲット表列への入力フィールドのマッピング」を参照してください。 名前は、レコードのAvroスキーマの作成に使用されるため、有効なJSON名文字列である必要があります。 このプロパティは、 |
oracle.hadoop.loader.input.fieldTerminator |
型: String デフォルト値: 説明: |
oracle.hadoop.loader.input.hive.databaseName |
型: String デフォルト値: 定義されていません。 説明: 入力表が格納されているHiveデータベースの名前 |
oracle.hadoop.loader.input.hive.partitionFilter 注意: このプロパティは非推奨です。かわりにoracle.hadoop.loader.input.hive.rowFilter を使用してください。 |
型: String デフォルト値: 定義されていません。 説明: 式は次の制限に従う必要があります。
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 and 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表全体をロードします。 式は次の制限に従う必要があります。
いずれの場合も、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表(ストレージ・ハンドラによって管理されない表)から行のサブセットをインポートするときには
|
oracle.hadoop.loader.input.hive.tableName |
型: String デフォルト値: 定義されていません。 説明: 入力データが格納されているHive表の名前。 |
oracle.hadoop.loader.input.initialFieldEncloser |
型: String デフォルト値: 定義されていません。 説明: フィールドの開始を示す文字。値には、1文字または このプロパティが設定されている場合、パーサーは、各フィールドを囲まれていないトークン(値)として読み取る前にまず、囲まれたトークンとして読み取ります。フィールド囲み文字が設定されていない場合、パーサーは各フィールドを囲まれていないトークンとして読み取ります。 このプロパティを設定し、 |
oracle.hadoop.loader.input.regexCaseInsensitive |
型: Boolean デフォルト値: 説明: パターンの照合時に大文字と小文字を区別するかどうかを制御します。 このプロパティは |
oracle.hadoop.loader.input.regexPattern |
型: String デフォルト値: 定義されていません。 説明: 正規表現のパターン文字列。 正規表現はテキスト行全体が一致する必要があります。たとえば、入力行
このプロパティは 関連項目: 正規表現と取得グループの詳細は、次のサイトにあるJava Platform Standard Edition 6 API仕様の
|
oracle.hadoop.loader.input.trailingFieldEncloser |
型: String デフォルト値: 説明: フィールドの終了を示す文字を表します。値には、1文字または フィールドの囲み文字には、入力形式に定義された終端文字および空白文字とは異なる文字を使用する必要があります。 終了フィールド囲み文字が入力フィールドに組み込まれている場合、リテラル・テキストとして解析されるようにするには、二重にする必要があります。たとえば、 このプロパティを設定する場合、 |
oracle.hadoop.loader.loadByPartition |
型: Boolean デフォルト値: 説明: パーティションを認識するロードを指定します。Oracle Loader for Hadoopは、Hadoopクラスタ上のすべての出力形式の出力をパーティション別に整理します。このタスクはデータベース・システムのリソースには影響しません。
|
oracle.hadoop.loader.loaderMap.columnNames |
型: String デフォルト値: 定義されていません。 説明: ターゲット表の列名を任意の順序で示したカンマ区切りリスト。名前は引用符で囲むか囲まないかのいずれかです。引用符で囲む名前には二重引用符(")を最初と最後に付けることで、入力したとおりに使用されます。引用符で囲まれていない名前は大文字に変換されます。 このプロパティは、 |
oracle.hadoop.loader.loaderMap.column_name.field |
型: String デフォルト値: 正規化された列名 説明: Avroレコードを含むフィールドの名前で、このプロパティ名で識別される列にマップされます。列名は引用符で囲むか囲まないかのいずれかです。引用符で囲む名前には二重引用符(")を最初と最後に付けることで、入力したとおりに使用されます。引用符で囲まれていない名前は大文字に変換されます。オプション。 このプロパティは、 |
oracle.hadoop.loader.loaderMap.column_name.format |
型: String デフォルト値: 定義されていません。 説明: このプロパティ名で識別される列にロードするデータのデータ形式を指定します。日付形式には このプロパティは、 |
oracle.hadoop.loader.loaderMap.targetTable |
型: String デフォルト値: 定義されていません。 説明: ロード先の表のスキーマで修飾された名前。このプロパティは、 列のサブセットをロードするには、 |
oracle.hadoop.loader.loaderMapFile |
ローダー・マップは、リリース2.3以降で非推奨になりました。ローダー・マップ・ファイルは、 |
oracle.hadoop.loader.log4j.propertyPrefix |
型: String デフォルト値: 説明: 構成ファイルからロードされたApache Oracle Loader for Hadoopで -D log4j.logger.oracle.hadoop.loader.OraLoader=DEBUG -D log4j.logger.oracle.hadoop.loader.metadata=INFO この接頭辞で始まるすべての構成プロパティが 構成プロパティは |
oracle.hadoop.loader.logBadRecords |
型: Boolean デフォルト値: 説明: Oracle Loader for Hadoopが不正なレコードをファイルにログ記録するかどうかを制御します。 このプロパティは、入力形式とマッパーで拒否されるレコードのみに適用されます。出力形式またはサンプリング機能で発生したエラーには適用されません。 |
oracle.hadoop.loader.logRetentionPolicy |
型: String デフォルト値: 説明: どのような場合にジョブの最後にOracle Loader for Hadoopログを生成/保持する必要があるかを指定します。有効な値は、次のとおりです。
次の状況は、
logRetentionPolicy においてはエラーとみなされます。
次のファイルがこのプロパティの対象です。
|
oracle.hadoop.loader.olh_home |
型: String デフォルト値: 説明: OraLoaderジョブを開始するノード上のOracle Loader for Hadoopのホーム・ディレクトリのパス。このパスは、必要なライブラリの場所を示します。 |
oracle.hadoop.loader.olhcachePath |
型: String デフォルト値: 説明: Oracle Loader for HadoopがMapReduceの分散キャッシュにロードするファイルを作成できるHDFSディレクトリのフル・パスを識別します。 この分散キャッシュは、大規模なアプリケーション固有ファイルをキャッシュし、クラスタ内のノード間に効率的に分散する機能です。 |
oracle.hadoop.loader.output.degreeOfParallelism |
型: String デフォルト値: 定義されていません。 説明: 設定されている場合、このプロパティの値は、次のいずれかを制御します。
このプロパティが設定されていない場合は、
このプロパティによって、 |
oracle.hadoop.loader.output.dirpathBufsize |
型: Integer デフォルト値: 説明: |
oracle.hadoop.loader.output.escapeEnclosers |
型: Boolean デフォルト値: 説明: 埋込みの終了囲み文字をリテラル・テキストとして処理するかどうか(つまり、エスケープするかどうか)を制御します。このプロパティを |
oracle.hadoop.loader.output.fieldTerminator |
型: String デフォルト値: 説明: |
oracle.hadoop.loader.output.granuleSize |
型: Integer デフォルト値: 説明: 生成されたデータ・ポンプ・ファイルのグラニュル・サイズ(バイト)。 グラニュルは、 関連項目: |
oracle.hadoop.loader.output.initialFieldEncloser |
型: String デフォルト値: 定義されていません。 説明: 出力で生成される、フィールドの開始を示す文字。値には、1文字または フィールドに このプロパティを設定する場合、 |
oracle.hadoop.loader.output.trailingFieldEncloser |
型: String デフォルト値: 説明: 出力で生成される、フィールドの終了を示す文字。値には、1文字または フィールドに このプロパティを設定する場合、 |
oracle.hadoop.loader.rejectLimit |
型: Integer デフォルト値: 説明: ジョブの実行が停止するまでに拒否またはスキップできるレコードの最大数。負の値を設定すると、拒否制限が無効になり、ジョブの実行が完了します。
入力形式のエラーは、修復不可能でマップ・タスクが中止になるため、拒否制限に反映されません。サンプリング機能またはオンライン出力形式で発生したエラーも拒否制限に反映されません。 |
oracle.hadoop.loader.sampler.enableSampling |
型: Boolean デフォルト値: 説明: サンプリング機能が有効かどうかを制御します。サンプリングを無効にするには、このプロパティを
|
oracle.hadoop.loader.sampler.hintMaxSplitSize |
型: Integer デフォルト値: 説明: サンプリング・プロセスにHadoopの 一部の入力形式( データセットのデータ量が数十TB単位に上る場合や、入力形式の 分割サイズが大きいほど、I/Oパフォーマンスは高くなりますが、サンプリング性能は必ずしも高くなりません。この値を、適切なサンプリング性能を得られるような小さい値(ただし、小さすぎない値)に設定します。極度に小さい値を設定すると、I/Oパフォーマンスが非効率になり、返される分割数が多すぎて
|
oracle.hadoop.loader.sampler.hintNumMapTasks |
型: Integer デフォルト値: 説明: サンプリング・プロセスにHadoopの 一部の入力形式( データセットに対して、この値を100万行より大きい値に増やします。ただし、極度に大きい値を設定すると、返される分割数が多すぎて |
oracle.hadoop.loader.sampler.loadCI |
型: 小数 デフォルト値: 説明: リデューサの最大負荷係数に対する統計的信頼性インジケータ。 このプロパティは |
oracle.hadoop.loader.sampler.maxHeapBytes |
型: Integer デフォルト値: 説明: サンプラが使用可能なメモリーの最大容量をバイト単位で指定します。 次のいずれかの条件が真になった場合、サンプリングは中止されます。
|
oracle.hadoop.loader.sampler.maxLoadFactor |
型: Float デフォルト値: 説明: リデューサに対する最大許容負荷係数。値が このプロパティは 負荷が完全に分散された状態では、各リデューサに均等な作業量(負荷)が割り当てられています。負荷係数は、(assigned_load - ideal_load)/ideal_loadの計算で求められる各リデューサの相対的な過負荷を表します。ロード・バランシングが成功した場合、ジョブは指定した信頼度の最大負荷係数の範囲内で実行されます。
|
oracle.hadoop.loader.sampler.maxSamplesPct |
型: Float デフォルト値: 説明: 最大サンプル・サイズ(入力データ内のレコード数の割合)を設定します。値 このプロパティは0~1の範囲の値(0~100%)を受け入れます。負の値を設定すると、このプロパティは無効になります。 次のいずれかの条件が真になった場合、サンプリングは中止されます。
|
oracle.hadoop.loader.sampler.minSplits |
型: Integer デフォルト値: 説明: サンプラが中止条件を評価するまでに読み取る入力分割の最小数。入力分割の合計数が
|
oracle.hadoop.loader.sampler.numThreads |
型: Integer デフォルト値: 説明: サンプラのスレッド数。スレッド数が多いほど、サンプリングの同時実行性が高くなります。値が Oracle Loader for Hadoopのジョブを開始するノード上のプロセッサおよびメモリー・リソースに基づいて値を設定します。 |
oracle.hadoop.loader.sortKey |
型: String デフォルト値: 定義されていません。 説明: リデューサ・グループ内の出力レコードのソート・キーを構成する列名のカンマ区切りリスト。 引用符で囲まれている識別子または引用符で囲まれていない識別子を列名にすることができます。
|
oracle.hadoop.loader.tableMetadataFile |
型: String デフォルト値: 定義されていません。 説明: ターゲット表のメタデータ・ファイルへのパス。このプロパティは、オフライン・データベース・モードで実行する場合に設定します。 ローカル・ファイルを指定するには、次の例のように file:///home/jdoe/metadata.xml 表のメタデータ・ファイルを作成するには、 |
oracle.hadoop.loader.targetTable |
非推奨。 |
Oracle NoSQL Databaseの構成プロパティ
プロパティ | 説明 |
---|---|
oracle.kv.kvstore |
型: String デフォルト値: 定義されていません。 説明: ソース・データがあるKVストアの名前。 |
oracle.kv.hosts |
型: String デフォルト値: 定義されていません。 説明: ソース・データがあるKVストア内のホストを識別する、1つ以上のhostname:portペアの配列。複数のペアはカンマで区切ります。 |
oracle.kv.batchSize |
型: Key デフォルト値: 定義されていません。 説明: 各ネットワーク・ラウンドトリップ中、 |
oracle.kv.parentKey |
型: String デフォルト値: 定義されていません。 説明: 返される値を、指定されたキーの子のキーと値のペアのみに制限します。メジャー・キー・パスを部分パスとし、マイナー・キー・パスを空にする必要があります。null値(デフォルト)は出力を制限しないため、 |
oracle.kv.subRange |
型: KeyRange デフォルト値: 定義されていません。 説明: 返される値を、 |
oracle.kv.depth |
型: Depth デフォルト値: 説明: 返される値を、
|
oracle.kv.consistency |
型: Consistency デフォルト値: 説明: 子のキーと値のペアを読み取る際の一貫性保証です。次のキーワードは有効な値です。
|
oracle.kv.timeout |
型: Long デフォルト値: 説明: 選択したキーと値のペアを取得する場合の最大時間間隔(ミリ秒)を設定します。ゼロ(0)値は、プロパティをデフォルト値に設定します。 |
oracle.kv.formatterClass |
型: String デフォルト値: 定義されていません。 説明: Oracle NoSQL DatabaseのAvroレコードは直接Oracle Loader for Hadoopに移るため、NoSQLキーはターゲットのOracle Database表へのマッピングに使用できません。しかし、フォーマッタ・クラスはNoSQLのキーと値の両方を受け取るので、値とキーの両方を含む新しいAvroレコードを作成して返すことができ、これをOracle Loader for Hadoopに渡すことが可能になります。 |