5.5.2 バッチジョブ分散実行システムとHiRDBを組み合わせた場合の前処理プログラム
グリッドジョブは分散したデータの数に合わせてジョブを複製し,複製したジョブ(サブジョブ)を複数の実行ノードに投入して並列実行するシステムです。このとき,前処理プログラムが出力するデータ配置情報を基に指定した実行ノードで,グリッドジョブが実行されます。
データ配置情報は,サブジョブで処理する入力データ一覧とホスト情報を基に前処理プログラムによって作成されます。
入力データの条件や分割方法は業務要件によって異なるため,あらかじめ前処理プログラムを作成して,業務ごとにデータ配置情報を取得する必要があります。
データ配置情報の作成の流れを次の図に示します。
以降ではバッチジョブ分散実行システムとHiRDBを組み合わせた場合の前処理プログラムについて説明します。
HiRDBが提供する機能(pddivinfgtおよびpdlsコマンド)とデータ配置情報を組み合わせて作成することで,HiRDB側の状態に合わせてサブジョブを分散するシステムが構築可能となります。これによって,拡張ユニットを新たに起動したグリッドジョブはHiRDBの状態に合わせて自動的にスケールアウトすることができます。
- 〈この項の構成〉
(1) 前処理プログラムのスクリプト構成
バッチジョブ分散実行システムとHiRDBを組み合わせた場合の前処理プログラムは,HiRDBから表の分割情報を取得する「HiRDBの表情報取得シェル」およびデータ配置情報を作成する「データ配置情報作成シェル」の2つから構成されています。
次にHiRDBの表情報取得シェルおよびデータ配置情報作成シェルについて説明します。
(a) HiRDBの表情報取得シェル
HiRDBのpddivinfgtおよびpdlsコマンドの出力を組み合わせて,「HiRDBから入手する表の分割情報」を作成します。
(b) データ配置情報作成シェル
HiRDBの表情報取得シェルのスクリプトで収集したホスト情報と,入力データ一覧をマージしてデータ配置情報を作成します。
pddivinfgtおよびpdlsコマンドについては,マニュアル「HiRDB コマンドリファレンス(UNIX(R)用)」を参照してください。
HiRDBの表情報取得シェルとデータ配置情報作成シェルによるデータ配置情報の作成を次の図に示します(図中の番号は,次に示す説明の項番と対応しています)。
-
入力データ一覧(取引のあった銘柄一覧でInsertを行うUAPが出力した情報)を入力する。
-
HiRDBの表情報取得シェルを起動する。
-
pddivinfgtコマンドを実行する。
-
表のBES配置情報を応答する。
-
pdlsコマンドを実行する。
-
BESのホスト配置情報を応答する。
-
ホスト情報を応答する。
-
データ配置情報を作成する。
- 注意事項
-
グリッドジョブ管理ホストにHiRDBのマネージャを配置しないで,HiRDB/クライアントを配置した場合,pdlsコマンドは次に示すどちらかの方法で実行してください。
-
CALL COMMAND文を利用するUAPを作成して実行
CALL COMMAND文でpdlsコマンドを実行してください。
その際,CALL COMMAND文のOUTPUT TOに,埋め込み変数,または?パラメタを指定してpdlsコマンドの実行結果を取得してください。
CALL COMMAND文については,マニュアル「HiRDB SQLリファレンス」を参照してください。
HiRDBのUAPの作成については,マニュアル「HiRDB UAP開発ガイド」を参照してください。
-
各OSのリモートシェルを使用してリモート実行
詳細については,各OSのマニュアルを参照してください。
-
(2) 前処理プログラムのスクリプト例
HiRDBの表情報取得シェルおよびデータ配置情報作成シェルのスクリプト例を次に示します。
(a) 前提条件
日々作成する,当日の取引一覧を格納する表を使用します。その表に当日分の取引情報を追加するジョブと,当日に取引があった銘柄の情報を印刷するジョブがあり,後者はグリッド化されているとします。表のうち,銘柄ID:0001〜5000を格納した部分(RDエリアおよびそれを管理するBESとそこに接続しているFES)はホスト1から,銘柄ID:5001〜9999を格納した部分は,ホスト2からアクセスすると高速にアクセスできるという前提とします。
グリッドジョブは,銘柄一覧を基にサブジョブを生成します。銘柄一覧は,表にデータを格納するUAPが作成しています。
-
銘柄一覧(入力データの一覧)
銘柄IDは4桁の数字であると仮定します。取引情報は,「銘柄ID,印刷する情報」であるとします。
Insertを行うUAPは,この取引情報をデータ配置情報作成シェルのスクリプトに入力して,表に情報を登録するのと同時に,取引のあった銘柄一覧を出力します。
-
表の分割情報
データ配置情報作成シェルのスクリプトにHiRDBから取得する表の分割情報を入力します。表の分割情報は,HiRDBから情報を取得します。
ここでは,「キーレンジの最大,ホスト名」の形式で,表の分割情報を取得すると仮定します。
- HiRDBから取得する表の分割情報
-
スクリプト例は表の分割種別がキーレンジ分割の境界値指定で,分割キーのデータ型が文字列の場合とします。
-
pdlsコマンドの出力
pdlsコマンドはホスト名,ユニット名,BES名,およびその他の情報を,コンマ区切りの引用符(")で囲まれた文字列で出力します。
"HOST1",”unit1”,"bes1" "HOST2",”unit2”,"bes2"
-
pddivinfgtの出力
pddivinfgtコマンドは,条件コード,分割条件,およびBES名をコンマ区切りで出力します。また,#で始まるコメント行も出力します。
HiRDB 09-01以降でサポートする条件コードは,=△,<=,--です(△は半角スペース)。ここでは,キーレンジ分割で境界値指定の横分割表では「<=」または「--」が出力されます。
分割条件には,条件コードで比較される情報が格納されています。ここでは,引用部(")で囲まれた文字列が出力されます。BES名は,BES名がそのまま出力されます。
#comment <=,"5000.",bes1 <=,"9999.",bes2
-
(b) スクリプト例
-
HiRDBの表情報取得シェルのスクリプト例
pdlsコマンドおよびpddivinfgtコマンドで出力されたデータを入力して,表分割情報(キーレンジの最大値,ホスト名)を出力するHiRDBの表情報取得シェルのスクリプト例を次に示します。
-
データ配置情報作成シェルのスクリプト例
取引のあった銘柄一覧と表の分割情報を入力して,データ配置情報を出力するデータ配置情報作成シェルのスクリプト例を次に示します。