主コンテンツへ
Oracle® Big Data SQLユーザーズ・ガイド
リリース3.2.1
E92089-05
目次へ移動
目次
索引へ移動
索引

前
次

B 直接コピーでのCopy to Hadoopの使用

直接コピー・オプションを設定したCopy to Hadoopでは、Oracle Database表からHDFS内に格納されているOracle Data Pumpファイルにデータが直接コピーされます。

データベース・サーバー上に中間ストレージを必要としないため、Copy to Hadoopによってデータ・コピーが簡略化されます。コピーされたデータにアクセスするためのHive外部表の作成やHive問合せの実行など、Hadoopエコシステムでデータにアクセスできるようにするために必要な残りの手順は、両方のコピー・オプション(段階的と直接)に共通します

この項の対象読者は、専門的な要件を備えたHadoopのパワー・ユーザーです。その他すべてのユーザーは、Copy to Hadoopの操作にOracle Shell for Hadoop Loader (OHSH) CLIを使用してください。「Oracle Shell for Hadoop LoadersのCopy to Hadoopとの使用」を参照してください。

B.1 直接コピーにCopy to Hadoopを使用するための手動による手順

次の手順を実行します。

はじめに

  1. まず、Copy to Hadoopがインストールおよび構成されていることを確認します。

  2. ユーザー・アカウントにデータベース表をコピーするのに十分な権限があることを確認します。(「Copy to Hadoopの表アクセス要件」を参照してください。)

  3. 表にサポートされている列型が含まれていることを確認します。(「列マッピングおよびデータ型変換について」を参照してください。)

  4. HadoopクラスタのノードまたはクラスタのHadoopクライアントとして設定されているシステムにログインします。

  5. セキュアなクラスタに接続する場合は、kinitを実行してユーザーを認証します。

  6. 直接コピーを使用してCopy To Hadoopジョブを実行します。次の「Copy To Hadoopジョブの実行(直接コピーの使用)」を参照してください。

  7. ジョブが正常終了したら、HDFS内の出力ディレクトリの_ctohサブディレクトリ内にあるjobReport.logファイルを確認します。ログ・ファイルに表示されたRowCountがデータベース表の行数と一致していることを確認します。

  8. Apache Hiveに接続して、データ・ポンプ・ファイルから外部表を作成します。(「Hive表の作成」を参照してください。)

Copy To Hadoopジョブの実行(直接コピーの使用)

  1. Copy to Hadoopで必要となる環境変数を設定します。

    Copy to Hadoopのインストール・ディレクトリを探し、CP2HADOOP_HOME Bashシェル変数を設定します。次に例を示します。
    # export CP2HADOOP_HOME=”/opt/oracle/orahivedp-3.1.0”
    
    Copy to HadoopのJARをHADOOP_CLASSPATHに追加します。次に例を示します。
    # export HADOOP_CLASSPATH="${CP2HADOOP_HOME}/jlib/*:${HADOOP_CLASSPATH}"
    

    ヒント:

    Copy to Hadoopを使用する際は、常にまず$CP2HADOOP_HOME/jlib/*HADOOP_CLASSPATHにリストする必要があります。または、それを使用するスクリプト内に適切な順序のHADOOP_CLASSPATHを定義することで、JARの競合を避けることができます。
  2. ジョブを実行します。

    コマンドの構文は次のとおりです。
    # hadoop jar ${CP2HADOOP_HOME}/jlib/orahivedp.jar oracle.hadoop.ctoh.CtohDriver \
    [-D <configuration-property>=<configuration-value>]+

例1: Oracleウォレットを使用したセキュアなクラスタでのジョブの実行

# hadoop jar ${CP2HADOOP_HOME}/jlib/orahivedp.jar oracle.hadoop.ctoh.CtohDriver \
-D oracle.hadoop.ctoh.connection.tnsEntry=<my-oracle-tns-entry> \
-D oracle.hadoop.ctoh.connection.walletLoc=<local-oracle-wallet-dir> \
-D oracle.hadoop.ctoh.connection.tnsAdmin=<local-oracle-wallet-dir> \
-D oracle.hadoop.ctoh.connection.clusterWalletLoc=<oracle-wallet-dir-on-hadoop-cluster> \
-D oracle.hadoop.ctoh.connection.clusterTnsAdmin=<oracle-wallet-dir-on-hadoop-cluster> \
-D mapreduce.output.fileoutputformat.outputdir=<mytab-hdfs-output-dir> \
-D oracle.hadoop.ctoh.splitterType="BLOCK_SPLITTER" \
-D oracle.hadoop.ctoh.table=<dbSchema.dbTable> \
-D oracle.hadoop.ctoh.maxSplits=10

例2: 保護されていないHadoopクラスタでのジョブの実行(デモ専用)

# hadoop jar ${CP2HADOOP_HOME}/jlib/orahivedp.jar oracle.hadoop.ctoh.CtohDriver \
-D oracle.hadoop.ctoh.jdbc.url="jdbc:oracle:thin:@myhost:1521/myservice" \
-D oracle.hadoop.ctoh.connection.username="myuser" \
-D oracle.hadoop.ctoh.connection.password="mypassword" \
-D mapreduce.output.fileoutputformat.outputdir="mytable_output_dir" \
-D oracle.hadoop.ctoh.splitterType="BLOCK_SPLITTER" \
-D oracle.hadoop.ctoh.table="otherUser.mytable" \
-D oracle.hadoop.ctoh.maxSplits=10

パフォーマンス・チューニングのヒント

Copy to Hadoopジョブの並列度を制御するには、oracle.hadoop.ctoh.maxSplitsプロパティを使用してマップ・プロセスの数を指定します。マップ・プロセス数が多いほど、並列度が高くなります。各プロセスがデータベースに接続するため、この値によってデータベースへの同時接続数も決まります。通常、64などの数値が適しています。

必須の構成プロパティ

これらのプロパティとその他のプロパティの詳細は、構成プロパティ・リファレンスの項を参照してください。

  • oracle.hadoop.ctoh.table

  • mapreduce.output.fileoutputformat.outputdir

  • oracle.hadoop.ctoh.maxSplits

  • oracle.hadoop.ctoh.splitterType

Oracleウォレットを使用しているセキュアなHadoopクラスタの接続プロパティ:

  • oracle.hadoop.ctoh.connection.walletLoc

  • oracle.hadoop.ctoh.connection.tnsAdmin

  • oracle.hadoop.ctoh.connection.tnsEntry

  • Hadoopクラスタ上のOracleウォレット・ディレクトリがHadoopクライアント上のディレクトリとは異なる場合は、次のプロパティも必須です。

    • oracle.hadoop.ctoh.connection.clusterWalletLoc

    • oracle.hadoop.ctoh.connection.clusterTnsAdmin

保護されていないHadoopクラスタ用の接続プロパティ(デモ専用)

デモ目的の場合は、保護されているクラスタで使用されるプロパティのかわりに、次のプロパティを使用します。

  • oracle.hadoop.ctoh.connection.username

  • oracle.hadoop.ctoh.connection.password

  • oracle.hadoop.ctoh.jdbc.url

Copy to Hadoopを使用した増分コピー

同じOracle表からHDFS内の既存の宛先ディレクトリへデータの増分コピーを実行するには、さらに次のプロパティが必須です。(この構成では、最初にCopy To Hadoopジョブを実行してOracle Database表からHDFSディレクトリ内のデータ・ポンプ・ファイルにデータをコピーしたことを前提としています。)

  • oracle.hadoop.ctoh.whereClause

  • oracle.hadoop.ctoh.datapump.output

  • oracle.hadoop.ctoh.datapump.basename

oracle.hadoop.ctoh.datapump.outputでは、Copy To Hadoopの前の実行によるデータ・ポンプ・ファイルが格納されている既存のHDFSの場所を指定します。

oracle.hadoop.ctoh.whereClauseでは、増分ロード用にOracle表からコピーする行のサブセットを指定します。

oracle.hadoop.ctoh.datapump.basenameでは、データ・ポンプ・ファイルの一意の接頭辞を指定します。このプロパティは、増分ロード時にファイル名の衝突が発生しないように一意のデータ・ポンプ・ファイル名を生成するために使用されます。

B.2 Copy to Hadoopプロパティ・リファレンス

このリファレンスでは、Copy to Hadoopの顧客によるアクセスが可能なプロパティについて説明します。

Copy to Hadoop構成プロパティ・リファレンス(直接コピー用)

プロパティ 説明

oracle.hadoop.ctoh.home

型: String

デフォルト値: CP2HADOOP_HOME環境変数の値。

説明: この構成プロパティは、Copy to Hadoopジョブに必要なJARを探すのに使用されます。

oracle.hadoop.ctoh.table

: String

デフォルト値: なし。

説明: 内容をデータ・ポンプ・ファイルとしてHdoopにコピーするデータベース表の名前。修飾したスキーマでもかまいません。たとえば、スキーマMANAGERの表EMPLOYEEを指定するには、MANAGER.EMPLOYEEを使用できます。

mapreduce.output.fileoutputformat.outputdir

: String

デフォルト値: なし。

説明: Hadoopジョブによってデータ・ポンプ・ファイルが作成される出力ディレクトリの名前。ジョブ出力ログも_ctohサブディレクトリに格納されます。

oracle.hadoop.ctoh.datapump.output

: String

デフォルト値: なし。

説明: データ・ポンプ・ファイルの宛先ディレクトリを指定します。このプロパティを指定しない場合、データ・ポンプ・ファイルは、mapreduce.output.fileoutputformat.outputdirプロパティで指定したディレクトリに格納されます。

oracle.hadoop.ctoh.datapump.basename

: String。

デフォルト値: dppart

説明: 生成されたデータ・ポンプ・ファイルの接頭辞またはベース名。たとえば、このプロパティを"dp_tbl"と指定した場合、生成されるデータ・ポンプ・ファイルはdp_tbl-m-00000.dmpとなります。

oracle.hadoop.ctoh.datapump.extension

:

デフォルト値: dmp

説明: 生成されたデータ・ポンプ・ファイルの接尾辞。たとえば、このプロパティを".dp"と指定した場合、生成されるデータ・ポンプ・ファイルはdppart—m-00000.dpとなります。

oracle.hadoop.ctoh.maxSplits

: Integer。

デフォルト値: なし。

説明: Hadoopジョブによって作成されるデータ・ポンプ・ファイルの数。これは、Hadoopジョブによって生成されるマッパーの数でもあります。

oracle.hadoop.ctoh.splitterType

:

デフォルト値: なし。

説明: 表データの分割に使用するスプリッタのタイプ。

  • BLOCK_SPLITTER: このスプリッタはブロック範囲に表を分割します。

  • ROW_SPLITTER: このスプリッタは行範囲に表を分割します。

  • PARTITION_SPLITTER: 表がパーティション化されている場合、パーティション・スプリッタを使用できます。このスプリッタを指定すると、Hadoopジョブによって作成されるデータ・ポンプ・ファイルの数は最大で表のパーティション数となります。

oracle.hadoop.ctoh.columns

:

デフォルト値: なし。

説明: コピー対象の列のサブセットを指定します。たとえば、"NAME,MANAGER"と指定した場合、NAME列とMANAGER列のデータがコピーされます。このプロパティを指定しない場合は、すべての列が(WHERE句でフィルタリングされないかぎり)コピーされます。

oracle.hadoop.ctoh.whereClause

: String。

デフォルト値: なし。

説明: このプロパティは、行のサブセットをコピーするのに使用されます。たとえば、IDが1000より小さく500より大きい従業員をコピーするには、次のWHERE句を指定します: EMPLOYEE_ID < 1000 AND EMPLOYEE_ID > 500

oracle.hadoop.ctoh.jdbc.url

: String。

デフォルト値: なし。

説明: データベースに接続するためのJDBC URL。このプロパティは、デモ目的とセキュアでないクラスタに使用できます。本番環境のセキュアなHadoopクラスタでは、Oracleウォレットを使用します。

oracle.hadoop.ctoh.connection.username

: String。

デフォルト値: なし。

説明: Oracle Databaseユーザーの名前。このプロパティは、デモ目的とセキュアでないクラスタに使用できます。本番環境のセキュアなHadoopクラスタでは、Oracleウォレットを使用します。

oracle.hadoop.ctoh.connection.password

: String。

デフォルト値: なし。

説明: Oracle Databaseユーザーのパスワード。このプロパティは、デモ目的とセキュアでないクラスタに使用できます。本番環境のセキュアなHadoopクラスタでは、Oracleウォレットを使用します。

oracle.hadoop.ctoh.connection.walletLoc

: String。

デフォルト値: なし。

説明: Hadoopクライアント上のOracleウォレット・ディレクトリの場所。

Oracleウォレットを使用する場合、次のプロパティも設定する必要があります。

  • oracle.hadoop.ctoh.connection.tnsAdmin

  • oracle.hadoop.ctoh.connection.tnsEntry

oracle.hadoop.ctoh.connection.clusterWalletLoc

:

デフォルト値: oracle.hadoop.ctoh.connection.walletLocの値。

説明: Hadoopクラスタ上のOracleウォレット・ディレクトリの場所。注意: このディレクトリは、Hadoopクラスタ内のすべてのノードから見える必要があります。このプロパティを使用する場合、次のプロパティも設定する必要があります。

  • oracle.hadoop.ctoh.connection.clusterTnsAdmin

  • oracle.hadoop.ctoh.connection.tnsEntry

oracle.hadoop.ctoh.connection.tnsAdmin

: String。

デフォルト値: 定義されていません。

説明: sqlnet.oratnsnames.oraなどのSQL*Net構成ファイルが格納されている、Hadoopクライアント上のディレクトリの場所。データベース接続文字列でTNSエントリ名を使用できるようにこのプロパティを設定します。Oracleウォレットを使用する場合、このプロパティ値はoracle.hadoop.ctoh.connection.walletLocプロパティの値と同じでもかまいません。

Oracleウォレットを外部パスワード・ストアとして使用する場合、このプロパティを設定する必要があります。「oracle.hadoop.ctoh.connection.walletLoc」を参照してください。

oracle.hadoop.ctoh.connection.clusterTnsAdmin

: String。

デフォルト値: プロパティoracle.hadoop.ctoh.connection.tnsAdminの値。

説明: sqlnet.oratnsnames.oraなどのSQL*Net構成ファイルが格納されている、Hadoopクラスタ上のディレクトリの場所。注意: このディレクトリは、Hadoopクラスタ内のすべてのノードから見える必要があります。

データベース接続文字列でTNSエントリ名を使用できるようにこのプロパティを設定します。Oracleウォレットを使用する場合、このプロパティ値はoracle.hadoop.ctoh.connection.clusterWalletLocの値と同じでもかまいません。

Oracleウォレットを外部パスワード・ストアとして使用する場合(推奨)、このプロパティを設定する必要があります。「oracle.hadoop.ctoh.connection.clusterWalletLoc」を参照してください。

oracle.hadoop.ctoh.connection.tnsEntry

: String。

デフォルト値: なし。

説明: tnsnames.oraファイルに定義されたTNSエントリ名。このプロパティは、oracle.hadoop.ctoh.connection.tnsAdminとともに使用します。Oracleウォレットを使用する場合は、必ずtnsEntry名とウォレット資格証明を一致させます。

oracle.hadoop.ctoh.cachePath

: String。

デフォルト値: ${mapreduce.output.fileoutputformat.outputdir}/../ctohCache

説明: MapReduceの分散キャッシュにロードされるファイルをCopy to Hadoopが作成できるHDFSディレクトリのフル・パスを指定します。この分散キャッシュは、大規模なアプリケーション固有ファイルをキャッシュし、クラスタ内のノード間に効率的に分散する機能です。