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

前
 
次
 

2 Oracle Direct Connector for Hadoop Distributed File System

この章では、Oracle Direct Connector for Hadoop Distributed File System (Oracle Direct Connector)を使用して、Hadoop分散ファイルシステム(HDFS)とOracle Databaseとの間のデータ・アクセスを簡単にする方法について説明します。

この章のトピックは、次のとおりです。

Oracle Direct Connectorについて

Oracle Direct Connectorを使用すると、外部表を利用してOracle DatabaseからHDFSに読取りアクセスできます。

外部表は、データベース外のデータの場所を識別するOracle Databaseオブジェクトです。Oracle Databaseは、外部表の作成時に指定されたメタデータを使用してデータにアクセスします。外部表への問合せによって、ユーザーは、データがデータベースの表に格納されている場合と同様に、HDFSに格納されているデータにアクセスできます。外部表は、データベースのロード時にデータをステージングして変換するために使用されることが多くあります。

次のような場合にOracle Direct Connectorを使用します。

Oracle Direct Connectorでは、ORACLE_LOADERアクセス・ドライバが使用されます。


注意:

Oracle Loader for Hadoopによって生成されたデータ・ポンプ・ファイルにアクセスする前に、Oracle Direct Connectorにデータベース・パッチを適用する必要があります。このパッチをダウンロードするには、http://support.oracle.comに移動し、Oracle Bug#13079417を検索します。


関連項目:

  • 外部表の詳細は、『Oracle Database管理者ガイド』を参照してください。

  • ORACLE_LOADERアクセス・ドライバを使用する場合のパフォーマンス・ヒントと制限については、『Oracle Databaseユーティリティ』を参照してください。


HDFS用の外部表の作成

HDFS用の外部表は、SQLのCREATE TABLEコマンドで次のPREPROCESSOR句を使用する以外は、他の外部表と同様に作成します。

PREPROCESSOR "HDFS_BIN_PATH:hdfs_stream"

HDFS_BIN_PATHは、Oracle Direct Connectorがインストールされているbinサブディレクトリの名前です。「Oracle Direct Connectorのインストール」を参照してください。

データ・ポンプ・ファイルにアクセスするには、次のアクセス・パラメータも指定する必要があります。

EXTERNAL VARIABLE DATA

外部表向けの基本的なSQL構文

HDFS用の外部表を作成するための基本的なSQL構文は、次のとおりです。

CREATE TABLE [schema.]table
     (   column datatype, ...
     )
     ORGANIZATION EXTERNAL
     (   
         TYPE ORACLE_LOADER
         DEFAULT DIRECTORY directory
         ACCESS PARAMETERS  
        (   PREPROCESSOR "HDFS_BIN_PATH:hdfs_stream"
            access_parameters...
        )  
     LOCATION (file1,file2...)
     );
schema.table

作成する外部表の名前。

column

表内の列の名前。

datatype

列のデータ型。ORACLE_LOADERでサポートされているものに限ります。データ型変換が自動的に行われます。

directory

Oracle Direct Connectorが、外部表をサポートするファイル(場所ファイル、不正レコート・ファイル、ログ・ファイルなど)を作成するデータベース・ディレクトリの名前。これらのファイルにデータが格納されるディレクトリを使用しないでください。

access_parameters

ORACLE_LOADER access_parameters句の追加従属句(レコードやフィールド書式設定など)。

file1, file2...

HDFS内のデータの場所を識別する場所ファイルの名前。CSVファイルの場合、並列度がファイルの数によって制限されるため、2つ以上のファイル名を指定します。データ・ポンプ・ファイルの場合、データ・ポンプ・ファイルごとに1つの場所ファイルを指定します。

Oracle Direct Connectorで、これらのファイルはデフォルト・ディレクトリに作成されます。ファイルがすでに存在している場合は、上書きされます。

他のタイプの外部表の場合、場所ファイルにデータが含まれますが、Oracle Direct ConnectorはHDFSにデータを保持します。

外部表のテスト

外部表を作成したら、この表に問い合せて、プロセッサ・スクリプトが適切に構成されていることを確認します。

SELECT count(*) FROM external_table;

問合せで行もエラーも返されない場合、続行できます。

外部表の例

例2-1では、SCOTTスキーマにSALES_HDFS_EXT_TABという名前の外部表を作成します。

例2-1 HDFS用の外部表の定義

CREATE TABLE "SCOTT"."SALES_HDFS_EXT_TAB"  
    (  "PROD_ID"          NUMBER(6),
       "CUST_ID"          NUMBER,
       "TIME_ID"          DATE,
       "CHANNEL_ID"       CHAR(1),
       "PROMO_ID"         NUMBER(6), 
       "QUANTITY_SOLD"    NUMBER(3),
       "AMOUNT_SOLD"      NUMBER(10,2) 
    )  
    ORGANIZATION EXTERNAL 
    ( TYPE ORACLE_LOADER   
      DEFAULT DIRECTORY  "SALES_EXT_DIR"   
      ACCESS PARAMETERS  
      (   RECORDS DELIMITED BY NEWLINE
          FIELDS TERMINATED BY ',' 
            (
            "PROD_ID" DECIMAL EXTERNAL,
               .
               .
               .
            "TIME_ID" CHAR DATE_FORMAT TIMESTAMP MASK "...",
               .
               .
               .
            )   
          PREPROCESSOR "HDFS_BIN_PATH:hdfs_stream"    
      )  
      LOCATION ( 'sales1','sale2','sales3')
    );

HDFSデータ・パスの公開

前述の外部表の作成手順では、Oracle Databaseにメタデータを作成しただけです。前述のとおり、場所ファイルには通常データ値が格納されます。ただし、このケースでは、場所ファイルは空です。Oracle Direct ConnectorのExternalTableコマンドライン・ツールを実行すると、HDFS内のデータ・ファイルのUniversal Resource Identifier (URI)が場所ファイルに移入されます。ユーザーが外部表に対して問合せを行うと、Oracle Direct Connectorプリプロセッサは、その情報を使用してHDFSでデータを検索し、データベースに送ります。

ExternalTableコマンド構文

ExternalTableコマンドでは、プロパティの値を使用して場所ファイルに移入します。これらのプロパティ値はXMLドキュメントに指定することも、コマンドで個々に指定することもできます。

ExternalTableコマンドの構文は、次のとおりです。

bin/hadoop jar orahdfs.jar oracle.hadoop.hdfs.exttab.ExternalTable [-conf config_file | -D property=value] -publish [-noexecute]
-conf config_file

場所ファイルへの移入に必要なプロパティを含むXML構成ファイルの名前を識別します。「構成ファイルの作成」を参照してください。

-D property=value

特定のプロパティに値を割り当てます。

-noexecute

実行計画を生成しますが、アクションは実行しません。

構成ファイルの作成

構成ファイルは、次のような非常に単純な構造のXMLドキュメントです。

<?xml version="1.0"?>
 <configuration>
    <property>
      <name>property</name>
      <value>value</value> 
    </property> 
        .
        .
        . 
</configuration>

これらのプロパティの詳細は、「構成プロパティ」を参照してください。

例2-2に、構成ファイルを示します。

例2-2 Oracle Direct Connectorの構成ファイル

<?xml version="1.0"?>
 <configuration>
    <property>
      <name>oracle.hadoop.hdfs.exttab.tableName</name>
      <value>SH.SALES_EXT_DIR</value> 
    </property> 
   <property> 
      <name>oracle.hadoop.hdfs.exttab.datasetPaths</name>
      <value>/data/s1/*.csv,/data/s2/*.csv</value> 
    </property>   
    <property> 
      <name>oracle.hadoop.hdfs.exttab.datasetCompressionCodec</name>                
      <value>org.apache.hadoop.io.compress.DefaultCodec</value> 
    </property>   
    <property>
      <name>oracle.hadoop.hdfs.exttab.connection.url</name>
      <value>
       jdbc:oracle:thin:@example.com:1521/example.example.com
     </value> 
    </property> 
    <property>
      <name>oracle.hadoop.hdfs.exttab.connection.user</name>
      <value>SH</value> 
    </property>      
</configuration>

構成プロパティ

ExternalTableコマンドでHDFS内のデータ・ファイルへのリンクの作成に使用される構成プロパティを、次に示します。次のプロパティは必須です。

oracle.hadoop.hdfs.exttab.connection.url
oracle.hadoop.hdfs.exttab.datasetPaths
oracle.hadoop.hdfs.exttab.tableName

プロパティの説明

oracle.hadoop.hdfs.exttab.connection.url

データベース接続文字列のURL。このプロパティは、他のすべての接続プロパティをオーバーライドします。接続するデータベース・ユーザーは、「Oracle Direct Connectorに対するユーザー・アクセス権の付与」に記載されている権限を持っている必要があります。必須。

ウォレットを使用

Oracle walletを外部パスワード・ストアとして使用する場合、プロパティ値は次の形式である必要があります。

jdbc:oracle:thin:@db_connect_string

db_connect_stringは、ウォレット内の資格証明と完全に一致する必要があります。

次の例では、Oracle Net Servicesの構文を使用します。

jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS_LIST=
   (ADDRESS=(PROTOCOL=TCP)(HOST=myhost)(PORT=1521)))
      (CONNECT_DATA=(SERVICE_NAME=my_db_service_name)))

次の例では、TNSNAMESエントリを使用します。

jdbc:oracle:thin:@my_tns_entry

「oracle.hadoop.hdfs.exttab.connection.wallet_location」も参照してください。

ウォレットを使用しない

Oracle walletを使用しない場合、次のURL接続方法のいずれかを使用します。

  • Thin接続:

    jdbc:oracle:thin:@//myhost:1521/my_db_service_name
    jdbc:oracle:thin:username/password@//myhost:1521/my_db_service_name
    
  • Oracle Net Services:

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

    jdbc:oracle:thin:@myTNSEntryName
    

URLにユーザー名とパスワードが含まれない場合、次のパラメータを設定します。

oracle.hadoop.hdfs.exttab.connection.user

Oracle Databaseユーザー名。

oracle.hadoop.hdfs.exttab.connection.tns_admin

sqlnet.oratnsnames.oraなどのSQL*Net構成ファイルが含まれるディレクトリへのファイル・パス。デフォルトでは、TNS_ADMIN環境変数の値がこのプロパティに使用されます。

データベース接続文字列でTNSエントリ名を使用する場合、このプロパティを定義します。

oracle.hadoop.hdfs.exttab.connection.tnsEntryName

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

oracle.hadoop.hdfs.exttab.datasetCompressionCodec

org.apache.hadoop.io.compress.CompressionCodecインタフェースを実装する圧縮コーデックのクラス名。外部表用のデータを復元するには、コーデックの復元クラスをプリプロセッサ・スクリプトで使用します。このコーデックは、データ・セット全体に適用されます。

データ・セットに圧縮ファイルが含まれる場合、このプロパティを指定します。

oracle.hadoop.hdfs.exttab.datasetPathFilter

org.apache.hadoop.fs.PathFilterインタフェースを実装するパス・フィルタのクラス名。データ・セット内のパスは、このフィルタ・クラスで受け入れられる場合にのみ選択されます。

oracle.hadoop.hdfs.exttab.datasetPaths

完全修飾されたHDFSパスのカンマ区切りのリスト。このパラメータを使用すると、パスの指定に特別なパターン一致文字を使用して、入力を制限できます。表2-1を参照してください。必須。

たとえば、/data/s2/内のすべてのファイルと、/data/s7//data/s8/および/data/s9/内のCSVファイルのみを選択するには、次の式を入力します。

/data/s2/,/data/s[7-9]/*.csv

外部表は、リストされたすべてのファイルおよびリストされたディレクトリ内のすべてのファイルに含まれるデータにアクセスします。これらのファイルで1つのデータ・セットを構成します。

データ・セットには、圧縮ファイルを含めることも、非圧縮ファイルを含めることもできますが、両方を含めることはできません。

表2-1 パターン一致文字

文字 説明

?

任意の1文字に一致します。

*


0文字以上の文字に一致します。

[abc]

文字セット{a, b, c}内の1文字に一致します。

[a-b]

文字の範囲{a...b}内の1文字に一致します。文字aは、b以下である必要があります。

[^a]

文字セットまたは範囲{a}外の1文字に一致します。カレット(^)は、左カッコの直後に付ける必要があります。

\c

文字cの特別な意味を無効にします。円マークは、エスケープ文字です。

{ab\,cd}

文字列セット{ab, cd}内の文字列に一致します。カンマの前にエスケープ文字(\)を付けて、パス区切りとしてのカンマの意味を無効にします。

{ab\,c{de, fh}}

文字列セット{ab, cde, cfh}内の文字列に一致します。カンマの前にエスケープ文字(\)を付けて、パス区切りとしてのカンマの意味を無効にします。


oracle.hadoop.hdfs.exttab.connection.wallet_location

接続情報が格納されるOracle walletへのファイル・パス。Oracle walletを外部パスワード・ストアとして使用する場合、次の追加パラメータを設定します。

URL接続の場合: 

TNS名の場合: 

oracle.hadoop.hdfs.exttab.tableName

スキーマで修飾された次の形式の外部表の名前

schemaName.tableName

Oracle Direct Connector用の外部表の作成の詳細は、「HDFS用の外部表の作成」を参照してください。必須。

HDFS内のデータの問合せ

大量のデータを扱う場合、並列処理が非常に重要です。外部表を使用する場合、必ず次のSQLコマンドを使用して並列問合せを有効にします。

ALTER SESSION ENABLE PARALLEL QUERY;

Oracle Direct Connectorによって作成された外部ファイルからOracle Databaseにデータをロードする前に、並列DDLを有効にします。

ALTER SESSION ENABLE PARALLEL DDL;

既存のデータベース表にデータを挿入する前に、次のSQLコマンドを使用して並列DMLを有効にします。

ALTER SESSION ENABLE PARALLEL DML;

データを挿入する場合、APPENDPQ_DISTRIBUTEなどのヒントによってパフォーマンスが向上します。