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-1
、kv-host-2
、kv-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
の値に相対パスを使用できるようになります。該当するファイルがログイン・ファイルと同じ場所にない場合は、これらのプロパティに絶対パスを使用することが必要になります。