主キー一覧ファイルは、Hadoop入力ファイルに含まれる主キーが定義されたファイルです。このファイルを作成することで、キー分布を考慮し自動的に最適な条件に振り分けたり、キーごとに異なるタスクへ振り分けたりすることができます。
主キー一覧ファイルの作成方法には、以下の2つがあります。
参考
主キー一覧ファイルはジョブ実行時に自動的にサイドデータとして各スレーブサーバに配布されます。このため、利用者がサイドデータとして指定したり、各スレーブサーバにコピーしたりする必要はありません。
主キー一覧ファイルに定義されていない主キーは、自動的にスペアReduceタスクに振り分けられます。
主キー一覧ファイル作成シェルは、主キー一覧ファイルを作成するHadoopジョブを実行するシェルです。
主キー一覧ファイル作成シェルは、以下のパスに格納されています。
/opt/FJSVcbl64/bin/cobmkmlist.sh
主キー一覧ファイル作成シェルには、利用するHadoopで提供されているcommons-loggingのjarファイルとhadoop-coreのjarファイルを定義する必要があります。
初めて実行する場合やHadoopのバージョンを変更する場合、Hadoop実行シェルをテキストエディタで開き、以下の行の右辺を利用可能なcommons-loggingおよびhadoop-coreのjarファイルのパスに修正してください。
class_path_log=”/usr/share/hadoop-1.2.1/lib/commons-logging-1.1.1.jar” class_path_core=”/usr/share/hadoop-1.2.1/hadoop-core-1.2.1.jar”
注意
主キー一覧ファイル作成シェルの修正には、root権限が必要です。
デフォルトでは、commons-loggingのjarファイルとして「commons-logging-1.1.1.jar」、hadoop-coreのjarファイルとして「hadoop-core-1.2.1.jar」が定義されています。
主キー一覧ファイル作成シェルには、MapReduce設定ファイルをパラメタに指定して実行します。MapReduce設定ファイルの指定を省略することはできません。
$ cobmkmlist.sh -conf MapReduce設定ファイル
主キー一覧ファイル作成シェルは、シェルの戻り値としてジョブが成功すると「0」を、失敗すると「0以外」を返します。
主キー一覧ファイル作成シェルのジョブが成功すると、「主キー一覧ファイルの指定」に指定したディレクトリに作成されます。
主キー一覧ファイル作成シェルを実行すると、振分け機能によって性能が改善できる見込みが表示されます。
振り分け機能が有効な場合の表示例
入力ファイルのキー分布を分析した結果、自動的に最適な条件に振り分けることで性能が改善できる見込みは「80%」です。
振り分け機能が有効ではない場合の表示例
入力ファイルのキー分布を分析した結果、自動的に最適な条件に振り分けを行う効果は見込めません。
なお、ここに表示されるのはキーの分布のみを考慮した理論値であり、改善出来る見込みが「100%」と表示された場合でも、実際にはHadoopジョブのオーバヘッド等によってジョブ時間が短縮できない場合があります。
MapReduce設定ファイルで定義する情報は以下のとおりです。各設定の詳細はMapReduce設定ファイルを参照してください。
設定名 | 意味 | 指定 | |
---|---|---|---|
extjoiner.input.nn.filename | Hadoop入力データファイル名 (*1)(*2) | 必須 | |
mapred.output.dir | Hadoop出力データファイル格納基準ディレクトリ名(*1)(*3) | 必須 | |
extjoiner.map.input.nn.filename | Map入力データファイル識別名(*4) | 任意 | |
extjoiner.map.output.nn.filename | Map出力データファイル識別名(*4) | 任意 | |
com.fujitsu.netcobol.hadoop.sortkey.nn.main | Shuffle&sortで使用する主キーの情報 | 必須 | |
extjoiner.mainkeylist | 主キー一覧ファイルのファイル名(*1) | 必須 | |
extjoiner.map.streamprocessor.nn | Mapアプリケーション名(*5) | 任意 | |
extjoiner.command.retryexitstatus | Mapアプリケーションから返される復帰値により、Mapアプリケーションの再実行を行うかどうかのしきい値を指定します | 任意 | |
extjoiner.map.environment | Mapアプリケーションの環境変数を指定します | 任意 | |
extjoiner.input.nn.format | Hadoop入力データファイルのファイル編成 | 任意 | |
extjoiner.map.output.nn.format | Map出力データファイルのファイル編成 | 任意 | |
extjoiner.input.nn.recordlength | Hadoop入力データファイルのレコード長 | 任意 | |
extjoiner.map.output.nn.recordlength | Map出力データファイルのレコード長 | 任意 | |
extjoiner.input.nn.recinfdir | Hadoop入力データファイルのレコード長情報ファイルの格納ディレクトリ名(*1) | 任意 | |
extjoiner.input.nn.codeset | Hadoop入力データファイルの文字コード | 任意 | |
extjoiner.map.output.nn.codeset | Map出力データファイルの文字コード | 任意 | |
extjoiner.csv.separator | CSVデータのセパレータを指定する | 任意 | |
extjoiner.partitioner.csv.padding | CSVデータの振り分け処理における主キーの空白の扱い | 任意 | |
extjoiner.csv.floatfield | 浮動フィールド指定 | 任意 |
(*1):DFS上のパス名を指定します。
(*2):ディレクトリ名を指定することもできます。ディレクトリを指定した場合、そのディレクトリ内のファイルすべてが入力ファイルとして扱われます。
(*3):主キー一覧ファイル作成シェルから実行されるHadoopジョブが一時的に作業用ディレクトリとして使用します。主キー一覧ファイル作成シェルの終了後、自動的に削除されます。
(*4):Mapアプリケーションで使用しているファイル識別名を指定します。
(*5):Mapアプリケーションで使用しているアプリケーションを指定します。
参考
主キー一覧ファイル作成シェルを実行中に「Ctrl+C」キーを入力することにより、タスクを中断させることができます。
主キー一覧ファイル作成シェルの引数には、汎用Hadoopコマンドラインオプションを指定することができます。詳細は「Hadoopジョブの実行」の参考を参照してください。
主キー一覧ファイルはCSV形式のテキストファイルです。テキストエディタなどを使用して新規作成、編集が可能です。主キー一覧ファイルには主キーの値と主キーの割合を指定します。
主キーにABCDEと、主キーの割合に50を指定した主キー一覧ファイルの例:
"ABCDE",50
主キーの値
主キーの値を指定します。主キーを複数指定している場合は、カンマで切って指定します。
主キー一覧ファイルに指定する主キーの値は、桁数を含めキー値と完全に一致させる必要があります。
主キーの値の指定には、以下の2とおりの方法があります。
ダブルクォーテーションで囲んで指定する
ファイル編成と主キーの属性が以下の時、ダブルクォーテーションで囲んで指定することができます。
すべてのMap出力データファイルのファイル編成が行順ファイルの場合
英数字項目、外部10進項目、内部10進項目、CSV、CSVN
Map出力データファイルのファイル編成に、行順ファイル以外のファイル編成をひとつでも含む場合
外部10進項目、内部10進項目
バイナリ値で指定する
ダブルクォーテーションで囲んで指定できない主キーの値のみ、バイナリ値で指定することができます。プレフィックスに「0x」を付加してバイナリ値(0~F)で指定します。
主キーの割合
主キーの割合または件数を数値で指定します。
割合は、最適なタスクの実行をスケジュールするため利用されます。
例
Map出力データファイルのファイル編成が行順ファイルで、主キーに英数字項目(文字)と、符号つき外部10進項目を指定した場合の主キー一覧ファイル
; この行はコメントです "CCCCC","+1234",30000 "AAAAA","+0000",7000 "BBBBB","-1234",50000
Map出力データファイルのファイル編成が行順ファイルで、主キーに英数字項目(バイナリ値)と、符号なし内部10進項目を指定した場合の主キー一覧ファイル
; この行はコメントです 0xFFFDF3,"01234",30000 0xFEFDF1,"00000",7000 0xFFFDF2,"01234",50000
注意
主キー一覧ファイルの文字コードは、Unicode(UTF-8)で作成する必要があります。
主キー一覧ファイルの改行文字は、1バイトの改行コード(0x0A)で作成する必要があります。
主キー一覧ファイルは、BOM(Byte Order Mark)付きUnicode(UTF-8)、BOMなしUnicode(UTF-8)のどちらでも利用可能です。
主キー一覧ファイルの行の先頭1バイトがセミコロン(;)のとき、その行の先頭から改行までの間はコメントとして認識されます。
内部10進項目は、1バイトあたり2桁の数字が含まれます。主キー一覧ファイルに内部10進項目をダブルクォーテーションで囲んで指定する場合、上位桁に0を補って整数の桁数(符号を除く)を奇数桁で指定してください。
主キー一覧ファイルには、主キーの値と主キーの割合のみを指定できます。コメント行以外には、空白などの文字を含めることはできません。
主キー一覧ファイルに主キーの値をダブルクォーテーションで囲んで指定する場合で、キーの値にダブルクォーテーションを含む場合には、キーの値のダブルクォーテーションを2重にする必要があります。