この章では、ビッグ・データに対するRのサポートについて説明します。次の項目について説明します。
関連項目: 『Oracle R Enterpriseユーザーズ・ガイド』 |
アナリストは通常PC上でRを使用しますが、PCによって分析に使用できるデータの量と処理能力が制限されます。完全にスケーラブルはソリューションとして、Oracle DatabaseとHadoopを直接利用するようRプラットフォームを拡張することで、この制限はなくなります。アナリストは、大規模な並列処理を使用してOracleデータベースやHDFSに格納されている大量のデータを操作できると同時に、引き続き使い慣れたRユーザー・インタフェースを使用してPC上で作業を行えます。
R用に2つのツールが用意されています。
Oracle R Connector for Hadoop
Oracle R Enterprise
これらのコンポーネントによって、統計のユーザーは、Oracle DatabaseやHadoopのネイティブ・プログラミング言語を習得することなく、これらの計算インフラストラクチャを使用できます。
注意: Oracle Databaseへのアクセスは、Oracle R Connector for HadoopとともにOracle R Enterpriseコンポーネントがインストールされ、ロードされている場合にのみ可能です。 |
Oracle R Connector for Hadoopは、ローカルR環境、Oracle Database、Hadoop間のインタフェースを提供するRパッケージです。単純なR関数を使用して、Rメモリー、ローカル・ファイルシステム、Oracle Database、HDFS間でデータをコピーできます。Hadoop MapReduceジョブとして実行し、それらの場所に結果を返すよう、Rプログラムをスケジュールできます。
Oracle R Connector for Hadoopでは、次のAPIを使用して、RクライアントからHadoopにAPIアクセスできます。
hdfs
: HDFSへのインタフェースを提供します。
orhc
: ローカルRインスタンスとOracle Databaseとの間のインタフェースを提供します。
hadoop
: Hadoop MapReduceへのインタフェースを提供します。
関数は、この章にアルファベット順で示します。
Oracle R Enterpriseを使用すると、ユーザーは、Rの言語と環境を使用してOracle Databaseに格納されているデータに対して統計分析を行うことができます。Oracle R Enterpriseには3つのコンポーネントがあります。
透過層: RユーザーがR言語構文を使用してOracle Database表やビューと直接対話できるようにするパッケージの集まり。
統計エンジン: よく使用される統計ライブラリに対応する統計関数とプロシージャの集まり。これらのパッケージはOracle Databaseで実行されます。
SQL拡張: 自動処理を使用してOracle DatabaseでのRスクリプトの実行をサポートするSQL関数の集まり。
ユーザーは、Oracle Databaseというセキュアな環境に結果を保持し、データを分析したり、デプロイ用のRスクリプトを開発できます。
Oracle R Enterpriseは、Oracle Database Advanced Analyticsオプションに含まれています。
関連項目: 『Oracle R Enterpriseユーザーズ・ガイド』 |
次のシナリオで、Oracle R Connector for HadoopとOracle R Enterpriseを使用するケースを確認してください。
アクセス権を持つHDFS上のファイルを検索し、そのファイル内のデータに対して実行するR計算をスケジュールできます。Oracle R Connector for Hadoopには、このような処理を行うためのAPIが含まれています。また、ローカル・ファイルシステムのテキスト・ファイルに格納されているデータを計算用にHDFSにアップロードし、RスクリプトをHadoopクラスタで実行するようスケジュールして、結果をPC上のローカル・ファイルにダウンロードできます。
Oracle Database Advanced Analyticsオプションを使用すると、Rインタフェースを開いてOracle Databaseに接続し、データベースの権限に基づいて使用可能になる表とビューを操作できます。Oracle R Enterpriseを使用して、行の除外、導出された列の追加、新しい列の投影および視覚的で統計的な分析を行うことができます。Rで記述されたCPU負荷の高い計算の場合、MapReduceジョブをHadoopにデプロイします。計算には、Oracle DatabaseまたはHadoop分散ファイルシステム(HDFS)に格納されているデータを使用できます。計算の結果をOracle DatabaseやRコンソールに返し、視覚化したり、追加処理を行うことができます。
Oracle R Connector for Hadoopでは、Sqoopユーティリティを起動してOracle Databaseに接続し、データの抽出または結果の格納を行います。Sqoopは、HDFSまたはHiveとOracle Databaseなどの構造化データベースとの間でデータのインポートとエクスポートを行うHadoopのコマンドライン・ユーティリティです。Sqoopという名前は、"SQL to Hadoop"に由来します。
Oracle R Connector for Hadoopでのデータベース・ユーザー・パスワードの格納方法とSqoopへの送信方法について、次に説明します。
Oracle R Connector for Hadoopでは、毎回パスワードを再入力する必要のないモードでユーザーがデータベース接続を確立した場合にのみユーザー・パスワードを格納します。パスワードは暗号化されてメモリーに格納されます。「orhc.connect」を参照してください。
Oracle R Connector for Hadoopでは、Sqoop用の構成ファイルを生成し、Sqoopのローカルでの起動に使用します。ファイルには、ユーザーへの要求または暗号化されたメモリー内表現から取得されたユーザーのデータベース・パスワードが含まれます。ファイルは、ローカル・ユーザー・アクセス権限のみ持ちます。ファイルが作成され、権限が明示的に設定された後、ファイルが書込み用に開かれ、データが挿入されます。
Sqoopでは、構成ファイルを使用して特定のデータベース・ジョブ用にカスタムJARファイルを動的に生成し、JARファイルをHadoopクライアント・ソフトウェアに渡します。パスワードは、コンパイルされたJARファイル内に格納されます。プレーン・テキストには格納されません。
JARファイルは、ネットワーク接続を介してHadoopクラスタに転送されます。ネットワーク接続と転送プロトコルは、Hadoopに固有です(ポート5900など)。
構成ファイルは、SqoopでJARファイルのコンパイルが終了し、Hadoopジョブが起動されたら、削除されます。
hdfs.attach hdfs.download hdfs.exists hdfs.get hdfs.ls hdfs.parts hdfs.pull hdfs.push hdfs.put hdfs.pwd hdfs.rm hdfs.rmdir hdfs.sample hdfs.size hdfs.upload hadoop.exec hadoop.run orhc.connect orhc.disconnect orhc.reconnect orhc.which
OHRCの関数は、次のカテゴリに大別できます。
hdfs.attach hdfs.exists hdfs.ls hdfs.parts hdfs.pwd hdfs.rm hdfs.rmdir hdfs.sample hdfs.size
hadoop.exec hadoop.run
HDFSの非構造化データファイルからOracle R Connector for Hadoopフレームワークにデータを取り込み、HDFSデータを表すR変数を作成します。デフォルトでは、HDFSのデータファイルは、Oracle R Connector for Hadoopからアクセスできません。ただし、データファイルの名前がわかっている場合、この関数を使用して名前をOracle R Connector for Hadoopネームスペースにアタッチします。
データに列の名前とデータ型を識別するメタデータがない場合、関数がデータをサンプリングしてデータ型(数値または文字列)を導出します。その後、適切なメタデータを使用してファイルを再作成します。
使用方法
hdfs.attach(dfs.name)
引数
HDFS内のファイルの名前。
使用上の注意
この関数を使用して、データ・フレームのアタッチと同様にHDFSファイルをR環境にアタッチします。
戻り値
HDFS内の新規ファイルのオブジェクトID。操作が失敗した場合はNULL。
HDFSからローカル・ファイルシステムにファイルをコピーします。
使用方法
hdfs.download( dfs.id, filename, overwrite)
引数
HDFS内のファイルのオブジェクトID。
データのコピー先のローカル・ファイルシステム内のファイルの名前。
操作で既存のローカル・ファイルを上書きするかどうかを制御します。filename
を上書きする場合はTRUE
に、エラーを表示する場合はFALSE
に設定します。
使用上の注意
この関数は、HDFSからファイルをコピーする最も高速で簡単な方法を提供します。複数の部分を1つのファイルにマージする場合以外はデータの変換は行われません。ローカル・ファイルには、HDFSファイルと完全に同じデータが含まれます。
戻り値
ローカル・ファイル名。コピーが失敗した場合はnull。
オブジェクトがHDFSに存在することを確認します。
使用方法
hdfs.exists( dfs.id)
引数
HDFS内のオブジェクトIDまたはファイル名。
使用上の注意
この関数がTRUE
を返す場合、データをアタッチしてhadoop.run
関数で使用できます。この関数を使用してHDFS識別子を検証し、データが存在することを確認することもできます。
戻り値
識別子が有効でデータが存在する場合はTRUE
。オブジェクトが見つからない場合はFALSE
。
HDFSからローカルR環境のdata.frame
オブジェクトにデータをコピーします。
使用方法
hdfs.get( dfs.id, sep)
引数
HDFS内のファイルのオブジェクトID。
ファイル内のフィールドの区切りに使用される記号。
使用上の注意
HDFSファイルがメモリー内Rデータ・フレームに収まるサイズの場合、hdfs.pull
のかわりにこの関数を使用してファイルをコピーできます。Sqoopが使用されないことでhdfs.pull
では生じるオーバーヘッドが生じないため、hdfs.get
関数の方が高速です。
戻り値
エクスポートされたデータセットを指すローカルR環境のメモリー内データ・フレーム・オブジェクト。操作が失敗した場合はNULL。
指定されたパス内のデータを含む全ディレクトリの名前のリスト。
使用方法
hdfs.ls(dfs.path)
引数
現在のデフォルト・パスに対する相対URIパス。(オプション)。
戻り値
HDFS内のオブジェクト名のリスト。指定されたパスが無効な場合はNULL。
HDFS内のオブジェクトを構成する部分の数を返します。
使用方法
hdfs.parts( dfs.id)
引数
HDFS内のオブジェクト識別子。
使用上の注意
HDFSでは、大規模なファイルを部分に分割します。これは、MapReduceジョブの並列化の基礎となります。HDFSファイルの部分が多いほど、多くのマッパーを並列で実行することができます。
戻り値
オブジェクトを構成する部分の数。オブジェクトがHDFS内に存在しない場合は0。
HDFSからOracle Databaseにデータをコピーします。
この操作は、Oracle Databaseによる認証が必要です。「orhc.connect」
を参照してください。
使用方法
hdfs.pull( dfs.id, sep, db.name, overwrite, driver)
引数
HDFS内のファイル名。
ファイル内のフィールドの区切りに使用される記号。
Oracle Database内の表の名前。(オプション)
db.name
で同じ名前の表が上書きされるかどうかを制御します。表を上書きする場合はTRUE
に、エラーを表示する場合はFALSE
に設定します。
データのコピーに使用されるドライバを識別します。デフォルトでは、sqoop
に設定されます。
使用上の注意
この操作は同期的であるため、大規模なデータセットをコピーすると、R環境がハングしているように見えることがあります。コピーが完了すると、Rが使用できるようになります。
大量のデータをOracle Databaseにコピーする場合、Oracle Loader for Hadoopを使用することを検討してください。Oracle Database Advanced Analyticsオプションでは、Oracle R Enterpriseを使用してOracleデータベース内のデータを分析できます。
戻り値
HDFSからロードされたデータを含むデータベース表を指すore.frame
オブジェクト。操作が失敗した場合はNULL。
関連項目
ore.frame
オブジェクトの詳細は、『Oracle R Enterpriseユーザーズ・ガイド』を参照してください。
Oracle DatabaseからHDFSにデータをコピーします。
この操作は、Oracle Databaseによる認証が必要です。「orhc.connect」
を参照してください。
使用方法
hdfs.push( x, dfs.name, overwrite, driver)
引数
送出されるOracle Database内のデータを含むore.frame
オブジェクト。
HDFS内のオブジェクトの一意の名前。
dfs.name
で同じ名前のオブジェクトを上書きする場合はTRUE
。エラーを表示する場合はFALSE
。
データのコピーに使用されるドライバ(オプション)。デフォルトでは、sqoop
に設定されます。
使用上の注意
この操作は同期的であるため、大規模なデータセットをコピーすると、R環境がハングしているように見えることがあります。コピーが完了すると、Rが使用できるようになります。
戻り値
エクスポートされたデータセットを指すHDFSオブジェクトID。操作が失敗した場合はNULL
。
関連項目
ore.frame
オブジェクトの詳細は、『Oracle R Enterpriseユーザーズ・ガイド』を参照してください。
Rのdata.frame
オブジェクトからHDFSにデータをコピーします。列名、データ型およびその他の属性は、メタデータとしてHDFSに格納されます。
使用方法
hdfs.put( x, dfs.name, overwrite)
引数
HDFSにコピーされるローカルR環境内のdata.frame
オブジェクト。
新規ファイルの一意の名前。
dfs.name
で同じ名前のファイルが上書きされるかどうかを制御します。ファイルを上書きする場合はTRUE
に、エラーを表示する場合はFALSE
に設定します。
使用上の注意
この関数を使用して、R環境からHDFSファイルに制御パラメータを転送したり、Hadoop R計算に関連するデータを検索できます。
hdfs.push
のかわりにhdfs.put
を使用して、データベース表などのore.frame
オブジェクトからHDFSにデータをコピーすることもできます。表はRメモリーに収まるサイズである必要があります。そうでない場合、関数は失敗します。hdfs.put
関数は、まず、すべての表データをRメモリーに読み込み、その後、HDFSに転送します。小規模な表の場合、Sqoopが使用されないことでhdfs.push
では生じるオーバーヘッドが生じないため、この関数の方が高速です。
戻り値
新規ファイルのオブジェクトID。操作が失敗した場合はNULL。
HDFSからファイルを削除します。
使用方法
hdfs.rm(dfs.id)
引数
削除するHDFS内のファイルのオブジェクトID。
使用上の注意
この操作の後、このデータを指すHadoop内のすべてのオブジェクト識別子が無効になります。
戻り値
データが削除された場合はTRUE
。操作が失敗した場合はFALSE
。
現在の作業ディレクトリに対するHDFS内のサブディレクトリを削除します。
使用方法
hdfs.rmdir( dfs.name)
引数
削除するHDFS内のディレクトリの名前。
使用上の注意
この関数は、ディレクトリに格納されているすべてのデータ・オブジェクトを削除します。これによって、HDFS内のすべての関連するオブジェクト識別子が無効になります。
戻り値
ディレクトリが正常に削除された場合はTRUE
。操作が失敗した場合はFALSE
。
HadoopファイルからRメモリー内オブジェクトにデータのランダム・サンプルをコピーします。この関数を使用して、最終的にはHadoopクラスタ上のHDFSデータセット全体で実行するR計算の開発用に、元のHDFSデータの小規模なサンプルをコピーします。
使用方法
hdfs.sample( dfs.id, lines, sep)
引数
データが配置されているHDFSオブジェクトID。
サンプルとして返す行の数。
Hadoopファイル内のフィールドの区切りに使用される記号。カンマ(,
)がデフォルトのデリミタです。
使用上の注意
R環境でデータが生成されると、列名とデータ型を含むすべてのメタデータが抽出され、すべての属性がリストアされます。そうではない場合、汎用の属性名(val1
、val2
など)が割り当てられます。
戻り値
サンプル・データセットを含むdata.frame
オブジェクト。操作が失敗した場合はNULL。
HDFS内のオブジェクトのサイズ(バイト)を返します。
使用方法
hdfs.size( dfs.id)
引数
HDFS内のオブジェクト識別子。
使用上の注意
このインタフェースを使用して、たとえば、HDFSファイル全体の内容をローカルRメモリーまたはローカル・ファイルに取り込めるか、またはR計算のプロトタイプを作成し、データのサンプリングのみを行えるかを判断します。
戻り値
オブジェクトのサイズ(バイト)。オブジェクトがHDFS内に存在しない場合は0。
ローカル・ファイルシステムからHDFSにファイルをコピーします。
使用方法
hdfs.upload( filename, dfs.name, overwrite, split.size, header)
引数
ローカル・ファイル・システム内のファイルの名前。
HDFS内の新規ディレクトリの名前。
db.name
で同じ名前のディレクトリが上書きされるかどうかを制御します。ディレクトリを上書きする場合はTRUE
に、エラーを表示する場合はFALSE
に設定します。
Hadoopファイルの各部分の最大バイト数。
ローカル・ファイルの最初の行が、列名を含むヘッダーかどうかを示します。ヘッダーがある場合はTRUE
に、ない場合はFALSE
に設定します。
ヘッダーによって、MapReduce Rスクリプト内で列名を取り出し、データ・フィールドを索引ではなく、名前で参照できます。
使用上の注意
この関数は、HDFSにファイルをコピーする最も高速で簡単な方法を提供します。ファイルがsplit.size
より大きい場合、Hadoopによって2つ以上の部分に分割されます。新規Hadoopファイルは一意のオブジェクトIDを取得し、各部分にはpart-0000
x
という名前が付けられます。Hadoopによって、ファイルのメタデータが自動的に作成されます。
戻り値
ロードされたデータのHDFSオブジェクトID。コピーが失敗した場合はNULL
。
関連項目
hdfs.download hdfs.get hdfs.put
Hadoopエンジンを起動し、実行用にマッパー、リデューサおよびコンバイナR関数を送信します。まず、データをHDFSにロードする必要があります。
使用方法
hadoop.exec( dfs.id, mapper, reducer, combiner, export)
引数
HDFS内のオブジェクト識別子。
R言語で記述されたマッパー関数の名前。
R言語で記述されたリデューサ関数の名前(オプション)。
R言語で記述されたコンバイナ関数の名前(オプション)。
マッパー、リデューサまたはコンバイナ関数によって参照されている、現在のR環境からエクスポートされるRオブジェクトの名前。
使用上の注意
この関数では、hadoop.runよりもデータ・フローを制御できます。複数のマッパーとリデューサをパイプラインでつなぐ場合、結果がHDFS内に保持されるため、hadoop.exec
を使用する必要があります。結果はHDFSに格納されます。
戻り値
HDFS内のデータ・オブジェクト識別子。
Hadoopエンジンを起動し、実行用にマッパー、リデューサおよびコンバイナR関数を送信します。データがまだHDFSに格納されていない場合、hadoop.run
は、まずデータをHDFSにコピーします。
使用方法
hadoop.run( data, mapper, reducer, combiner, export)
引数
データ・オブジェクト: データ・フレーム、Oracle R EnterpriseフレームまたはHDFSファイル記述子。
マッパー関数の名前。
リデューサ関数の名前(オプション)。
コンバイナ関数の名前(オプション)。
エクスポートされるRオブジェクト。
使用上の注意
hadoop.run
関数は、HDFSから入力データのソースへ結果を返します。たとえば、HDFS入力データの結果はHDFSに保持され、ore.frame
入力データの結果はOracle Databaseに取り込まれます。
戻り値
入力データと同じ形式のオブジェクト。
Oracleデータベースへの接続を確立します。
使用方法
orhc.connect( host, user, passwd, sid, port, secure)
引数
Oracle Databaseが稼働しているサーバーのホスト名またはIPアドレス。
データベース・ユーザー名。
データベース・ユーザーのパスワード。
Oracle DatabaseインスタンスのシステムID (SID)。
Oracleデータベース・リスナーのポート番号。デフォルト値は1521です。
Oracle Databaseに対する認証の設定:
TRUE
: 接続のたびにデータベース・パスワードを入力する必要があります。(デフォルト)
FALSE
: データベース・パスワードを一度入力します。メモリー内で暗号化され、データベース接続が必要になるたびに使用されます。
使用上の注意
この関数は、アナリストがOracleデータベースに格納されているデータにアクセスする必要がある場合、または結果をデータベースに返す必要がある場合に使用します。
Oracle R Enterprise用Oracle Database Advanced AnalyticsライセンスおよびOracle Databaseへの接続を使用して、データベース表に格納されているデータを直接操作したり、処理されたデータ・フレームをHadoopのR計算に渡すことができます。
戻り値
正常で有効な接続の場合はTRUE
。接続の試行が失敗した場合はFALSE
。
関連項目
orhc.disconnect
ローカルRセッションをOracle Databaseから切断します。
使用方法
orhc.disconnect()
使用上の注意
Oracle Databaseに接続せずに機能するorhc
関数はありません。
この関数の戻り値を用い、orhc.reconnect
を使用して接続を再確立できます。
戻り値
Oracle Database接続オブジェクト。Oracle Databaseから接続を拒否された場合はNULL
。
関連項目
orhc.connect orhc.reconnect
これより前にorhc.disconnect
によって返された資格証明を使用してOracle Databaseに再接続します。
使用方法
orhc.reconnect(dbcon)
引数
これより前にorhc.disconnectによって返された資格証明。
使用上の注意
Oracle R Connector for Hadoopでは、すべての資格証明と接続属性を保持し、以前に切断されたセッションへの再接続を可能にします。元の接続のorhc.connect
セキュリティ設定によっては、パスワードを求められる場合があります。再接続後、Oracle DatabaseとHDFSとの間のデータ転送操作を続けることができます。
再接続では様々な接続性チェックが必要ないため、セッションの再接続は、新規の接続を開くより高速です。
戻り値
正常に再確立されて有効な接続の場合はTRUE
。試行が失敗した場合はFALSE
。
関連項目
orhc.connect orhc.disconnect