CountTableRowsのサポート・プログラム

Oracle NoSQL Databaseは、別個のディストリビューションをOracle Technology Networkで提供しています。このディストリビューションは、Oracle NoSQL Databaseシステムとの対話操作の様々な側面を調べてみるために使用できるサンプル・プログラムとユーティリティ・クラスで構成されています。Oracle NoSQL DatabaseのMapReduceとの統合については、このドキュメントに示したCountTableRowsサンプル・プログラムの提供に加えて、Oracle NoSQL Databaseのサンプルには、デプロイするストアにサンプル表を作成してデータを移入するために使用できるLoadTableVehicleプログラムも用意されています。

次に示す各項では、LoadVehicleTableプログラムについて、表の作成時にデプロイされるスキーマと、プログラムのコンパイル方法および実行方法も含めて説明します。

vehicleTableサンプルのスキーマ

CountTableRows MapReduceジョブを実行するには、次の表に示すスキーマを持つvehicleTableという表を、このサンプル用にデプロイしたOracle NoSQL Databaseストアに作成する必要があります。次に示すスキーマで指定されたデータ型は、Oracle NoSQL Database表APIで定義されています(oracle.kv.table.FieldDef.Typeを参照)。

表4-1 vehicleTableのスキーマ

フィールド名 フィールド型 主キー シャード・キー
FieldDef.Type.STRING はい はい
make FieldDef.Type.STRING はい はい
model FieldDef.Type.STRING はい はい
class FieldDef.Type.STRING はい  
color FieldDef.Type.STRING    
price FieldDef.Type.DOUBLE    
count FieldDef.Type.INTEGER    
dealerid FieldDef.Type.NUMBER    
delivered FieldDef.Type.TIMESTAMP    

サンプルのvehicleTableは、販売店が購入用在庫に保有している特定の車両を表す行で構成されています。そうした行のそれぞれに、車両の"type" (乗用車、トラック、SUVなど)、車両の"make" (Ford、GM、Chryslerなど)、車両の"model" (エクスプローラ、カマロ、レバロンなど)、車両の"class" (4輪駆動、前輪駆動など)、車両の色("color")と価格("price")、それらの特性を備えた車両の現在の在庫数("count")、そうした車両を販売する販売特約店を一意に識別する番号("dealerid")、そうした車両が販売特約店に配送された日時("delivered")を指定するフィールドが含まれています。

前述のスキーマを持つ表はストアの管理CLIで個々のコマンドを入力して作成することもできますが、表データ定義言語(DDL)を使用して目的の表を作成する方法をお薦めします。そうするための1つの方法は、LoadVehicleTableプログラムをコンパイルおよび実行するための次の各項に示した手順に従うことです。この手順では、表を作成するDDLの使用後に目的の表にデータを移入します。

vehicleTableの作成およびサンプル・データの移入

/opt/oracle/kv-eeに相当するKVHOMEを使用してOracle NoSQL Databaseストア(セキュアまたは非セキュア)がデプロイされている場合、CountTableRowsサンプルの利便性のために提供されるLoadVehicleTableプログラムを実行して、vehicleTableという名前の表を作成してデータを移入できます。ただし、LoadVehicleTableを実行する前に、まず、そのプログラムをコンパイルしておく必要があります。そうするには、サンプル・ディストリビューションがディレクトリ/opt/oracle/nosql/apps/kv/examples内にインストールされているとして、クライアント・ノードのOSコマンドラインから次のコマンドを入力します。

cd /opt/oracle/nosql/apps/kv
javac -classpath \
    /opt/oracle/kv-ee/lib/kvclient.jar:examples \
    examples/hadoop/table/LoadVehicleTable.java

これにより、次のファイルが生成されます。

/opt/oracle/nosql/apps/kv/examples/hadoop/table/LoadVehicleTable.class

ストアが非セキュアな場合のLoadVehicleTableの実行

LoadVehicleTableを実行して、vehicleTableという名前の表を作成し、非セキュア・アクセス用に構成したストアにサンプル・データを移入するには、クライアント・ノードのコマンドラインで次のように入力します。このノードには、デプロイした非セキュア・ストアの管理サービスを実行しているノードとのネットワーク接続が必要です(たとえば、kv-host-1自体など)。

cd /opt/oracle/nosql/apps/kv
java -classpath \
    /opt/oracle/kv-ee/lib/kvstore.jar:\
    /opt/oracle/kv-ee/lib/sklogger.jar:\
    /opt/oracle/kv-ee/lib/commonutil.jar:examples \
    hadoop.table.LoadVehicleTable -store example-store \
    -host kv-host-1 -port 5000 -nops 79 [-delete]

必須のパラメータは、-store-host-portおよび-nopsです。パラメータの-deleteはオプションです。

前述のコマンドライン例では、引数-nops 79によってvehicleTableに79行書き込むように要求しています。この行数の増減が必要な場合は、-nopsパラメータの値を変更する必要があります。

LoadVehicleTableの再実行時に、オプションの-deleteパラメータを指定すると、要求された新しい行を追加する前に、LoadVehicleTableの以前の実行によって追加されたすべての行が表から削除されます。それ以外の場合、既存のすべての行がそのまま残され、表の行数は要求した-nopsの新しい行数だけ増えます。

注意:

LoadVehicleTableのレコード生成方法では、LoadVehicleTableに対する前回のコール中または現在のコール中に、特定のレコードがすでに表に追加されている可能性があります。その結果として、追加される一意の行数が要求した数より少なくなることがあります。そのため、処理の完了後、LoadVehicleTableは、表に実際に追加された一意の行の数と、表内の現在の(以前の実行からの)合計行数が表示されます。

ストアがセキュアな場合のLoadVehicleTableの実行

付録「セキュア・ストアのデプロイ」に示したステップに従って、非管理ユーザーでデプロイおよびプロビジョニングしたセキュア・ストアに対してLoadVehicleTableを実行するには、前述のコマンドラインに別のパラメータを追加する必要があります。この場合、コマンドラインに次の内容を入力します。

scp <username>@kv-host-<n>:\
    /u01/nosql/sn1/kvroot/security/client.trust /tmp

cd /opt/oracle/nosql/apps/kv

java -classpath \
    /opt/oracle/kv-ee/lib/kvclient.jar:\
    /opt/oracle/kv-ee/lib/sklogger.jar:\
    /opt/oracle/kv-ee/lib/commonutil.jar:examples \
    hadoop.table.LoadVehicleTable -store example-store \
    -host kv-host-1 -port 5000 -nops 79 \
    -security /tmp/example-user-client-pwdfile.login \
    [-delete]

セキュア・ストアのデプロイ時に生成されるclient.trustファイルは、LoadVehicleTableを実行するクライアント・ノードの/tmpディレクトリにインストールする必要があります。クライアント・ノードがストア・ノード(kv-host-1kv-host-2kv-host-3)のいずれでもない場合、client.trustのインストールは、適切なユーザー名と<n>トークンのかわりの数値1を使用してリモート・コピーを実行することで実施します。それに対して、ストア自体を構成するいずれかのノードからLoadVehicleTableを実行する場合は、このインストールにローカル・コピー操作を使用できます。

前述のコマンドにある追加のパラメータ-securityでは、特定のユーザーまたは別名のログイン・プロパティ・ファイル(この場合は、Oracle Walletではなくパスワード・ファイルに関連付けられているもの)の場所を指定します。その他のすべてのパラメータは、非セキュア・ケースと同じです。

この-securityパラメータについて理解するために、付録「セキュア・ストアのデプロイ」ではexample-userという名前の非管理ユーザーを作成してから、そのユーザーに対してパスワード・ファイル(Oracle Walletではなく)に基づいた複数の資格証明ファイルを生成して、/tmpシステム・ディレクトリに配置しました。その結果として、クライアント・ノードの/tmpディレクトリ内には次のファイルがあります。

/tmp
    client.trust
    example-user-client-pwdfile.login
    example-user-server.login
    example-user.passwd

この例では、ユーザー資格証明ファイルは同じ場所に配置されている必要があります。それらのファイルは、ユーザーがアクセスできる同じディレクトリにあれば、どのディレクトリに配置されていてもかまいません。そのため、共有信頼ファイル(client.trust)は、前述のように/tmpにコピーしています。client.trustおよびexample-user.passwdとログイン・ファイル(example-user-client-pwdfile.login)を同じ場所に配置すると、ログイン・ファイル(ユーザー・パスワードの格納にOracle Walletを使用している場合はoracle.kv.auth.wallet.dir)で指定されるシステム・プロパティoracle.kv.ssl.trustStoreおよびoracle.kv.auth.pwdfile.fileの値に相対パスを使用できるようになります。該当するファイルがログイン・ファイルと同じ場所にない場合は、これらのプロパティに絶対パスを使用することが必要になります。

まとめ

この時点で、非セキュアかセキュアかに関係なくデプロイしたOracle NoSQL Databaseストアに作成されたvehicleTableに、目的のサンプル・データを移入する必要があります。また、その表の行数をカウントするために、CountTableRowsによって開始されるMapReduceジョブを実行できます。