直接コピー・オプションを設定した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との使用」を参照してください。
次の手順を実行します。
はじめに
まず、Copy to Hadoopがインストールおよび構成されていることを確認します。
ユーザー・アカウントにデータベース表をコピーするのに十分な権限があることを確認します。(「Copy to Hadoopの表アクセス要件」を参照してください。)
表にサポートされている列型が含まれていることを確認します。(「列マッピングおよびデータ型変換について」を参照してください。)
HadoopクラスタのノードまたはクラスタのHadoopクライアントとして設定されているシステムにログインします。
ソース・クラスタに接続している場合は、『Oracle Big Data Applianceソフトウェア・ユーザーズ・ガイド』の説明に従って、kinit
を実行してユーザーを認証します。
直接コピーを使用してCopy To Hadoopジョブを実行します。次の「Copy To Hadoopジョブの実行(直接コピーの使用)」を参照してください。
ジョブが正常終了したら、HDFS内の出力ディレクトリの_ctoh
サブディレクトリ内にあるjobReport.log
ファイルを確認します。ログ・ファイルに表示されたRowCountがデータベース表の行数と一致していることを確認します。
Apache Hiveに接続して、データ・ポンプ・ファイルから外部表を作成します。(「Hive表の作成」を参照してください。)
Copy To Hadoopジョブの実行(直接コピーの使用)
Copy to Hadoopで必要となる環境変数を設定します。
CP2HADOOP_HOME
Bashシェル変数を設定します。次に例を示します。# export CP2HADOOP_HOME=”/opt/oracle/orahivedp-3.1.0”
HADOOP_CLASSPATH
に追加します。次に例を示します。# export HADOOP_CLASSPATH="${CP2HADOOP_HOME}/jlib/*:${HADOOP_CLASSPATH}"
ヒント:
Copy to Hadoopを使用する際は、常にまず$CP2HADOOP_HOME/jlib/*
をHADOOP_CLASSPATH
にリストする必要があります。または、それを使用するスクリプト内に適切な順序のHADOOP_CLASSPATH
を定義することで、JARの競合を避けることができます。ジョブを実行します。
# 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
では、データ・ポンプ・ファイルの一意の接頭辞を指定します。このプロパティは、増分ロード時にファイル名の衝突が発生しないように一意のデータ・ポンプ・ファイル名を生成するために使用されます。
このリファレンスでは、Copy to Hadoopの顧客によるアクセスが可能なプロパティについて説明します。
Copy to Hadoop構成プロパティ・リファレンス(直接コピー用)
プロパティ | 説明 |
---|---|
oracle.hadoop.ctoh.home |
型: String デフォルト値: 説明: この構成プロパティは、Copy to Hadoopジョブに必要なJARを探すのに使用されます。 |
oracle.hadoop.ctoh.table |
型: String デフォルト値: なし。 説明: 内容をデータ・ポンプ・ファイルとしてHdoopにコピーするデータベース表の名前。修飾したスキーマでもかまいません。たとえば、スキーマMANAGERの表EMPLOYEEを指定するには、 |
mapreduce.output.fileoutputformat.outputdir |
型: String デフォルト値: なし。 説明: Hadoopジョブによってデータ・ポンプ・ファイルが作成される出力ディレクトリの名前。ジョブ出力ログも |
oracle.hadoop.ctoh.datapump.output |
型: String デフォルト値: なし。 説明: データ・ポンプ・ファイルの宛先ディレクトリを指定します。このプロパティを指定しない場合、データ・ポンプ・ファイルは、 |
oracle.hadoop.ctoh.datapump.basename |
型: String。 デフォルト値: 説明: 生成されたデータ・ポンプ・ファイルの接頭辞またはベース名。たとえば、このプロパティを"dp_tbl"と指定した場合、生成されるデータ・ポンプ・ファイルは |
oracle.hadoop.ctoh.datapump.extension |
型: デフォルト値: 説明: 生成されたデータ・ポンプ・ファイルの接尾辞。たとえば、このプロパティを".dp"と指定した場合、生成されるデータ・ポンプ・ファイルは |
oracle.hadoop.ctoh.maxSplits |
型: Integer。 デフォルト値: なし。 説明: Hadoopジョブによって作成されるデータ・ポンプ・ファイルの数。これは、Hadoopジョブによって生成されるマッパーの数でもあります。 |
oracle.hadoop.ctoh.splitterType |
型: デフォルト値: なし。 説明: 表データの分割に使用するスプリッタのタイプ。
|
oracle.hadoop.ctoh.columns |
型: デフォルト値: なし。 説明: コピー対象の列のサブセットを指定します。たとえば、"NAME,MANAGER"と指定した場合、 |
oracle.hadoop.ctoh.whereClause |
型: String。 デフォルト値: なし。 説明: このプロパティは、行のサブセットをコピーするのに使用されます。たとえば、IDが1000より小さく500より大きい従業員をコピーするには、次のWHERE句を指定します: |
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.clusterWalletLoc |
型: デフォルト値: 説明: Hadoopクラスタ上のOracleウォレット・ディレクトリの場所。注意: このディレクトリは、Hadoopクラスタ内のすべてのノードから見える必要があります。このプロパティを使用する場合、次のプロパティも設定する必要があります。
|
oracle.hadoop.ctoh.connection.tnsAdmin |
型: String。 デフォルト値: 定義されていません。 説明: Oracleウォレットを外部パスワード・ストアとして使用する場合、このプロパティを設定する必要があります。「 |
oracle.hadoop.ctoh.connection.clusterTnsAdmin |
型: String。 デフォルト値: プロパティ 説明: データベース接続文字列でTNSエントリ名を使用できるようにこのプロパティを設定します。Oracleウォレットを使用する場合、このプロパティ値は Oracleウォレットを外部パスワード・ストアとして使用する場合(推奨)、このプロパティを設定する必要があります。「 |
oracle.hadoop.ctoh.connection.tnsEntry |
型: String。 デフォルト値: なし。 説明: |
oracle.hadoop.ctoh.cachePath |
型: String。 デフォルト値: 説明: MapReduceの分散キャッシュにロードされるファイルをCopy to Hadoopが作成できるHDFSディレクトリのフル・パスを指定します。この分散キャッシュは、大規模なアプリケーション固有ファイルをキャッシュし、クラスタ内のノード間に効率的に分散する機能です。 |