主コンテンツへ
Oracle® Big Data SQLユーザーズ・ガイド
リリース3 (3.0.1)
E67097-01
目次へ移動
目次
索引へ移動
索引

前
次

4 HadoopへのOracle表のコピー

この章では、Oracleデータベースの表をHadoopにコピーするためにCopy to Hadoopを使用する方法について説明します。内容は次のとおりです。

4.1 Copy to Hadoopとは

Oracle Big Data SQLには、Oracle Copy to Hadoopユーティリティが含まれています。このユーティリティを使用すると、Oracleデータの識別とHadoop Distributed File Systemへのコピーが簡単になります。これには、コマンドライン・インタフェースまたはOracle SQL Developerを介してアクセスできます。Copy to HadoopによってHadoopクラスタにエクスポートされたデータは、Oracle Data Pump形式で格納されます。この形式は、次のようにBig Data SQLを介した問合せを最適化します。

  • データはOracleデータ型として格納される – データ型変換がなくなる

  • データが直接問い合される – Java SerDesに関連するオーバーヘッドを必要としない

表からデータ・ポンプ形式ファイルを生成してファイルをHDFSにコピーした後、Apache Hiveを使用してデータを問い合せることができます。Hiveは、Oracle Databaseにアクセスせずにローカルにデータを処理できます。Oracle表が変更されると、Hadoopのコピーをリフレッシュできます。Copy to Hadoopは、比較的静的であり、頻繁にリフレッシュする必要がないOracle表に主に役立ちます。

Copy to Hadoopは、Oracle Big Data SQLでライセンス供与されます。ユーティリティを使用するには、Oracle Big Data SQLのライセンスが必要です。

4.2 Copy to Hadoopの使用の概要

Copy to Hadoopを使用するには、次の手順を実行します。

  1. システムが前提条件を満たしていることを確認し、必要なソフトウェアがHadoopクラスタ(Oracle Big Data Applianceまたは別のHadoopシステム)およびOracle Databaseサーバー(Oracle Exadata Database Machineなど)の両方にインストールされていることを確認します。

    「Copy to Hadoopのインストール」を参照してください。

  2. Oracle Databaseサーバーで、Oracle Databaseに接続し、表データおよびメタデータを含むデータ・ポンプ形式ファイルを生成します。
  3. ファイルをHadoopクラスタ上のHDFSにコピーします。

    「HDFSへのファイルのコピー」を参照してください。

  4. Apache Hiveに接続して、ファイルから外部表を作成します。

    「Hive表の作成」を参照してください。

  5. 他のHive表と同じように、このHive表に問い合せます。

4.3 Copy to Hadoopのインストール

Oracle Big Data SQLがインストールされている場合は、Hadoopクラスタに接続しているOracle Databaseサーバー上でCopy to Hadoopを使用できます。

4.3.1 Copy to Hadoopの前提条件

ネットワーク接続、サポートされるOracle Databaseレベルおよび他の要件については、「Oracle Big Data SQLのインストール」で、ご使用のプラットフォームにOracle Big Data SQLをインストールするための一般的な要件を確認してください。

4.3.2 Oracle Big Data Appliance/Oracle Exadata Database Machine環境でのCopy to Hadoopのインストール

Oracle Big Data SQLがインストールされている場合は、Oracle Big Data Applianceに接続しているOracle Exadata Database Machine上でCopy to Hadoopを使用できます。

4.3.2.1 Oracle Big Data ApplianceでのCopy to Hadoopのインストール

Copy to Hadoopは、Oracle Big Data Appliance上のインストール・オプションであるOracle Big Data SQLのコンポーネントです。ソフトウェアの初期インストール時またはその後で、Oracle Big Data SQLによってサービスを有効化および無効化するための標準的な方法を使用して有効化できます。「インストールの実行」を参照してください。

4.3.2.2 Oracle Exadata Database MachineでのCopy to Hadoopのインストール

Copy to Hadoopは、Oracle Exadata Database MachineのHadoopクライアントのみ必要です。Oracle Big Data SQLで必要な追加のソフトウェアは使用しません。

Oracle Big Data SQLを使用する場合、bds-exa-install.shインストール・スクリプトを実行するとHadoopクライアントが自動的に作成されます。このケースでは、追加の手順を実行する必要はありません。「Oracle Big Data SQLのインストール後スクリプトの実行」を参照してください。

この時点でOracle Big Data SQLを使用しない場合、スクリプトを実行するかわりにHadoopクライアントを手動でインストールできます。

4.3.3 他のシステムでのCopy to Hadoopのインストール

Oracle Big Data SQLがインストールされている場合は、Hadoopクラスタに接続しているOracle Databaseサーバー上でCopy to Hadoopを使用できます。

4.3.3.1 Hadoopクラスタ(Oracle Big Data Database Applianceクラスタ以外)でのCopy to Hadoopのインストール

Copy to Hadoopは、Oracle Big Data SQLのコンポーネントです。Oracle Big Data SQLをインストールした後で追加の手順が必要です。手順はMOSノート、『Big Data SQL 3.0: Installing and Configuring Copy to Hadoop』 (Doc ID 2115762.1)を参照してください。質問がある場合、Oracleサポートに問い合せてください。

4.3.3.2 Oracle Databaseサーバー(Oracle Exadata Database Machine以外)でのCopy to Hadoopのインストール

Copy to Hadoopを使用するには、Oracle Big Data SQLをインストールした後で追加の構成手順が必要です。手順はMOSノート、『Big Data SQL 3.0: Installing and Configuring Copy to Hadoop』 (Doc ID 2115762.1)を参照してください。質問がある場合、Oracleサポートに問い合せてください。

4.4 データ・ポンプ・ファイルの生成

SQL CREATE TABLE文には、ORACLE_DATAPUMPアクセス・ドライバを指定する外部表を作成するための特別な句があります。この句に指定される情報により、アクセス・ドライバがOracleデータベース表のデータおよびメタデータを含むデータ・ポンプ形式ファイルを生成できます。

この項の内容は次のとおりです。

4.4.1 データ・ポンプ形式ファイルについて

データ・ポンプ・ファイルは通常、あるデータベースから別のデータベースにデータおよびメタデータを移動するために使用されます。Copy to Hadoopは、このファイル形式を使用して、OracleデータベースからHDFSにデータをコピーします。

データ・ポンプ形式ファイルを生成するには、既存のOracle表から外部表を作成します。Oracle Databaseの外部表は、データベース外のデータの場所を識別および記述するOracle Databaseオブジェクトです。外部表は、アクセス・ドライバを使用して、データを解析および形式設定します。Copy to Hadoopでは、ORACLE_DATAPUMPアクセス・ドライバを使用します。内部Oracle表からデータおよびメタデータをコピーして、外部表のデータ・ポンプ形式ファイルを移入します。

4.4.2 ターゲット・ディレクトリの識別

Oracle Databaseのデータベース・ディレクトリへの読取りおよび書込みアクセスが必要です。CREATE ANY DIRECTORYシステム権限を持つOracle Databaseユーザーのみディレクトリを作成できます。

この例は、Oracle Databaseサーバー(Oracle Exadata Database Machineなど)の/exportdirディレクトリを指すEXPORTDIRという名前のデータベース・ディレクトリを作成します。

SQL> CREATE DIRECTORY exportdir AS '/exportdir';

4.4.3 CREATE TABLE構文について

データ・ポンプ形式ファイルのCREATE TABLE文の基本的な構文は次のとおりです。

CREATE TABLE table_name
   ORGANIZATION EXTERNAL (
     TYPE oracle_datapump
     DEFAULT DIRECTORY database_directory
     LOCATION ('filename1.dmp','filename2.dmp'...)
     ) PARALLEL n
   AS SELECT * FROM tablename;
DEFAULT DIRECTORY

この目的のために作成したデータベース・ディレクトリを識別します。「ターゲット・ディレクトリの識別」を参照してください。

LOCATION

作成するデータ・ポンプ・ファイルの名前をリストします。名前の数は、PARALLEL句で指定される並列度(DOP)と一致する必要があります。それ以外の場合、DOPはファイルの数に削減されます。

ファイルの数および並列度は、データ・ポンプ形式ファイルを生成する場合にOracle Databaseのパフォーマンスに影響します。Hiveの問合せパフォーマンスには影響しません。

PARALLEL

並列度(DOP)を設定します。Oracle DBAが使用を許可する最大数を使用します。デフォルトのDOPはシリアル処理の1です。大きい数値を使用すると並列処理が可能です。

AS SELECT

この句の完全なSQL SELECT構文を使用します。制限されていません。tablenameは、HDFSにコピーするOracle表を識別します。

関連項目:

これらのパラメータの説明:

  • 『Oracle Database SQL言語リファレンス』

  • 『Oracle Databaseユーティリティ』

4.4.4 HDFSへのファイルのコピー

Oracle Big Data SQLインストールは、Hadoopクライアント・ファイルをOracle Datatabaseサーバー(Oracle Exadata Database Machineなど)にインストールします。Hadoopクライアント・インストールでは、Hadoopコマンドを使用してデータ・ポンプ・ファイルをHDFSにコピーできます。HDFSディレクトリの書込み権限が必要です。

dmpファイルをHDFSにコピーするには、hadoop fs -putコマンドを使用します。この例では、oracleユーザーが所有するHDFS customersディレクトリにファイルをコピーします。

$ hadoop fs -put customers*.dmp /user/oracle/customers

4.5 Hive表の作成

データ・ポンプ・ファイルのデータにアクセス可能にするには、データ・ポンプ・ファイルに対するHive外部表を作成します。Copy to Hadoopは、Hiveによるファイルの読取りが可能なSerDesを提供します。これらのSerDesは読取り専用であるため、これらを使用してファイルに書き込めません。

4.5.1 Hive外部表について

外部表に対して、Hiveは表のメタデータをメタストアにロードします。データはLOCATION句で識別される元の場所に残ります。HiveQL DROP TABLE文を使用して外部表を削除すると、外部データは変更されずにメタデータのみ破棄されます。このため、Hiveは、Oracle Databaseと基本的に同じ方法で外部表を処理します。

外部表は、複数のプログラムで共有されるデータ・ソースをサポートします。この場合、Oracle Databaseを使用してデータを更新し、新しいファイルを生成します。Hiveメタデータを変更せずに古いHDFSファイルを更新されたファイルで上書きできます。

データ・ポンプ形式ファイルで使用するHive外部表を作成するためのHive CREATE TABLE文の基本的な構文は、次のとおりです。

CREATE EXTERNAL TABLE tablename 
ROW FORMAT
   SERDE 'oracle.hadoop.hive.datapump.DPSerDe'
STORED AS
   INPUTFORMAT  'oracle.hadoop.hive.datapump.DPInputFormat'
   OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
LOCATION 'hdfs_directory'

4.5.2 列マッピングの概要

Hive表の列は、データ・ポンプ・ファイルに格納されたメタデータで提供されるOracle列と同じ名前が自動的に設定されます。ユーザーが指定した列の定義が無視されます。

4.5.3 データ型変換について

Copy to Hadoopは、Oracle表のデータを適切なHiveデータ型に自動的に変換します。表4-1に、Oracleデータ型とHiveデータ型の間のデフォルトのマッピングを示します。


表4-1 Oracleデータ型からHiveデータ型への変換

Oracleデータ型 Hiveデータ型

NUMBER

スケールが0、精度が10未満の場合はINT

スケールが0、精度が19未満の場合はBIGINT

スケールが0より大きく、精度が19より大きい場合はDECIMAL

CLOB

NCLOB

STRING

BINARY_DOUBLE

DOUBLE

BINARY_FLOAT

FLOAT

BLOB

BINARY

CHAR

NCHAR

CHAR

VARCHAR2

NVARCHAR2

VARCHAR

ROWID

UROWID

BINARY

DATE

TIMESTAMP

TIMESTAMP

TIMESTAMP

TIMESTAMPTZ1

TIMESTAMPLTZ

サポートなし

RAW

BINARY


4.6 サンプル・スキーマの使用例

この例は、Copy to Hadoopを使用してOracle表からHive表を作成するプロセスのすべての手順を示します。

4.6.1 サンプル・データについて

Oracle表は、Sales History (SH)サンプル・スキーマから使用します。CUSTOMERS表は、名前、住所、電話番号、生年月日および借入限度額を含む個々の顧客に関する詳細情報を提供します。COUNTRIES表は、国のリストを提供し、地域および小地域を識別します。

この問合せは、CUSTOMERS表の一部のデータを示します。

SELECT cust_first_name first_name,
   cust_last_name last_name,
   cust_gender gender, 
   cust_year_of_birth birth
FROM customers 
ORDER BY cust_city, last_name 
FETCH FIRST 10 ROWS ONLY;

問合せは次の行を返します:

FIRST_NAME      LAST_NAME            GENDER      BIRTH
--------------- -------------------- ------ ----------
Lise            Abbey                F            1963
Lotus           Alden                M            1958
Emmanuel        Aubrey               M            1933
Phil            Ball                 M            1956
Valentina       Bardwell             F            1965
Lolita          Barkley              F            1966
Heloise         Barnes               M            1980
Royden          Barrett              M            1937
Gilbert         Braun                M            1984
Portia          Capp                 F            1948

この例を複製するには、Oracle Databaseのサンプル・スキーマをインストールして、SHユーザーとして接続します。

関連項目:

スキーマの表およびインストールの手順の説明は、Oracle Databaseサンプル・スキーマを参照してください。

4.6.2 EXPDIR Databaseディレクトリの作成

これらのSQL文は、EXPDIRという名前のローカル・データベース・ディレクトリを作成し、SHユーザーにアクセス権を付与します。

SQL> CREATE DIRECTORY expdir AS '/expdir';
Directory created.
SQL> GRANT READ, WRITE ON DIRECTORY expdir TO SH;
Grant succeeded.

4.6.3 顧客データのデータ・ポンプ形式ファイルの作成

次の例は、データ・ポンプ・ファイルの作成方法およびその内容の確認方法を示します。

Copy to Hadoopでは、例に示す構文しかサポートされません。エクスポート・ユーティリティまたはOracle Data Pumpで作成されるデータ・ポンプ・ファイルとの互換性はありません。

4.6.3.1 簡単なSELECT文を使用したCREATE TABLEの例

この例は、CUSTOMERS表からデータ・ポンプ形式ファイルを作成する非常に簡単なSQLコマンドを示します。表全体を選択して、ローカル/expdirディレクトリのcustomers.dmpという名前の単一の出力ファイルを生成します。

CREATE TABLE export_customers 
   ORGANIZATION EXTERNAL
   (
   TYPE oracle_datapump
   DEFAULT DIRECTORY expdir
   LOCATION('customers.dmp')
   )
AS SELECT * FROM customers;

4.6.3.2 さらに複雑なSQL SELECT文を使用したCREATE TABLEの例

次の例は、より複雑な構文を示しています。COUNTRY_ID列に関してCUSTOMERSおよびCOUNTRIES表を結合して、国名を示します。また、行をアメリカの顧客に制限します。コマンドは、ローカル/expdirディレクトリにamericas1.dmpおよびamericas2.dmpという名前の2つの出力ファイルをパラレルに生成します。

CREATE TABLE export_americas 
   ORGANIZATION EXTERNAL
   (
   TYPE oracle_datapump
   DEFAULT DIRECTORY expdir
   LOCATION('americas1.dmp', 'americas2.dmp')
   )
   PARALLEL 2
AS SELECT a.cust_first_name first_name,
   a.cust_last_name last_name,
   a.cust_gender gender,
   a.cust_year_of_birth birth, 
   a.cust_email email, 
   a.cust_postal_code postal_code, 
   b.country_name country
FROM customers a,
     countries b
WHERE a.country_id=b.country_id AND
      b.country_region='Americas'
ORDER BY a.country_id, a.cust_postal_code;

4.6.4 データ・ファイルの内容の確認

Hadoopにコピーする前に出力データ・ファイルの内容を確認できます。前のCREATE TABLE文で、他の表と同じように説明および問い合せできるEXPORT_AMERICASという名前の外部表を作成しました。

DESCRIBE文は、列の選択および変更された名前を示します。

SQL> DESCRIBE export_americas;
 Name                      Null?    Type
 ------------------------- -------- -----------------
 FIRST_NAME                NOT NULL VARCHAR2(20)
 LAST_NAME                 NOT NULL VARCHAR2(40)
 GENDER                    NOT NULL CHAR(1)
 BIRTH                     NOT NULL NUMBER(4)
 EMAIL                              VARCHAR2(50)
 POSTAL_CODE               NOT NULL VARCHAR2(10)
 COUNTRY                   NOT NULL VARCHAR2(40)

次のようなSELECT文は、データのサンプルを示します。

SELECT first_name, last_name, gender, birth, country 
   FROM export_americas 
   WHERE birth > 1985 
   ORDER BY last_name 
   FETCH FIRST 5 ROWS ONLY;
FIRST_NAME      LAST_NAME            GENDER      BIRTH COUNTRY
--------------- -------------------- ------ ---------- ------------------------
Opal            Aaron                M            1990 United States of America
KaKit           Abeles               M            1986 United States of America
Mitchel         Alambarati           M            1987 Canada
Jade            Anderson             M            1986 United States of America
Roderica        Austin               M            1986 United States of America

4.6.5 Hadoopへのファイルのコピー

次のコマンドはローカルexpdirディレクトリのファイルをリストし、customersという名前のHadoopサブディレクトリを作成し、そこにファイルをコピーします。ユーザーは、oracleファイル・システム・ユーザーとしてHadoopクラスタ(Oracle Big Data Applianceなど)に接続されます。

$ cd /expdir
$ ls americas*.dmp
americas1.dmp  americas2.dmp
$ hadoop fs -mkdir customers
$ hadoop fs -put *.dmp customers
$ hadoop fs -ls customers
Found 2 items
-rw-r--r--   1 oracle oracle     798720 2014-10-13 17:04 customers/americas1.dmp
-rw-r--r--   1 oracle oracle     954368 2014-10-13 17:04 customers/americas2.dmp

4.6.6 Hive外部表の作成

このHiveQL文は、Copy to HadoopのSerDesを使用して外部表を作成します。LOCATION句は、データ・ポンプ・ファイルを含むHadoopディレクトリへのフル・パスを識別します。

CREATE EXTERNAL TABLE customers
   ROW FORMAT SERDE 'oracle.hadoop.hive.datapump.DPSerDe'
   STORED AS
      INPUTFORMAT  'oracle.hadoop.hive.datapump.DPInputFormat'
      OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
   LOCATION '/user/oracle/customers';

DESCRIBEコマンドは、CUSTOMERS外部表の列を示します。

hive> DESCRIBE customers;
OK
first_name               varchar(20)              from deserializer   
last_name                varchar(40)              from deserializer   
gender                   char(1)                  from deserializer   
birth                    int                      from deserializer   
email                    varchar(50)              from deserializer   
postal_code              varchar(10)              from deserializer   
country                  varchar(40)              from deserializer   

4.6.7 Hiveのデータの問合せ

次のHiveQL SELECT文は、「データ・ファイルの内容の確認」に示されているOracle DatabaseのSQL SELECT文と同じデータを示します。2つの問合せは、同じデータ・ポンプ・ファイルのコピーにアクセスします。

SELECT first_name, last_name, gender, birth, country 
  FROM customers 
  WHERE birth > 1985 
  ORDER BY last_name LIMIT 5;

Total MapReduce jobs = 1
Launching Job 1 out of 1
     .
     .
     .
OK
Opal      Aaron       M     1990     United States of America
KaKit     Abeles      M     1986     United States of America
Mitchel   Alambarati  M     1987     Canada
Jade      Anderson    M     1986     United States of America
Roderica  Austin      M     1986     United States of America

4.7 Oracle Shell for Hadoop LoadersのCopy to Hadoopとの使用

4.7.1 Oracle Shell for Hadoop Loadersの概要

Oracle Shell for Hadoop Loadersとは

Oracle Shell for Hadoop Loadersは、Oracle Loader for Hadoop、Oracle SQL Connector for HDFSおよびCopy to Hadoopに簡単に使用できるコマンドライン・インタフェースを提供するヘルパー・シェルです。 コマンドライン・リコール、履歴、親プロセスからの環境変数の継承、 新規または既存の変数の設定、およびコマンドラインでの環境の取替えの実行などの基本的なシェル機能があります。 

Oracle Shell for Hadoop Loadersの中心的な機能には次のものが含まれます。

  • Oracle Shell for Hadoop Loadersが対話してロード・タスクを実行する名前付き外部リソースの定義。

  • ロード操作用のデフォルト値の設定。

  • ロード・コマンドの実行。

  • 単純な事前および事後ロード・タスクの、オペレーティング・システム、HDFS、HiveおよびOracleへの委任。 これらのタスクには、ロードされるデータの表示およびロード後のターゲット表でのデータの表示が含まれます。

Oracle Shell for Hadoop Loadersの概要

OHSHキットのexamplesディレクトリには、Oracle Shell for Hadoop Loadersを使用してリソースを定義したり、データをロードする多くの例が含まれています。 これらを実行する例および手順の詳細は、<OHSH_KIT>/examples/README.txtを参照してください。

ヘルプの表示

OHSHシェルには、すべてのコマンドのオンライン・ヘルプがあります。

可能なすべてのOHSHコマンドのリストを表示するには、次のコマンドを実行します。

ohsh> help

特定のコマンドのヘルプを表示するには、helpの後にそのコマンドを続けます。    

ohsh> help show

4.7.2 Oracle Shell for Hadoop Loadersの設定

前提条件

Oracle Databaseサーバー上での前提条件は次のとおりです。

  • Copy to Hadoopがインストールされている

  • HadoopおよびHiveのクライアント・ライブラリがインストールされ、構成されている

  • SQL*Plusがインストールされている

  • Oracle DatabaseへのJDBCアクセスがある。

Oracle Big Data ConnectorsのOLHおよびOSCHのインストールはオプションです。

Oracle Shell for Hadoop Loadersのインストール

Oracle Databaseサーバー上にOracle Shell for Hadoop Loadersを設定するには、次の各項の手順に従います。

  1. Oracle Big Data SQLがインストールされた後で、$ORACLE_HOME/bigdatasql/ohsh-<version>.zipでOracle Shell for Hadoop Loadersのダウンロード・パッケージを探します。

  2. ohsh-<version>.zipの内容をデータベース上の選択したディレクトリに抽出します。 

    この抽出によって、README.txtファイルと次のサブディレクトリを持つohsh-<version>という名前のディレクトリが作成されます。

    README.txt
    /bin
    /conf
    /doc
    /examples
    /jlib
  3. README.txtの手順に従って、Oracle Shell for Hadoop Loadersを構成します。

/docディレクトリには、Hadoopノード、データベース・ノードおよびエッジ・ノードにソフトウェアをインストールする手順、Hive表のロードのセキュリティ・モデルの説明、および他の役立つ情報が記載された追加のREADMEファイルがあります。

1

TIMESTAMPTZおよびTIMESTAMPLTZデータをHiveにコピーするには、データ・ポンプ・ファイルにエクスポートする場合に列をTIMESTAMPにキャストします。Hiveは、タイム・ゾーンまたはタイム・オフセットをサポートするデータ型を持ちません。