ヘッダーをスキップ
Oracle® Big Data Connectorsユーザーズ・ガイド
リリース1 (1.0)
B66474-01
  目次へ移動
目次
索引へ移動
索引

前
 
次
 

5 Oracle R Connector for Hadoop

この章では、ビッグ・データに対するRのサポートについて説明します。次の項目について説明します。

ビッグ・データに対するRのサポート

アナリストは通常PC上でRを使用しますが、PCによって分析に使用できるデータの量と処理能力が制限されます。完全にスケーラブルはソリューションとして、Oracle DatabaseとHadoopを直接利用するようRプラットフォームを拡張することで、この制限はなくなります。アナリストは、大規模な並列処理を使用してOracleデータベースやHDFSに格納されている大量のデータを操作できると同時に、引き続き使い慣れたRユーザー・インタフェースを使用してPC上で作業を行えます。

R用に2つのツールが用意されています。

これらのコンポーネントによって、統計のユーザーは、Oracle DatabaseやHadoopのネイティブ・プログラミング言語を習得することなく、これらの計算インフラストラクチャを使用できます。


注意:

Oracle Databaseへのアクセスは、Oracle R Connector for HadoopとともにOracle R Enterpriseコンポーネントがインストールされ、ロードされている場合にのみ可能です。

Oracle R Connector for Hadoopについて

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について

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 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の関数は、次のカテゴリに大別できます。

スクリプトの実行

hadoop.exec
hadoop.run

hdfs.attach

HDFSの非構造化データファイルからOracle R Connector for Hadoopフレームワークにデータを取り込み、HDFSデータを表すR変数を作成します。デフォルトでは、HDFSのデータファイルは、Oracle R Connector for Hadoopからアクセスできません。ただし、データファイルの名前がわかっている場合、この関数を使用して名前をOracle R Connector for Hadoopネームスペースにアタッチします。

データに列の名前とデータ型を識別するメタデータがない場合、関数がデータをサンプリングしてデータ型(数値または文字列)を導出します。その後、適切なメタデータを使用してファイルを再作成します。

使用方法

hdfs.attach(dfs.name)

引数

dfs.name

HDFS内のファイルの名前。

使用上の注意

この関数を使用して、データ・フレームのアタッチと同様にHDFSファイルをR環境にアタッチします。

戻り値

HDFS内の新規ファイルのオブジェクトID。操作が失敗した場合はNULL。


hdfs.download

HDFSからローカル・ファイルシステムにファイルをコピーします。

使用方法

hdfs.download(
        dfs.id,
        filename, 
        overwrite)

引数

dfs.id

HDFS内のファイルのオブジェクトID。

filename

データのコピー先のローカル・ファイルシステム内のファイルの名前。

overwrite

操作で既存のローカル・ファイルを上書きするかどうかを制御します。filenameを上書きする場合はTRUEに、エラーを表示する場合はFALSEに設定します。

使用上の注意

この関数は、HDFSからファイルをコピーする最も高速で簡単な方法を提供します。複数の部分を1つのファイルにマージする場合以外はデータの変換は行われません。ローカル・ファイルには、HDFSファイルと完全に同じデータが含まれます。

戻り値

ローカル・ファイル名。コピーが失敗した場合はnull。


hdfs.exists

オブジェクトがHDFSに存在することを確認します。

使用方法

hdfs.exists(
        dfs.id)

引数

dfs.id

HDFS内のオブジェクトIDまたはファイル名。

使用上の注意

この関数がTRUEを返す場合、データをアタッチしてhadoop.run関数で使用できます。この関数を使用してHDFS識別子を検証し、データが存在することを確認することもできます。

戻り値

識別子が有効でデータが存在する場合はTRUE。オブジェクトが見つからない場合はFALSE


hdfs.get

HDFSからローカルR環境のdata.frameオブジェクトにデータをコピーします。

使用方法

hdfs.get(
        dfs.id,
        sep)

引数

dfs.id

HDFS内のファイルのオブジェクトID。

sep

ファイル内のフィールドの区切りに使用される記号。

使用上の注意

HDFSファイルがメモリー内Rデータ・フレームに収まるサイズの場合、hdfs.pullのかわりにこの関数を使用してファイルをコピーできます。Sqoopが使用されないことでhdfs.pullでは生じるオーバーヘッドが生じないため、hdfs.get関数の方が高速です。

戻り値

エクスポートされたデータセットを指すローカルR環境のメモリー内データ・フレーム・オブジェクト。操作が失敗した場合はNULL。


hdfs.ls

指定されたパス内のデータを含む全ディレクトリの名前のリスト。

使用方法

hdfs.ls(dfs.path)

引数

dfs.path

現在のデフォルト・パスに対する相対URIパス。(オプション)。

戻り値

HDFS内のオブジェクト名のリスト。指定されたパスが無効な場合はNULL。


hdfs.parts

HDFS内のオブジェクトを構成する部分の数を返します。

使用方法

hdfs.parts(
        dfs.id)

引数

dfs.id

HDFS内のオブジェクト識別子。

使用上の注意

HDFSでは、大規模なファイルを部分に分割します。これは、MapReduceジョブの並列化の基礎となります。HDFSファイルの部分が多いほど、多くのマッパーを並列で実行することができます。

戻り値

オブジェクトを構成する部分の数。オブジェクトがHDFS内に存在しない場合は0。


hdfs.pull

HDFSからOracle Databaseにデータをコピーします。

この操作は、Oracle Databaseによる認証が必要です。「orhc.connect」を参照してください。

使用方法

hdfs.pull(
        dfs.id,
        sep,
        db.name,
        overwrite,
        driver)

引数

dfs.id

HDFS内のファイル名。

sep

ファイル内のフィールドの区切りに使用される記号。

db.name

Oracle Database内の表の名前。(オプション)

overwrite

db.nameで同じ名前の表が上書きされるかどうかを制御します。表を上書きする場合はTRUEに、エラーを表示する場合はFALSEに設定します。

driver

データのコピーに使用されるドライバを識別します。デフォルトでは、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ユーザーズ・ガイド』を参照してください。


hdfs.push

Oracle DatabaseからHDFSにデータをコピーします。

この操作は、Oracle Databaseによる認証が必要です。「orhc.connect」を参照してください。

使用方法

hdfs.push(
        x,
        dfs.name,
        overwrite,
        driver)

引数

x

送出されるOracle Database内のデータを含むore.frameオブジェクト。

dfs.name

HDFS内のオブジェクトの一意の名前。

overwrite

dfs.nameで同じ名前のオブジェクトを上書きする場合はTRUE。エラーを表示する場合はFALSE

driver

データのコピーに使用されるドライバ(オプション)。デフォルトでは、sqoopに設定されます。

使用上の注意

この操作は同期的であるため、大規模なデータセットをコピーすると、R環境がハングしているように見えることがあります。コピーが完了すると、Rが使用できるようになります。

戻り値

エクスポートされたデータセットを指すHDFSオブジェクトID。操作が失敗した場合はNULL

関連項目

ore.frameオブジェクトの詳細は、『Oracle R Enterpriseユーザーズ・ガイド』を参照してください。


hdfs.put

Rのdata.frameオブジェクトからHDFSにデータをコピーします。列名、データ型およびその他の属性は、メタデータとしてHDFSに格納されます。

使用方法

hdfs.put(
        x,
        dfs.name, 
        overwrite)

引数

x

HDFSにコピーされるローカルR環境内のdata.frameオブジェクト。

dfs.name

新規ファイルの一意の名前。

overwrite

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.pwd

HDFS内の現在の作業ディレクトリを識別します。

使用方法

hdfs.pwd()

戻り値

現在の作業ディレクトリ。HDFSに接続できない場合はNULL。


hdfs.rm

HDFSからファイルを削除します。

使用方法

hdfs.rm(dfs.id)

引数

dfs.id

削除するHDFS内のファイルのオブジェクトID。

使用上の注意

この操作の後、このデータを指すHadoop内のすべてのオブジェクト識別子が無効になります。

戻り値

データが削除された場合はTRUE。操作が失敗した場合はFALSE


hdfs.rmdir

現在の作業ディレクトリに対するHDFS内のサブディレクトリを削除します。

使用方法

hdfs.rmdir(
        dfs.name)

引数

dfs.name

削除するHDFS内のディレクトリの名前。

使用上の注意

この関数は、ディレクトリに格納されているすべてのデータ・オブジェクトを削除します。これによって、HDFS内のすべての関連するオブジェクト識別子が無効になります。

戻り値

ディレクトリが正常に削除された場合はTRUE。操作が失敗した場合はFALSE


hdfs.sample

HadoopファイルからRメモリー内オブジェクトにデータのランダム・サンプルをコピーします。この関数を使用して、最終的にはHadoopクラスタ上のHDFSデータセット全体で実行するR計算の開発用に、元のHDFSデータの小規模なサンプルをコピーします。

使用方法

hdfs.sample(
        dfs.id,
        lines,
        sep)

引数

dfs.id

データが配置されているHDFSオブジェクトID。

lines

サンプルとして返す行の数。

sep

Hadoopファイル内のフィールドの区切りに使用される記号。カンマ(,)がデフォルトのデリミタです。

使用上の注意

R環境でデータが生成されると、列名とデータ型を含むすべてのメタデータが抽出され、すべての属性がリストアされます。そうではない場合、汎用の属性名(val1val2など)が割り当てられます。

戻り値

サンプル・データセットを含むdata.frameオブジェクト。操作が失敗した場合はNULL。


hdfs.size

HDFS内のオブジェクトのサイズ(バイト)を返します。

使用方法

hdfs.size(
        dfs.id)

引数

dfs.id

HDFS内のオブジェクト識別子。

使用上の注意

このインタフェースを使用して、たとえば、HDFSファイル全体の内容をローカルRメモリーまたはローカル・ファイルに取り込めるか、またはR計算のプロトタイプを作成し、データのサンプリングのみを行えるかを判断します。

戻り値

オブジェクトのサイズ(バイト)。オブジェクトがHDFS内に存在しない場合は0。


hdfs.upload

ローカル・ファイルシステムからHDFSにファイルをコピーします。

使用方法

hdfs.upload(
        filename,
        dfs.name, 
        overwrite,
        split.size,
        header)

引数

filename

ローカル・ファイル・システム内のファイルの名前。

dfs.name

HDFS内の新規ディレクトリの名前。

overwrite

db.nameで同じ名前のディレクトリが上書きされるかどうかを制御します。ディレクトリを上書きする場合はTRUEに、エラーを表示する場合はFALSEに設定します。

split.size

Hadoopファイルの各部分の最大バイト数。

header

ローカル・ファイルの最初の行が、列名を含むヘッダーかどうかを示します。ヘッダーがある場合はTRUEに、ない場合はFALSEに設定します。

ヘッダーによって、MapReduce Rスクリプト内で列名を取り出し、データ・フィールドを索引ではなく、名前で参照できます。

使用上の注意

この関数は、HDFSにファイルをコピーする最も高速で簡単な方法を提供します。ファイルがsplit.sizeより大きい場合、Hadoopによって2つ以上の部分に分割されます。新規Hadoopファイルは一意のオブジェクトIDを取得し、各部分にはpart-0000xという名前が付けられます。Hadoopによって、ファイルのメタデータが自動的に作成されます。

戻り値

ロードされたデータのHDFSオブジェクトID。コピーが失敗した場合はNULL

関連項目

hdfs.download
hdfs.get
hdfs.put

hadoop.exec

Hadoopエンジンを起動し、実行用にマッパー、リデューサおよびコンバイナR関数を送信します。まず、データをHDFSにロードする必要があります。

使用方法

hadoop.exec(
        dfs.id, 
        mapper, 
        reducer, 
        combiner, 
        export)

引数

dfs.id

HDFS内のオブジェクト識別子。

mapper

R言語で記述されたマッパー関数の名前。

reducer

R言語で記述されたリデューサ関数の名前(オプション)。

combiner

R言語で記述されたコンバイナ関数の名前(オプション)。

export

マッパー、リデューサまたはコンバイナ関数によって参照されている、現在のR環境からエクスポートされるRオブジェクトの名前。

使用上の注意

この関数では、hadoop.runよりもデータ・フローを制御できます。複数のマッパーとリデューサをパイプラインでつなぐ場合、結果がHDFS内に保持されるため、hadoop.execを使用する必要があります。結果はHDFSに格納されます。

戻り値

HDFS内のデータ・オブジェクト識別子。


hadoop.run

Hadoopエンジンを起動し、実行用にマッパー、リデューサおよびコンバイナR関数を送信します。データがまだHDFSに格納されていない場合、hadoop.runは、まずデータをHDFSにコピーします。

使用方法

hadoop.run(
        data, 
        mapper, 
        reducer, 
        combiner, 
        export)

引数

data

データ・オブジェクト: データ・フレーム、Oracle R EnterpriseフレームまたはHDFSファイル記述子。

mapper

マッパー関数の名前。

reducer

リデューサ関数の名前(オプション)。

combiner

コンバイナ関数の名前(オプション)。

export

エクスポートされるRオブジェクト。

使用上の注意

hadoop.run関数は、HDFSから入力データのソースへ結果を返します。たとえば、HDFS入力データの結果はHDFSに保持され、ore.frame入力データの結果はOracle Databaseに取り込まれます。

戻り値

入力データと同じ形式のオブジェクト。


orhc.connect

Oracleデータベースへの接続を確立します。

使用方法

orhc.connect(
        host,
        user,
        passwd,
        sid,
        port, 
        secure)

引数

host

Oracle Databaseが稼働しているサーバーのホスト名またはIPアドレス。

user

データベース・ユーザー名。

passwd

データベース・ユーザーのパスワード。

sid

Oracle DatabaseインスタンスのシステムID (SID)。

port

Oracleデータベース・リスナーのポート番号。デフォルト値は1521です。

secure

Oracle Databaseに対する認証の設定:

  • TRUE: 接続のたびにデータベース・パスワードを入力する必要があります。(デフォルト)

  • FALSE: データベース・パスワードを一度入力します。メモリー内で暗号化され、データベース接続が必要になるたびに使用されます。

使用上の注意

この関数は、アナリストがOracleデータベースに格納されているデータにアクセスする必要がある場合、または結果をデータベースに返す必要がある場合に使用します。

Oracle R Enterprise用Oracle Database Advanced AnalyticsライセンスおよびOracle Databaseへの接続を使用して、データベース表に格納されているデータを直接操作したり、処理されたデータ・フレームをHadoopのR計算に渡すことができます。

戻り値

正常で有効な接続の場合はTRUE。接続の試行が失敗した場合はFALSE

関連項目

orhc.disconnect

orhc.disconnect

ローカルRセッションをOracle Databaseから切断します。

使用方法

orhc.disconnect()

使用上の注意

Oracle Databaseに接続せずに機能するorhc関数はありません。

この関数の戻り値を用い、orhc.reconnectを使用して接続を再確立できます。

戻り値

Oracle Database接続オブジェクト。Oracle Databaseから接続を拒否された場合はNULL

関連項目

orhc.connect
orhc.reconnect

orhc.reconnect

これより前にorhc.disconnectによって返された資格証明を使用してOracle Databaseに再接続します。

使用方法

orhc.reconnect(dbcon)

引数

dbcon

これより前にorhc.disconnectによって返された資格証明。

使用上の注意

Oracle R Connector for Hadoopでは、すべての資格証明と接続属性を保持し、以前に切断されたセッションへの再接続を可能にします。元の接続のorhc.connectセキュリティ設定によっては、パスワードを求められる場合があります。再接続後、Oracle DatabaseとHDFSとの間のデータ転送操作を続けることができます。

再接続では様々な接続性チェックが必要ないため、セッションの再接続は、新規の接続を開くより高速です。

戻り値

正常に再確立されて有効な接続の場合はTRUE。試行が失敗した場合はFALSE

関連項目

orhc.connect
orhc.disconnect

orhc.which

Oracle Databaseへの現在の接続に関する情報(認証の資格証明以外)を表示します。

使用方法

orhc.which()

戻り値

なし

使用上の注意

この関数は、分析タスク中に複数のOracleデータベースに接続する場合に役立ちます。