2 Oracle Shell for Hadoop Loaders
Oracle Big Data Connectorsは、HadoopとOracle Databaseの間でデータを交換するための強力なツールセットです。Oracle Shell for Hadoop Loaders (OHSH)は、Oracle Loader for Hadoop、Oracle SQL Connector for HDFSおよびBig Data SQLのCopy to Hadoop機能を使用するための便利なツールです。
Oracle Shell for Hadoop Loadersとは
Oracle Shell for Hadoop Loadersは、Oracle Loader for Apache Hadoop、Oracle SQL Connector for HDFSおよびBig Data SQLのCopy to Hadoop機能への簡単に使用できるコマンドライン・インタフェースを提供するヘルパー・シェルです。 コマンドライン・リコール、履歴、親プロセスからの環境変数の継承、新規または既存の環境変数の設定およびコマンドラインでの環境切り替えの実行など、基本的なシェル機能を備えています。
Oracle Shell for Hadoop Loadersのコア機能には次のようなものがあります。
-
Oracle Shell for Hadoop Loadersがロード・タスクを実行するために使用する、名前付きの外部リソースの定義。
-
ロード操作のデフォルト値の設定。
-
ロード・コマンドの実行。
-
ロード前後の簡単なタスクの、オペレーティング・システム、HDFS、HiveおよびOracleへの委任。 これらのタスクには、ロードするデータの表示およびロード後のターゲット表のデータの表示も含まれます。
関連項目:
OHSHキットのサンプルディレクトリには、Oracle Shell for Hadoop Loadersを使用してリソースを定義しデータをロードする多くの例が含まれています。OHSHのロード方式を実行する方法の例および手順の詳細は、<OHSH_KIT>/examples.zipを解凍して<OHSH_KIT>/examples/README.txtを参照してください。
ノート:
HADOOP_CLASSPATH環境変数は、Oracle Shell for Hadoop Loadersを起動する前にクリアしておく必要があります。
Oracle Shell for Hadoop Loaders (OHSH)の構成
ノート:
Oracle Big Data Serviceで実行するようにOHSHを構成する手順は、Oracle Big Data Serviceの使用のBig Data ConnectorsおよびCopy to Hadoopを使用したBig Data Serviceとデータベース・インスタンスの間でのデータのコピーに関する項を参照してください。
Hadoopクラスタまたはエッジ・ノード(Oracle Database System)上のOHSHの場合は、OHSHインストールの場所を確認して、OHSH_HOMEを設定します。次に例を示します。
Oracle Shell for Hadoop Loadersを使用する前に
OHSH対話型セッションの開始
対話型セッションを開始するには、コマンドラインでohshを入力します。OHSHを起動する前に、HADOOP_CLASSPATHがクリアされていることを確認してください。これにより、OHSHシェルに移動します(パスにOHSHが含まれている場合)。
$ ohsh
ohsh>このシェルでOHSHコマンドを実行できます(OHSH構文を使用)。Beeline/Hive、Hadoop、BashおよびSQL*Plusのコマンドを実行することもできます。非OHSHコマンドの場合は、コマンドの実行に使用するリソースの名前に委任演算子の接頭辞(%)を追加します。次に例を示します。
ohsh> %bash0 ls —lOHSHのスクリプト記述
CLIで機能するのと同じコマンドをスクリプト記述することもできます。ohshコマンドには、スクリプトで使用するための3つのパラメータが用意されています。
-
ohsh —i <filename>.ohsh-iパラメータは、プロンプトが表示される前に、OHSHに、スクリプト内のコマンドを使用して対話型セッションを初期化するように指示します。これは、シェル内で作業を開始する前に、必要なセッション・リソースを設定し、他の準備タスクを自動化するための便利な方法です。$ ohsh –i initresources.ohsh -
ohsh —f <filename>.ohsh-fパラメータを指定してohshコマンドを実行すると、非対話型セッションが開始され、スクリプト内のコマンドが実行されます。$ ohsh –f myunattendedjobs.ohsh -
ohsh —i —f <filename>.ohsh-iと-fを一緒に使用することで、非対話型セッションを初期化してからセッションで別のスクリプトを実行できます。$ ohsh -i mysetup.ohsh –f myunattendedjobs.ohsh -
ohsh —cこのコマンドは、OHSHセッションが起動時に継承するすべてのHadoop構成プロパティをダンプします。
OHSHリソースの使用
リソースは、OHSHがやり取りする名前付きエンティティです。例: Hadoopクラスタはリソースであり、Oracleデータベース、Hiveデータベース、OracleデータベースとのSQLセッション、およびローカルOSでのBashシェルへのJDBC接続と同様です。
OHSHは、起動時にhive0 (デフォルトHiveデータベースに接続するため)およびhadoop0という2つのデフォルト・リソースを提供します。
-
hive0リソースを使用して次のHiveコマンドを実行します。ohsh> %hive0 show tables他のHiveデータベースに接続するためにHiveリソースを追加作成できます。
-
hadoop0リソースを使用して次のHadoopコマンドを実行します。ohsh> %hadoop0 fs -ls
対話型またはスクリプト化セッション内で、SSL、SQLやJDBCなどの追加リソースのインスタンスを作成できます。OHSHを介してOracle Databaseに接続するには、次の3つのリソースを作成する必要があります。
- SQLリソースの作成:
ohsh> create sqlplus resource sql0 connectid=”bigdatalite.localdomain:1521/orcl”ノート:
プロンプトで、データベースのユーザー名とパスワードを入力します。 - JDBCリソースの作成:
ohsh> create jdbc resource jdbc0 connectid=<database connection URL>ノート:
プロンプトで、データベースのユーザー名とパスワードを入力します。 - リソースの表示:
ohsh> show resources
このコマンドは、デフォルトのリソース、およびセッション内で作成された追加リソースを示します。
Oracle Databaseの接続のためのJDBC SSLによるリソースの作成
SSLを介してOracle Databaseに接続するには、次のリソースを作成する必要があります。
- SSLソースの作成。SSLクライアント・ウォレットをダウンロードして構成ステップを完了するには、「JDBC SSLの使用」を参照してください。
- SQLリソースの作成:
ohsh> create sqlplus resource sql_ssl connectid="<tns entry name for the SSL connection>"次に例を示します。ohsh> create sqlplus resource sql_ssl connectid="inst1_ssl"inst1_sslは、JDBC SSL接続のTNSエントリですノート:
プロンプトで、データベースのユーザー名とパスワードを入力します。 - JDBCリソースの作成:
ohsh> create jdbc resource jdbc_ssl connectiondir=<SSL wallet directory location> connectid="<tns entry name for the SSL connection>"次に例を示します。ohsh> create jdbc resource ora_mydatabase_cs connectiondir=/home/oracle/ssl_client_wallet connectid="inst1_ssl"inst1_sslは、JDBC SSL接続のTNSエントリですノート:
プロンプトで、データベースのユーザー名とパスワードを入力します。
セキュアなJavaキーストアを使用したリソースの作成
パスワードは、セキュアなJavaキーストアに格納できます。Javaキーストアを使用している場合、ユーザー名とパスワードの入力を求められることはありません。また、データをロードするために開発するスクリプトにこれを追加することもできます。
- Javaキーストアの作成。「セキュアな外部JavaキーストアおよびHadoop資格証明コマンドの使用」を参照してください
- Javaキーストアを使用したSQLリソースの作成:
ohsh> create sqlplus resource sql_ssl_cs user=<username> passwordalias=<password alias> provider="<provider_path>" connectid="<tns entry name for the SSL connection>"次に例を示します。ohsh> create sqlplus resource sql_ssl_cs user=oracle passwordalias=oracle_passwd provider="jceks://file/home/oracle/passwd.jceks" connectid="inst1" - JDBC SSL接続でJavaキーストアを使用したSQLリソースの作成:
ohsh> create sqlplus resource sql_ssl_cs user=<username> passwordalias=<password alias> provider="<provider_path>" connectiondir=<SSL wallet directory location> connectid="<tns entry name for the SSL connection>次に例を示します。ohsh> create sqlplus resource sql_ssl_cs user=oracle passwordalias=oracle_passwd provider="jceks://file/home/oracle/passwd.jceks" connectiondir=/home/oracle/ssl_client_wallet connectid="inst1_ssl" - Javaキーストアを使用したJDBCリソースの作成:
ohsh> create jdbc resource jdbc_ssl_cs user=<username> passwordalias=<password alias> provider="<provider_path>" connectid="<tns entry name for the SSL connection>"次に例を示します。ohsh> create jdbc resource jdbc_ssl_cs user=oracle passwordalias=oracle_passwd provider="jceks://file/home/oracle/passwd.jceks" connectid="inst1" - JDBC SSL接続でJavaキーストアを使用したJDBCリソースの作成:
ohsh> create jdbc resource jdbc_ssl_cs user=<username> passwordalias=<password alias> provider="<provider_path>" connectiondir=<SSL wallet directory location> connectid="<tns entry name for the SSL connection>"次に例を示します。ohsh> create jdbc resource jdbc_ssl_cs user=oracle passwordalias=oracle_passwd provider="jceks://file/home/oracle/passwd.jceks" connectiondir=/home/oracle/ssl_client_wallet connectid="inst1_ssl"
ヘルプの表示
OHSHシェルでは、すべてのコマンドに対するオンライン・ヘルプが用意されています。
すべてのOHSHコマンドのリストを表示するには、次のコマンドを実行します。
ohsh> help
特定のコマンドのヘルプを表示するには、helpと入力し、続けて次のコマンドを入力します。
ohsh> help show
次の表に、使用可能なヘルプ・カテゴリを示します。
| helpコマンド | 説明 |
|---|---|
help load |
OracleおよびHadoopの表に対するloadコマンドを示します。 |
help set |
ロード操作のデフォルト値を設定するためのヘルプを表示します。また、特定の設定により影響を受けるロード・メソッドも示します。 |
help show |
デフォルト設定を調査するためのヘルプを表示します。 |
help shell |
シェルライクなコマンドを表示します。 |
help resource |
指定リソースを作成および削除するためのコマンドを表示します。 |
Oracle Database表のロード
OHSHロード・コマンドを使用すると、HDFSまたはHiveからOracle Database表にデータをロードする(OLHまたはOSCHを使用する)ことも、Oracle Database表からHiveにデータをロードする(Copy to Hadoopを使用する)こともできます。
HDFSまたはHiveからOracle Databaseへのロードに使用可能なロード・オプションは次のとおりです。
-
jdbc(パーティション化されていないOracle表のデフォルト): OLH JDBC出力形式を使用してHDFSまたはHiveからロードします -
directpath(パーティション化されたOracle表のデフォルト): OLH OCIダイレクト・パス出力形式を使用してHDFSまたはHiveからロードします -
exttab- OSCHを使用してHDFSまたはHiveからロードします -
etl- OLHとOSCHを併用してHDFSにCSVコンテンツをロードします。OLHは、HDFSファイル内のデリミタ付きコンテンツを抽出してHDFSのデータ・ポンプ・ファイルに変換します。その後、OSCHはHDFSからOracleのターゲット表にデータ・ポンプ・ファイルをロードします。 -
etl deferred- OLHを使用して、HDFSファイル内のデリミタ付きコンテンツをHDFSのデータ・ポンプ・ファイルに変換します。このデータ・ポンプ・ファイルは、今後、OSCHでロードするためにそのまま残されます。ロードを実行するOHSHスクリプトがローカルのサンプル・ディレクトリに生成され、手動で実行することでロードを完了できます
Oracle Database表からHiveへのロードに使用可能なロード・オプションは次のとおりです。
directcopy(デフォルト) - Oracle Big Data SQLのCopy to Hadoop機能を使用してOracle Databaseに接続し、Oracle表からHDFSに格納されているデータ・ポンプ・ファイルにデータをコピーしますstage- Oracle Databaseに接続し、表データおよびメタデータが含まれているデータ・ポンプ形式のファイルを生成します。データベースからHDFSにデータ・ポンプ・ファイルをコピーします。その後、Copy to Hadoop SerDesを使用して、Hiveでデータ・ポンプ・ファイルが読み取れるようにします。
Copy to HadoopにOHSHを使用する方法の詳細は、『Oracle Big Data SQLユーザーズ・ガイド』のOracle Shell for Hadoop LoadersのCopy to Hadoopとの使用に関する項を参照してください。
-
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 18JDBCオプションの場合、並列度はマップ・タスクの数によって決まり、最適な数は自動的に決定されます。ただし、ターゲット表がパーティション化されている場合はダイレクト・パスのほうがJDBCより速いということを覚えておいてください。
-
ロード・バランシング
パフォーマンスは、負荷がリデュース・タスク全体に均等に分散されている場合に最大になります。負荷はサンプリングによって検出されます。サンプリングは、JDBCおよびデフォルト・コピー方式を使用して、負荷についてデフォルトで有効になっています。
OHSHでのデバッグ
次のいくつかのOHSH設定によって、デバッグ情報の利用可能度が制御されます。
-
outputleveloutputlevelは、デフォルトでminimalに設定されます。コマンド失敗時にスタック・トレースを返すには、verboseに設定します。ohsh> set outputlevel verbose -
logbadrecordsohsh> 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のコマンドラインまたはスクリプトで、次のプロパティを設定できます。これらの値は、現在のセッションのみで保持されます。
-
dateformatohsh> set dateformat “yyyy-MM-dd HH:mm:ss”このコマンドの構文は、Java日付書式によって指定されます。
-
rejectlimitデリミタ付きテキスト・ファイルのロードが失敗する前に拒否できる行の数です。
-
fieldterminatorデリミタ付きテキスト・ファイルのロード時のフィールド終端文字です。
-
hadooptnsadminHadoopクラスタ内のOracle TNS adminディレクトリの場所です。
-
hadoopwalletlocationHadoopクラスタ内の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仕様を参照してください。