MapReduceアプリケーションからHadoopのユーザー定義カウンタを利用することができます。ユーザー定義カウンタを利用すると、各MapReduceアプリケーションから出力した任意の値を集計することができます。集計した値は、ジョブが成功するとHadoop実行シェルのコンソールに出力されます。(ジョブが失敗した場合、集計値は出力されません)
サブルーチンCOB_HADOOP_COUNTERを使用し、ユーザー定義カウンタを作成します。
呼出し形式
CALL "COB_HADOOP_COUNTER" USING データ名-1 データ名-2 データ名-3.
データ名-1
01 データ名-1 PIC X(1024).
カウンタグループ名を指定します。
データ名-2
01 データ名-2 PIC X(1024).
カウンタ名を指定します。
データ名-3
01 データ名-3 PIC S9(18) COMP-5.
カウンタ値を指定します。
インタフェース
グループ名およびカウンタ名には、カンマ(,)は使用できません。また、前置・後置空白は削除されます。
グループ名およびカウンタ名のレコード長は1024バイトに設定してください(1024文字を超えるデータが渡された場合、1024文字に切り詰められます)。また、前置・後置空白削除後に文字列の長さが0となるような名前は指定できません。
復帰値
サブルーチンからの復帰値は、特殊レジスタPROGRAM-STATUSを使用して受け取ります。
成功した時は0が返されます。失敗した場合の復帰値とエラーの原因は以下のとおりです。
値 | 意味 |
1 | Hadoopタスクで起動したアプリケーションではないため、カウンタ情報書き出しは行われませんでした。 |
2 | グループ名に不正な文字列が指定されています。 |
3 | グループ名の文字列に空文字が指定されました。 |
4 | カウンタ名に不正な文字列が指定されています。 |
5 | カウンタ名の文字列に空文字が指定されました。 |
6 | カウンタ情報ファイルのオープンに失敗しました。 |
7 | カウンタ情報の書き出しに失敗しました。 |
注意
リンクに関する注意事項
サブルーチンCOB_HADOOP_COUNTERを使用するプログラムを作成する場合、共用ライブラリのリンク時に、librcobee.soをリンクしてください。librcobee.soは、NetCOBOLランタイムシステムのインストールディレクトリに格納される共用ライブラリです。
COBOL以外のアプリケーションからの呼び出し
COBOL以外の言語からカウンタ情報を設定する場合、カウンタ情報設定ファイル(環境変数MAPRED_COUNTER_FILE)に、以下の書式でカウンタ情報の追加書き込みを行ってください。
グループ名,カウンタ名,カウンタ値
例)シェルスクリプトからカウンタを利用する場合
echo “MYGROUPE, MYCOUNTER,100” >> $MAPRED_COUNTER_FILE
(グループ名=MYGROUPE カウンタ名=MYCOUNTER カウンタ値=100を設定)
書式エラー時の警告
カウンタ情報設定ファイルに直接カウンタ情報を書き込む際、書き込み書式が守られていなかった場合でも、ジョブは正常終了します。この場合、カウンタ情報の集計失敗を通知するメッセージが表示され、各エラーの件数を以下のカウンタ情報として出力します。エラーの詳細はタスクログを参照してください。
カウンタグループ名 | カウンタ名 | 意味 |
Extjoiner.userCounter.FormatError | Map.CommaNumError | Mapタスクのカウンタ値の書式に誤りがあります。 |
Map.NumberFormatException | Mapタスクのカウンタ値が数値に変換できませんでした。 | |
Reduce.CommaNumError | Reduceタスクのカウンタ値の書式に誤りがあります。 | |
Reduce.NumberFormatException | Reduceタスクのカウンタ値が数値に変換できませんでした。 |
注意
カウンタ情報設定ファイルにカウンタ情報を追加する際は、必ず追加書き込みモードを使用してください。追加書き込みモードを使用せず、カウンタ情報設定ファイルを上書きすると、それまでに設定されていたカウンタ情報は消去されます。
正しくない例)
echo “MYGROUPE, MYCOUNTER,100” > $ MAPRED_COUNTER_FILE
この場合、追加書き込みとなっていないため、これまで同タスク内で設定されたカウンタ情報がすべて削除されます。