この章では、Oracleデータベースの表をHadoopにコピーするためにCopy to BDAを使用する方法について説明します。内容は次のとおりです。
Copy to BDAを使用すると、OracleデータベースからHadoopに表をコピーできます。表からデータ・ポンプ形式ファイルを生成してファイルをHDFSにコピーした後、Apache Hiveを使用してデータを問い合せることができます。Hiveは、Oracle Databaseにアクセスせずにローカルにデータを処理できます。Oracle表が変更されると、Hadoopのコピーをリフレッシュできます。Copy to BDAは、比較的静的であり、頻繁にリフレッシュする必要がないOracle表に主に役立ちます。
Copy to BDAは、Oracle Big Data SQLでライセンス供与されます。Copy to BDAを使用するには、Oracle Big Data SQLライセンスが必要です。
Copy to BDAを使用するには、次の手順を実行します。
システムが前提条件を満たしていることを確認し、必要なソフトウェアがOracle Big Data ApplianceおよびOracle Exadata Database Machineにインストールされていることを確認します。
「Copy to BDAのインストール」を参照してください。
Oracle Exadata Database Machineで、Oracle Databaseに接続し、表データおよびメタデータを含むデータ・ポンプ形式ファイルを生成します。
「データ・ポンプ・ファイルの生成」を参照してください。
ファイルをOracle Big Data ApplianceのHDFSにコピーします。
「HDFSへのファイルのコピー」を参照してください。
Apache Hiveに接続して、ファイルから外部表を作成します。
「Hive表の作成」を参照してください。
他のHive表と同じように、このHive表に問い合せます。
Copy to BDAは、Oracle Big Data Applianceに接続されたOracle Exadata Database Machineでのみ使用できます。
Oracle Exadata Database Machineは次の要件に準拠している必要があります。
Oracle Big Data Applianceと同じインフィニバンドまたはクライアント・ネットワークで構成されています。Oracle Exadata Database MachineおよびOracle Big Data Appliance間のインフィニバンド接続をお薦めしますが、必須ではありません。
Oracle Database 11.2以上を実行していること。
Copy to BDAは、Oracle Big Data SQLより前のリリースをサポートします。
Copy to BDAは、Oracle Big Data Applianceのインストール・オプションであるOracle Big Data SQLのコンポーネントです。ソフトウェアの初期インストール時またはその後で、Oracle Big Data SQLによってサービスを有効化および無効化するための標準的な方法を使用して有効化できます。「インストールの実行」を参照してください。
Copy to BDAは、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クライアントを手動でインストールできます。たとえば、Oracle Big Data SQLは、使用しているOracle Databaseのバージョンでサポートされていない場合があります。また、現在必要としていないデータベース・パッチおよび他のソフトウェアのインストールを回避する場合があります。「CDHへのリモート・クライアント・アクセスの提供」を参照してください。
SQL CREATE TABLE
文には、ORACLE_DATAPUMP
アクセス・ドライバを指定する外部表を作成するための特別な句があります。この句に指定される情報により、アクセス・ドライバがOracleデータベース表のデータおよびメタデータを含むデータ・ポンプ形式ファイルを生成できます。
この項の内容は次のとおりです。
データ・ポンプ・ファイルは通常、あるデータベースから別のデータベースにデータおよびメタデータを移動するために使用されます。Copy to BDAは、このファイル形式を使用して、OracleデータベースからHDFSにデータをコピーします。
データ・ポンプ形式ファイルを生成するには、既存のOracle表から外部表を作成します。Oracle Databaseの外部表は、データベース外のデータの場所を識別および記述するOracle Databaseオブジェクトです。外部表は、アクセス・ドライバを使用して、データを解析および形式設定します。Copy to BDAでは、ORACLE_DATAPUMP
アクセス・ドライバを使用します。内部Oracle表からデータおよびメタデータをコピーして、外部表のデータ・ポンプ形式ファイルを移入します。
Oracle Databaseのデータベース・ディレクトリへの読取りおよび書込みアクセスが必要です。CREATE ANY DIRECTORY
システム権限を持つOracle Databaseユーザーのみディレクトリを作成できます。
この例は、Oracle Exadata Database Machineの/exportdir
ディレクトリを指すEXPORTDIR
という名前のデータベース・ディレクトリを作成します。
SQL> CREATE DIRECTORY exportdir AS '/exportdir';
データ・ポンプ形式ファイルの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;
この目的のために作成したデータベース・ディレクトリを識別します。「ターゲット・ディレクトリの識別」を参照してください。
作成するデータ・ポンプ・ファイルの名前をリストします。名前の数は、PARALLEL
句で指定される並列度(DOP)と一致する必要があります。それ以外の場合、DOPはファイルの数に削減されます。
ファイルの数および並列度は、データ・ポンプ形式ファイルを生成する場合にOracle Databaseのパフォーマンスに影響します。Hiveの問合せパフォーマンスには影響しません。
並列度(DOP)を設定します。Oracle DBAが使用を許可する最大数を使用します。デフォルトのDOPはシリアル処理の1です。大きい数値を使用すると並列処理が可能です。
この句の完全なSQL SELECT
構文を使用します。制限されていません。tablenameは、HDFSにコピーするOracle表を識別します。
関連項目: これらのパラメータの説明:
|
Oracle Big Data SQLインストールは、Hadoopクライアント・ファイルをOracle Exadata Database Machineにインストールします。Hadoopクライアント・インストールでは、Hadoopコマンドを使用してデータ・ポンプ・ファイルをHDFSにコピーできます。HDFSディレクトリの書込み権限が必要です。
dmp
ファイルをHDFSにコピーするには、hadoop fs -put
コマンドを使用します。この例では、oracle
ユーザーが所有するHDFS customers
ディレクトリにファイルをコピーします。
$ hadoop fs -put customers*.dmp /user/oracle/customers
データ・ポンプ・ファイルのデータにアクセス可能にするには、データ・ポンプ・ファイルに対するHive外部表を作成します。Copy to BDAは、Hiveによるファイルの読取りが可能なSerDesを提供します。これらのSerDesは読取り専用であるため、これらを使用してファイルに書き込めません。
関連項目: 次のApache Hive LanguageManual DDL
|
外部表に対して、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'
Hive表の列は、データ・ポンプ・ファイルに格納されたメタデータで提供されるOracle列と同じ名前が自動的に設定されます。このリリースでは、ユーザーが指定した列の定義が無視されます。
Copy to BDAは、Oracle表のデータを適切なHiveデータ型に自動的に変換します。表8-1に、Oracleデータ型とHiveデータ型の間のデフォルトのマッピングを示します。
表8-1 Oracleデータ型からHiveデータ型への変換
Oracleデータ型 | Hiveデータ型 |
---|---|
NUMBER |
スケールが0、精度が10未満の場合はINT スケールが0、精度が19未満の場合はBIGINT スケールが0より大きく、精度が19より大きい場合はDECIMAL |
BINARY_DOUBLE |
DOUBLE |
BINARY_FLOAT |
FLOAT |
CHAR NCHAR |
CHAR |
VARCHAR2 NVARCHAR2 |
VARCHAR |
DATE |
TIMESTAMP |
TIMESTAMP |
TIMESTAMP |
TIMESTAMPTZ脚注1 TIMESTAMPLTZ |
サポートなし |
RAW |
BINARY |
脚注1 TIMESTAMPTZ
およびTIMESTAMPLTZ
データをHiveにコピーするには、データ・ポンプ・ファイルにエクスポートする場合に列をTIMESTAMP
にキャストします。Hiveは、タイム・ゾーンまたはタイム・オフセットをサポートするデータ型を持ちません。
この例は、Copy to BDAを使用してOracle表からHive表を作成するプロセスのすべての手順を示します。
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サンプル・スキーマを参照してください。 |
これらのSQL文は、EXPDIR
という名前のローカル・データベース・ディレクトリを作成し、SH
ユーザーにアクセス権を付与します。
SQL> CREATE DIRECTORY expdir AS '/expdir'; Directory created. SQL> GRANT READ, WRITE ON DIRECTORY expdir TO SH; Grant succeeded.
次の例は、データ・ポンプ・ファイルの作成方法およびその内容の確認方法を示します。
この例は、CUSTOMERS
表からデータ・ポンプ形式ファイルを作成する非常に簡単なSQLコマンドを示します。表全体を選択して、ローカル/expdir
ディレクトリのcustomers.dmp
という名前の単一の出力ファイルを生成します。
CREATE TABLE export_customers ORGANIZATION EXTERNAL ( TYPE oracle_datapump DEFAULT DIRECTORY expdir LOCATION('customers.dmp') ) AS SELECT * FROM customers;
次の例は、より複雑な構文を示しています。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;
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
次のコマンドはローカルexpdir
ディレクトリのファイルをリストし、customers
という名前のHadoopサブディレクトリを作成し、そこにファイルをコピーします。ユーザーは、oracle
ファイル・システム・ユーザーとして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
このHiveQL文は、Copy to BDAの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
次の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