5.2.2 グリッド開始ジョブの定義
グリッド開始ジョブは,グリッドジョブ前処理プログラムを実行することで,実行ノードにデータを分割配置するジョブです。
(1) グリッド開始ジョブの処理
グリッド開始ジョブの実行によって,グリッドジョブ前処理プログラムが呼び出されます。ユーザ側で用意するグリッドジョブ前処理プログラムには,データの配置情報を標準出力に出力する処理を作り込む必要があります。データの配置情報の形式については,「(4) データ配置情報の形式」を参照してください。
このデータの配置情報を基にジョブが分割されて,実行ノードにサブジョブが投入されます。
- 入力情報
-
グリッド開始ジョブはスクリプトファイル形式であるため,引数として入力情報を指定して,グリッドジョブ前処理プログラムに渡すこともできます。また,次の環境変数が設定されます。
-
UGPSM_GEN環境変数(世代識別子)
-
- 出力情報
-
グリッドジョブ前処理プログラムは,標準出力にデータの配置情報を出力する必要があります。
データ配置情報が不正な場合や出力されていない場合には,グリッド開始ジョブは終了コード114〜117でエラーとなります。また,グリッドジョブ前処理プログラムの戻り値が0以外だった場合,グリッド開始ジョブは終了コード114で異常終了します。この場合は,後続のグリッド実行ジョブが実行されないように,しきい値を設定してください。
- 終了コード
-
グリッド開始ジョブの終了コードを次に示します。
終了コード
意味
0
標準出力にデータ配置情報を出力しました。データの配置情報に従ってグリッドジョブネットを続行します。
1〜255
データ配置情報の作成に失敗したため,実行を中止します。
グリッドクライアント実行ホストが,JP1/AJS3に返す終了コードについては,「9.5.2 グリッド開始ジョブの終了コード」を参照してください。
(2) グリッド開始ジョブの実行前の準備
-
グリッドジョブ前処理プログラムは,グリッドジョブ管理ホストに配置してください。
-
グリッドジョブ前処理プログラムは,ジョブマネージャデーモンを起動したアカウントの権限,またはグリッド開始ジョブを実行したユーザの権限で実行されます。そのため,プログラム,スクリプトおよび入出力するファイルに,適切なパーミッションを設定してください。
-
グリッドジョブ前処理プログラムには通常ファイルを指定してください。
(3) グリッド開始ジョブの定義のポイント
グリッド開始ジョブの定義で,次に示す項目を指定する際のポイントを説明します。
-
グリッドプロパティ名
-
グリッドジョブ管理ホスト名
-
グリッドジョブ前処理プログラム
(a) グリッドプロパティ名
グリッド開始ジョブを実行した場合,同じ名称のグリッドプロパティが存在したときには,グリッド開始ジョブが終了コード87で終了します。この場合に,後続のグリッド実行ジョブが実行されないように,しきい値を設定してください。
(b) グリッドジョブ管理ホスト名
グリッドジョブ前処理プログラムは,グリッドジョブ管理ホスト名に指定したホストで動作します。そのため,ファイルの分散ができるホストを指定してください。なお,データの分散処理(メモリへの常駐など)を,グリッドジョブ管理ホストではなく,各実行ノードで行う場合は,グリッドジョブ前処理プログラムで分散ファイルを作成する必要はありません。
(c) グリッドジョブ前処理プログラム
グリッドジョブ前処理プログラムの実行ファイル名をフルパスで指定します。グリッドジョブ前処理プログラムはグリッドジョブ管理ホスト上で動作するため,ジョブの実行までにグリッドジョブ管理ホスト上に用意してください。
グリッド前処理プログラムの実行にBJEXは使用できません。
LinuxまたはAIXで,ジョブを強制終了した場合,グリッドジョブ前処理プログラムとして実行しているプロセスはSIGTERMシグナルで停止します。CANCEL_WAIT_TIMEパラメータで指定した監視時間を経過しても停止しない場合は,SIGKILLシグナルで停止します。
(4) データ配置情報の形式
グリッドジョブ前処理プログラムからバッチジョブ分散実行システムに渡されるデータ配置情報の形式を次に示します。
(a) 形式
- フォーマット識別子が0101または0201の場合
# コメント △0FORMATID△0=△0フォーマット識別子△0 △0データ識別子△0,△0{実行ノード名[△0,△0実行ノード名[△0,△0実行ノード名△0,・・・]] | *}△0[;データ識別情報] △0データ識別子△0,△0{実行ノード名[△0,△0実行ノード名[△0,△0実行ノード名△0,・・・]] | *}△0[;データ識別情報] : : △0*△0=△0実行ノード名,[△0,△0実行ノード名[△0,△0実行ノード名△0,・・・]]△0
- フォーマット識別子が0102または0202の場合
# コメント △0FORMATID△0=△0フォーマット識別子△0 △0データ識別子△0,[△0スケジュール優先順位]△0,[△0リソース名]△0,△0{実行ノード名[△0,△0実行ノード名・・・] | *}△0[;データ識別情報] △0データ識別子△0,[△0スケジュール優先順位]△0,[△0リソース名]△0,△0{実行ノード名[△0,△0実行ノード名・・・] | *}△0[;データ識別情報] : : △0*△0=△0実行ノード名[△0,△0実行ノード名,・・・]]△0
- (凡例)
-
△0:0文字以上の空白文字を指定します。空白文字は省略できます。
-
行の先頭1文字目が「#」の場合は,コメント行として扱われます。
-
最大行数は,コメント行,フォーマット識別子の指定行および空行も含めて4,096行です。
-
データ配置情報に記述できるバイト数は,最大45,088,768byte(43MBbyte)です。
-
空行は無視されます。
-
改行はLinuxまたはAIXの場合は「LF」,Windowsの場合は「CRLF」です。
-
文字コードはASCIIコードです。ただし,データ識別情報は半角カタカナ,JIS X 0208-1990も使用できます(改行コードおよびNULL文字(’\0’)は除く)。データ識別子とデータ識別情報は,環境変数値としてユーザプログラムが情報を引き継げるように考慮した文字を使用してください。
-
次に示す区切り文字は,すべて「,(半角コンマ)」です。
-
データ識別子と実行ノード名の区切り
-
実行ノード名を複数指定する場合の区切り
-
データ識別子と「*」の区切り
-
-
実行ノード名とデータ配置情報の区切りは,「;(半角セミコロン)」です。
-
次に示す空白は,コメント行以外では無視されます。
-
行の先頭の空白
-
「=」の前後の空白
-
「,(半角コンマ)」の前後の空白
-
行末の空白
-
-
データ配置情報には最大128種類の実行ノード名を記述できます。
(b) 項目
-
FORMATID=フォーマット識別子
データ配置情報のフォーマットとスケジュール方法を識別するためのIDです。コメント行を除いた先頭行に記述する必要があります。
バッチジョブ分散処理システムのバージョンとフォーマット識別子に指定する値の対応を次の表に示します。
表5‒1 バッチジョブ分散実行システムのバージョンとフォーマット識別子に指定する値の対応 バッチジョブ分散実行システム
のバージョン
フォーマット識別子
に指定する値
02-00
-
0101
-
0102
02-01以降
-
0101
-
0102
-
0201
-
0202
-
-
データ識別子
分割したデータ(データ群)を識別するための識別子を1〜31文字の任意の文字列で指定します。データ識別子は,通し番号を含めるなどグリッドプロパティ内でユニークな名称を指定します。
データ識別子は,UGPSM_DATAID環境変数に設定されて,サブジョブとともに実行ノードに投入されます。
データ識別子で使用できる文字の種別を次の表に示します。それ以外の文字を使用した場合は,形式エラーとなります。
表5‒2 データ識別子で使用できる文字の種別 フォーマット識別子
使用できる文字の種別と形式
-
0101
-
0102
-
0201
-
0202
英字,数字,_(アンダースコア),.(ピリオド)
また,データ識別子が重複した場合は,形式エラーとなります。
-
-
実行ノード名
分割データが配置されている実行ノード名を1〜31文字の任意の文字列で指定します。実行ノード名には,グリッドジョブ管理ホストのシステム共通定義(betranrc)のall_nodeオペランドに指定されているノードで起動するノードマネージャSPPのサービスグループ名を指定します。実行ノード名は複数指定できます。先頭から順に実行優先度が高いものとして扱われます。1行に同一の実行ノード名を複数指定した場合は,形式エラーとなります。
実行ノードのノードマネージャSPPが複数面起動されている場合は,ノードマネージャSPPのサービスグループ名(ユーザサービス定義(UGPSMndm)のservice_group設定値)を指定します。フォーマット識別子が0102または0202の場合に実行ノード名を複数指定すると,先頭実行ノードが未起動といった理由で使用できないときだけ,後続に指定された実行ノードが使用されます。
実行ノード共有機能を適用する場合は,ほかの兼用ホストで起動する実行ノード名は指定しないでください。
-
*(アスタリスク)
実行ノードをグループ化して使用する場合に指定します。
次のように記述することで,複数実行ノードをグループ化します。
△0*△0=△0実行ノード名[△0,△0実行ノード名[△0,△0実行ノード名△0,・・・]]△0
先頭行以外であればどの行でも記述できます。ただし,この記述を複数行指定すると形式エラーとなります。
グループ化した実行ノードを指定する場合,フォーマット識別子によって指定方法が異なります。
- フォーマット識別子が0101または0201の場合
-
データ識別子△0,△0*△0
- フォーマット識別子が0102または0202の場合
-
データ識別子,[スケジュール優先順位], [リソース名], *
-
データ識別情報
フォーマット識別子が0101または0102の場合は,データ識別情報を0〜256byteの任意のバイト列で1つだけ指定できます。データ識別情報は,UGPSM_DATAINFO環境変数に設定されて,サブジョブとともに実行ノードに投入されます。
フォーマット識別子が0201または0202の場合は,データ識別情報を0〜256byteの任意のバイト列で32個まで指定できます。データ識別情報を複数個指定する場合は,各データ識別情報は設定ファイルのDATAINFO_DELIMITERパラメータに指定した区切り記号(任意のバイト列)で区切ります。データ識別情報は,区切り記号で区切った順にUGPSM_DATAINFO環境変数,UGPSM_DATAINFO02環境変数〜UGPSM_DATAINFO32環境変数に設定されて,サブジョブとともに実行ノードに投入されます。ただし,任意のバイト列は,改行コードおよびNULL文字('\0')は終端文字として扱うため,列に含めることができません。
-
スケジュール優先順位
フォーマット識別子が0102または0202の場合に,サブジョブを実行する優先順位を0〜4294967295の数字で指定します。このとき,レコード数やファイルサイズで指定することもできます。値の大きなサブジョブから優先的に実行されます。フォーマット識別子が0101または0201を指定した場合は,優先順位として扱われません。
すべてのデータ識別子のスケジュール優先順位を省略するか,または0を指定した場合は,データ識別子の順番でサブジョブが実行されます。
スケジュール優先順位を指定した行とスケジュール優先順位を省略した行が混在している場合は,0以外を指定したサブジョブが優先的に実行されます。0を指定したサブジョブおよび指定を省略したサブジョブは同等の扱いとなり,0以外を指定したサブジョブのあとに実行されます。
スケジュール優先順位を省略する場合は,次のように指定します。
データ識別子,,[リソース名], 実行ノード名または*
-
リソース名
フォーマット識別子が0102または0202の場合,サブジョブに指定されたリソース名を基に同時に実行するサブジョブを制限するときに,リソース名を1〜63文字の任意の文字列で指定します。使用できる文字の種別は英字,数字,_(アンダースコア),.(ピリオド)です。リソース名を省略した場合は,リソース名による制御は実行されません。
1つのデータ配置情報内でリソース名の有無を混在している場合,同じリソース名が指定されたサブジョブは実行されませんが,リソース名が省略されたサブジョブは同時に実行されます。
(c) 指定例
番号に沿って説明します。
-
フォーマット識別子を指定する。
-
コメント行を指定する。
-
データ識別子DATA0001に実行ノード名Node1とNode2を指定する。データ識別情報にtable1,table2,table3を指定する。
-
データ識別子DATA0002にグループ化した実行ノードを指定する。データ識別情報にtable4を指定する。
-
データ識別子DATA0003に実行ノード名Node3を指定する。
-
実行ノードNode1,実行ノードNode2,実行ノードNode3をグループ化する。