付録A.2 グリッドジョブ開始処理のカスタマイズ
デフォルトのスクリプトファイル(グリッドジョブ前処理プログラム)を,GUIを使ってカスタマイズします。
(1) 分割ファイル格納ディレクトリの作成
分割ファイル格納ディレクトリの作成は,gpdivdirmkコマンドを実行することで処理されます。グリッドジョブ前処理プログラムにグリッドプロパティ識別子を指定してgpdivdirmkコマンドを実行すると,分割ファイル格納ディレクトリが作成されます。gpdivdirmkコマンドについては,8章の「gpdivdirmk(分割ファイル格納ディレクトリ作成コマンド)」を参照してください。
分割ファイル格納ディレクトリは,設定ファイルのDISTRIBUTE_DIRパラメータで指定します。分割ファイル格納ディレクトリは,単体グリッドジョブごとにユニークな領域となります。
(2) データ分割の仕組み
GUIで設定した自動分散定義の内容やグリッドジョブ管理ホストの設定内容を基に,SORT EEコマンドを使うことで,入力ファイルを分割します。デフォルトのスクリプト(グリッドジョブ前処理プログラム)を使用したデータ分割処理の概要を次の図に示します。
図に従い,データ分割の処理を説明します。
- GUIで設定した自動分散の定義
-
入力ファイル名:/tmp/imput/intra
分割数:10
この入力ファイル名と分割数は,ジョブマネージャデーモンがそれぞれUGPSM_DIVIN環境変数,UGPSM_DIVCNT環境変数として設定します。これらは,グリッドジョブ前処理プログラムから参照されます。また,設定ファイル(ugpsm.conf)で設定したDISTRIBUTE_DIRパラメータおよびSORT_TMPDIRパラメータの値も同様に,ジョブマネージャデーモンがそれぞれUGPSM_DDIR環境変数,UGPSM_SDIR環境変数として設定し,グリッドジョブ前処理プログラムから参照されます。
入力ファイルが存在しない,またはジョブ実行ユーザに対して入力ファイルへの参照権限がない場合は,SORT EEコマンドがエラーとなります。このとき,デフォルトのグリッドジョブ前処理プログラムの終了コードは,コマンドの終了コードと同じ値となります。エラー発生時は,グリッドジョブ識別子ごとに出力する一時エラーメッセージファイル,またはSORT EEのログファイルを確認して対処してください。また,SORT EEコマンドがエラーとなった場合は,分割ファイルの格納先ディレクトリは,自動分散用のグリッドジョブ前処理プログラムのスクリプトによって,分割ファイル格納ディレクトリの削除コマンドを実行して削除することを推奨します。
指定した分割数が入力ファイルのレコード数より少ない場合は,指定した分割数よりも少ないファイル数に分割されます。例えば,100レコードの入力ファイルに対して分割数を120と指定した場合,分割後のファイル数は100となります。
分割したファイルは,DISTRIBUTE_DIRパラメータで設定した分割ファイル格納ディレクトリに保存されます。このとき,ファイル名は,データ配置情報のデータ識別子として使用できるよう,「グリッドプロパティ識別子+SORT EEが付与する8桁の追番」となります。
データ分割処理で使用するSORT EEコマンドのパラメータを次の表に示します。
コマンド名 |
パラメータ |
オペランド |
指定値 |
説明 |
---|---|---|---|---|
exsort64 |
-function |
− |
copy |
コピー処理を使用します。 |
-splitfile |
fileno |
${UGPSM_DIVCNT} |
分割するファイル数を指定します。uGPS - Viewの[自動分散定義]ダイアログボックスで指定した分割数を設定します。
|
|
method |
filesize |
分割基準として,入力ファイルのファイルサイズを使用します。 |
||
-splitinp |
fileorg |
C |
入力ファイルのファイル編成として,CSVファイルを使用します。ただし,テキストファイルも使用できます。 |
|
file |
${UGPSM_DIVIN} |
入力ファイル名を指定する。uGPS - Viewの[自動分散定義]ダイアログボックスで指定した入力ファイル名を設定します。 |
||
-splitout |
prefix |
${UGPSM_DDIR}/${UGPSM_GRIDPROPID}/IN/${UGPSM_GRIDPROPID} |
分割後の出力ファイルおよび出力ファイル名の接頭字を格納するディレクトリ名を指定します。DISTRIBUTE_DIRパラメータで指定したパス名に,「/${UGPSM_GRIDPROPID}/IN/${UGPSM_GRIDPROPID}」を追加した値を設定します。※ |
|
-splittmpdir |
${UGPSM_SDIR} |
ファイル分割用一時ファイルのディレクトリを指定します。SORT_TMPDIRパラメータで指定した値を設定します。 |
データ分割処理で使用する,SORT EEの環境変数を次の表に示します。
環境変数名 |
対応するコマンドのパラメータ |
説明 |
対応 |
---|---|---|---|
EXSORT64MSGOPT |
− |
コマンド実行時のメッセージ抑止オプションを指定します。※ |
「8」を設定します。 |
EXSORT64MGTOPT |
-cmdopt NOLOCK |
チェック機能の緩和に関するオプションを指定します。 SORT,SORT EE,COBOL,ISAMプログラムの処理間での,入出力ファイルのオープンモードを指定できます(NOLOCK/EXC)。 |
無効化します。 |
EXSORT64SUPPRESSSPLITMSG |
− |
ファイル分割終了時,KBLS1010-Iメッセージの出力を抑止します。 |
「YES」を設定します。 |
EXSORT64NOCREATEZEROFILE |
− |
ファイル分割後の出力ファイルに格納するレコード件数が0件の場合,出力ファイルの作成を抑止します。 |
無効化します。 |
EXSORT64FILESPLITNUMB |
− |
ファイル分割時,出力ファイル名に付加する追番の桁数を指定します。 |
無効化します。 |
EXSORT64SPLITTMPDIR |
-splittmpdir |
ファイル分割用一時ファイルのディレクトリを指定します。 |
無効化します。 |
EXSORT64SPLITTMPIOSIZE |
-iosize splittmpiosize |
ファイル分割用一時ファイルに対する1回のI/Oサイズを指定します。 |
無効化します。 |
設定値 |
意味 |
---|---|
2 |
メッセージを出力しない |
3 |
EXSORT64MGTOPTで指定したファイルに全メッセージを出力する |
4 |
EXSORT64MGTOPTで指定したファイルにエラーメッセージを出力する |
7 |
標準エラー出力に全メッセージを出力する |
8 |
標準エラー出力にエラーメッセージを出力する |
9 |
標準出力に全メッセージを出力する |
10 |
標準出力にエラーメッセージを出力する |
11 |
標準出力に正常終了メッセージを出力する |
13 |
EXSORT64MGTOPTで指定したファイルに正常終了メッセージを出力する |
15 |
標準エラー出力に正常終了メッセージを出力する |
16 |
標準出力に正常終了メッセージ,標準エラー出力にエラーメッセージを出力する |
(3) データ配置情報の生成
SORT EEコマンドで分割したファイルの一覧を取得し,データ配置情報を生成します。デフォルトのスクリプト(グリッドジョブ前処理プログラム)を使用したデータ配置情報の生成処理の概要を次の図に示します。
図に従い,データ配置情報の生成処理を説明します。
- GUIで設定した自動分散の定義
-
実行ノード名:node1,node2
データ識別子は分割ファイル名となり,分割したファイルを格納したパスの一部(DISTRIBUTE_DIR パラメータの指定値/グリッドプロパティ識別子)がデータ識別情報となります。この分割ファイルにアクセスする場合は,${UGPSM_DATAINFO}/IN/${UGPSM_DATAID}と指定します。
実行ノードは,GUIで設定した実行ノード名(ここではnode1,node2),または設定ファイル(ugpsm.conf)のNODE_GROUPパラメータの設定値が,実行ノードグループとして設定されます。両方に値が設定されている場合は,GUIで設定した実行ノード名が優先されます。
データ配置情報に設定する項目について次の表に示します。
項目 |
指定値 |
説明 |
---|---|---|
フォーマット識別子 |
FORMATID=0101 |
0101を設定します。なお,0102を指定した場合,フォーマット識別子不正のエラーになります。 |
データ識別子 |
分割した入力ファイル名 |
「グリッドプロパティ識別子_8桁の固定長の数字」を設定します。 |
実行ノード名 |
* |
実行ノードグループを設定します。 |
データ識別情報 |
${UGPSM_DDIR}/${UGPSM_GRIDPROPID} |
グリッドプロパティ識別子ごとの分割ファイルを格納する作業用ディレクトリを設定します。DISTRIBUTE_DIRパラメータで指定したパス名/グリッドプロパティ識別子が設定されます。 |
実行ノードグループ |
${UGPSM_NODEGRP} |
実行ノードグループを設定します。GUIの実行ノード名として設定した値,または設定ファイルのNODE_GROUPパラメータの指定値が設定されます。両方に設定がある場合は,GUIの設定値が優先されます。 |
(4) デフォルトのスクリプト(グリッドジョブ前処理プログラム)
グリッドジョブ前処理プログラムは,JP1/ASを使用して実行します。uGPS - Managerでは,GUIで指定した自動分散の設定内容を${UGPSM_DIVUAP}環境変数で受け取り,ジョブマネージャデーモンまで渡します。この${UGPSM_DIVUAP}環境変数を使ってグリッドジョブを実行するため,次のジョブ定義スクリプトファイル(gpautogs.ash)を提供します。このスクリプトはJP1/ASが作成する一時ファイルを使用します。そのため,JP1/AS以外の/bin/shなどでは動作しません。また,uGPS - ManagerがWindows環境の場合は,PATH環境変数にSORT EEやJP1/ASのパス名を登録しておく必要があります。
-
uGPS - ManagerがLinuxまたはAIX環境の場合
#-adsh_job gpautogs
export PATH=/opt/HIEXSORT64/bin:/opt/jp1as/bin:/opt/jp1as/cmd:/opt/hitachi/ugpsm/bin:${PATH}
#-adsh_step_start GPAUTOGS
#-adsh_file_temp TEMPASH -chk create -normal del
echo "${UGPSM_DIVUAP}" > ${TEMPASH}
adshexec -s PARENT ${TEMPASH}
#-adsh_step_end
-
uGPS - ManagerがWindows環境の場合
#-adsh_job gpautogs
#-adsh_step_start GPAUTOGS
#-adsh_file_temp TEMPASH -chk create -normal del
echo "${UGPSM_DIVUAP}" > ${TEMPASH}
adshexec -s PARENT ${TEMPASH}
#-adsh_step_end
uGPS - Viewが提供するデフォルトのグリッドジョブ前処理プログラムのメイン処理を次に示します。処理内の(n)は行番号を意味します。
-
uGPS - ManagerがLinuxまたはAIX環境の場合
************************************************************************ (1)#-adsh_job gpsplitcnst (2)#-adsh_rc_ignore unset (3)export EXSORT64MSGOPT=8 (4)export EXSORT64SUPPRESSSPLITMSG=YES (5)unset EXSORT64MGTOPT (6)unset EXSORT64NOCREATEZEROFILE (7)unset EXSORT64FILESPLITNUMB (8)unset EXSORT64SPLITTMPDIR (9)unset EXSORT64SPLITTMPIOSIZE (10) (11)#-adsh_file STDERR {UGPSM_SDIR}/{UGPSM_GRIDPROPID}_1 -normal del -abnormal keep (12)#-adsh_file CMDERR {UGPSM_SDIR}/{UGPSM_GRIDPROPID}_2 -normal del -abnormal keep (13) (14)#-adsh_step_start GPCNSTSPLIT (15)## 分割ファイル格納ディレクトリ作成 (16) gpdivdirmk -n ${UGPSM_GRIDPROPID} 2>> ${CMDERR} (17) (18)## ファイル分割(定数分割) (19) exsort64 \ (20) -function copy \ (21) -splitfile fileno=${UGPSM_DIVCNT} method=filesize \ (22) -splitinp fileorg=C file=${UGPSM_DIVIN} \ (23) -splitout prefix=${UGPSM_DDIR}/${UGPSM_GRIDPROPID}/IN/${UGPSM_GRIDPROPID} \ (24) -splittmpdir ${UGPSM_SDIR} 2>> ${CMDERR} (25) (26)## データ配置情報生成 (27) echo "FORMATID=0101" (28) ls ${UGPSM_DDIR}/${UGPSM_GRIDPROPID}/IN/ | sed -e 's@$@'",*;${UGPSM_DDIR}/${UGPSM_GRIDPROPID}"'@' 2>> ${CMDERR} (29) echo "*=${UGPSM_NODEGRP}" (30) (31)#-adsh_step_error (32)## エラー時の後処理 (33) gpdivdirrm -n ${UGPSM_GRIDPROPID} 2>> ${CMDERR} (34) exit (35)#-adsh_step_end ************************************************************************
-
uGPS - ManagerがWindows環境の場合
設定ファイルの指定例
DISTRIBUTE_DIRパラメータ:\\server1\data\divdata
SORT_TMPDIRパラメータ:\\server1\data\tmp
************************************************************************ (1)#-adsh_job gpsplitcnst (2)#-adsh_rc_ignore unset (3)export EXSORT64MSGOPT=8 (4)export EXSORT64SUPPRESSSPLITMSG=YES (5)unset EXSORT64MGTOPT (6)unset EXSORT64NOCREATEZEROFILE (7)unset EXSORT64FILESPLITNUMB (8)unset EXSORT64SPLITTMPDIR (9)unset EXSORT64SPLITTMPIOSIZE (10) (11)#-adsh_file STDERR \\\\\\\\server1\\\\data\\\\tmp\\\\{UGPSM_GRIDPROPID}_1 -normal del -abnormal keep (12)#-adsh_file CMDERR \\\\\\\\server1\\\\data\\\\tmp\\\\{UGPSM_GRIDPROPID}_2 -normal del -abnormal keep (13) (14)#-adsh_step_start GPCNSTSPLIT (15)## 分割ファイル格納ディレクトリ作成 (16) gpdivdirmk -n ${UGPSM_GRIDPROPID} 2>> ${CMDERR} (17) (18)## ファイル分割(定数分割) (19) exsort64 \ (20) -function copy \ (21) -splitfile fileno=${UGPSM_DIVCNT} method=filesize \ (22) -splitinp fileorg=C file=${UGPSM_DIVIN} \ (23) -splitout prefix=\\\\\\\\server1\\\\data\\\\divdata\\\\${UGPSM_GRIDPROPID}\\\\IN\\\\${UGPSM_GRIDPROPID} \ (24) -splittmpdir \\\\\\\\server1\\\\data\\\\tmp 2>> ${CMDERR} (25) (26)## データ配置情報生成 (27) echo "FORMATID=0101" (28) ls \\\\\\\\server1\\\\data\\\\divdata\\\\${UGPSM_GRIDPROPID}\\\\IN\\\\ | sed -e 's@$@'",*;\\\\\\\\\\\\\\\\server1\\\\\\\\data\\\\\\\\divdata\\\\\\\\${UGPSM_GRIDPROPID}"'@' 2>> ${CMDERR} (29) echo "*=${UGPSM_NODEGRP}" (30) (31)#-adsh_step_error (32)## エラー時の後処理 (33) gpdivdirrm -n ${UGPSM_GRIDPROPID} 2>> ${CMDERR} (34) exit (35)#-adsh_step_end ************************************************************************
このスクリプトを次に示すコマンドで実行することで,JP1/ASの標準エラー出力をSORT_TMPDIRパラメータ指定値/グリッドプロパティ識別子_1に,各コマンドの標準エラー出力をSORT_TMPDIRパラメータ指定値/グリッドプロパティ識別子_2に出力します。これらのファイルは,スクリプトが正常終了すれば削除され,エラー終了すれば削除されないで残ります。そのため,定期的にファイルを削除する運用を推奨します。
- コマンドの実行例
-
-
uGPS - ManagerがLinuxまたはAIX環境の場合
/opt/jp1as/bin/adshexec /opt/hitachi/ugpsm/bin/gpautogs.ash 2>> ${UGPSM_SDIR}/${UGPSM_GRIDPROPID}_1
-
uGPS - ManagerがWindows環境の場合
<JP1/ASのインストール先ディレクトリ>\bin\adshexec <uGPS - Managerのインストール先ディレクトリ>\\bin\\gpautogs.ash 2>> ${UGPSM_SDIR}\\${UGPSM_GRIDPROPID}_1
-
このスクリプトをカスタマイズする場合のポイントを次の表に示します。
行番号 |
処理内容 |
カスタマイズのポイント |
---|---|---|
1 |
JP1/ASジョブ名の宣言 |
− |
2 |
JP1/ASを常に正常終了するコマンドの定義 |
スクリプト実行時に未定義のSORT EE環境変数を無効化する際に,コマンドをエラー扱いにしないために必ず「unset」を定義します。ほかにも正常終了させたいコマンドを使う場合に追加します。 |
3〜9 |
SORT EE環境変数の設定 |
カスタマイズ不要ですが,使用したい機能などがある場合は,マニュアル「ソートマージ SORT Version9,SORT Version9 - Extended Edition」を参照してカスタマイズしてください。 |
11,12 |
JP1/AS一時エラーファイルの割り当て |
カスタマイズ不要ですが,一時エラーファイルの出力先を変更したい場合は,カスタマイズしてもかまいません。 uGPS - ManagerがWindows環境の場合は,${UGPSM_SDIR}は設定ファイルのSORT_TMPDIRパラメータの設定値を指定する必要があります。また,パス名の区切り文字として「\\\\」を指定する必要があります。UNC形式の場合,先頭は「\\\\\\\\」と指定してください。 |
14,35 |
JP1/ASジョブステップの宣言 |
− |
16 |
分割ファイル格納ディレクトリの作成 |
− |
19〜24 |
SORT EEファイル分割 |
SORT EEは,分割数で指定した複数の出力ファイルを同時にオープンします。そのため,分割数に大きな値を指定した場合,OSで設定したプロセスごとのファイルディスクリプタ数を超えてエラーになることがあります。この場合は,コマンドオプションに「-cmdopt SEQOPNCLS」を追加して,ファイル逐次OPEN/CLOSE機能を有効にしてください。また,キー分割など高度な使い方をしたい場合は,マニュアル「ソートマージ SORT Version9,SORT Version9 - Extended Edition」を参照してカスタマイズしてください。 uGPS - ManagerがWindows環境の場合は,${UGPSM_DDIR}は設定ファイルのDISTRIBUTE_DIRパラメータの設定値を指定する必要があります。また,パス名の区切り文字として「\\\\」を指定する必要があります。UNC形式の場合,先頭は「\\\\\\\\」と指定してください。 |
27〜29 |
データ配置情報の生成 |
uGPS - ManagerがWindows環境の場合は,${UGPSM_DDIR}は設定ファイルのDISTRIBUTE_DIRパラメータの設定値を指定する必要があります。また,lsコマンドで指定するパス名の区切り文字として「\\\\」,sedコマンドで指定するパス名の区切り文字として「\\\\\\\\」を指定する必要があります。UNC形式の場合,先頭はそれぞれlsコマンドでは「\\\\\\\\」,sedコマンドでは「\\\\\\\\\\\\\\\\」と指定してください。 |
31〜34 |
エラー時の後処理 |
− |