Hadoop で DFS を使用するために設定する Configuration ファイルの設定について説明します。
Configuration ファイルには以下のものがあります。これらのファイルを“/etc/hadoop”ディレクトリに配置します。
Configuration ファイルの種類
それぞれのファイルで設定する項目について説明します。
hadoop-env.sh ファイル
“hadoop-env.sh”ファイルでは、以下の環境変数を設定してください。
export HADOOP_CLASSPATH="$HADOOP_CLASSPATH:/opt/FJSVpdfs/lib/pdfs.jar" export HADOOP_USER_CLASSPATH_FIRST="true" export HADOOP_SSH_OPTS="-o StrictHostKeyChecking=no -o BatchMode=yes"
また、必要に応じて JAVA_HOME も設定してください。
export JAVA_HOME=/usr/java/default
core-site.xml ファイル
“core-site.xml”ファイルで設定するプロパティについて説明します。
デフォルトのファイルシステムを、"pdfs://<directory>/" の形式で指定します(<directory> 部分は省略可能)。
デフォルトファイルシステムとは、URI 形式ではないパス指定において、URI パス決定に使用されます。
例えば、fs.default.name が "pdfs:///" と設定されている場合、パス "/mydir/myfile" は "pdfs:///mydir/myfile" という URI に決定されます。
file:///
<property> <name>fs.default.name</name> <value>pdfs:///</value> </property>
DFS 用のファイルシステムクラスを、任意の Scheme に割り当てます。
値には、com.fujitsu.pdfs.fs.PdfsDirectFileSystem を指定します。
例えば、"fs.pdfs.impl" という名前のプロパティとして設定した場合、"pdfs:///mydir/myfile" のような URI でパス指定することになります。
<property> <name>fs.pdfs.impl</name> <value>com.fujitsu.pdfs.fs.PdfsDirectFileSystem</value> </property>
Read/Write 時のデフォルトバッファサイズを指定します。
4096(Byte) の倍数
4096
128KB
<property> <name>io.file.buffer.size</name> <value>131072</value> </property>
Hadoop で使用する一時ファイル格納用のディレクトリを指定します。
/tmp/hadoop-<ユーザ名>
デフォルト
<property> <name>hadoop.tmp.dir</name> <value>/var/tmp/hadoop-${user.name}</value> </property>
mapred-site.xml ファイル
“mapred-site.xml”ファイルで設定するプロパティについて説明します。
TaskTracker が MapReduce ジョブを実行している間に一時データと Map 中間出力ファイルを保存するディレクトリを指定します。
ディレクトリには、ローカルディスク内のディレクトリ(複数可)を指定します。
${hadoop.tmp.dir}/mapred/local
内蔵ディスク上のディレクトリ/mapred/local
注意
指定パスに ${user.name} を含めないようにしてください。
例)3つの内蔵ディスクが /data/1、/data/2、/data/3 にマウントされている場合
<property> <name>mapred.local.dir</name> <value>/data/1/mapred/local,/data/2/mapred/local,/data/3/mapred/local</value> </property>
MapReduce 処理の制御ファイルを格納するディレクトリを指定します。
${hadoop.tmp.dir}/mapred/system
/mapred/system
<property> <name>mapred.system.dir</name> <value>/mapred/system</value> </property>
ユーザごとに MapReduce ジョブ情報ファイルを格納するディレクトリのトップディレクトリを指定します。
ジョブ情報ファイルは、“${mapreduce.jobtracker.staging.root.dir}/<ユーザ名>/mapred/staging”ディレクトリに格納されます。
${hadoop.tmp.dir}/mapred/staging
pdfs.fs.local.homedir プロパティと同じ(デフォルト:/user)(pdfs.fs.local.homedir 参照)
<property> <name> mapreduce.jobtracker.staging.root.dir</name> <value>/user</value> </property>
JobTracker が動作する RPC サーバのホスト名とポート番号を、host:port (port は省略不可)の形式で指定します。ポート番号には 1024 ~ 61000 の間で未使用のポート番号を指定してください。
<property> <name>mapred.job.tracker</name> <value>host1:50001</value> </property>
1ノードで並列実行する Map タスク数を指定します。
2
次のうち大きい方です。
CPU のコア数-1
CPU のコア数は、"cat /proc/cpuinfo"で確認できます。
DFS を構成する全物理ディスク数÷ Hadoop クラスタの Slave ノード数(小数点以下切上げ)
全物理ディスク数とは、例えばディスク装置側で RAID-1 のミラー構成の場合、2×LUN 数となります。
<property> <name>mapred.tasktracker.map.tasks.maximum</name> <value>8</value> </property>
1ノードで並列実行する Reduce タスク数を指定します。
2
次のうち大きい方です。
CPU のコア数-1
CPU のコア数は、"cat /proc/cpuinfo"で確認できます。
DFS を構成する全 LUN 数÷ Hadoop クラスタの Slave ノード数(小数点以下切上げ)
<property> <name>mapred.tasktracker.reduce.tasks.maximum</name> <value>4</value> </property>
Map タスクの Speculative 実行を有効にするかを指定します。
"true" の場合、実行するタスクに空きがあるノードに、現在実行中の Map タスクと同じタスクを並列に処理させ、先に完了した方を採用します。
true(有効)
Hadoop クラスタで利用する MapReduce ジョブで、Map タスクの中から直接 DFS 上のファイルに Write する処理がある場合は "false" を指定してください。
どちらか不明な場合は "false" を指定してください。
<property> <name>mapred.map.tasks.speculative.execution</name> <value>false</value> </property>
Reduce タスクの Speculative 実行を有効にするかを指定します。
"true" の場合、実行するタスクに空きがあるノードに、現在実行中の Reduceタスクと同じタスクを並列に処理させ、先に完了した方を採用します。
true(有効)
Hadoop クラスタで利用する MapReduce ジョブで、Reduce タスクの中から直接 DFS 上のファイルに Write する処理がある場合は "false" を指定してください。
どちらか不明な場合は "false" を指定してください。
<property> <name>mapred.reduce.tasks.speculative.execution</name> <value>false</value> </property>
MapReduce タスクログの 1 タスクあたりの最大ログサイズを指定します。Hadoop の制御方式の関係で、実際のログサイズが指定した値より少し大きくなる場合があります。
MapReduce タスクログは、$HADOOP_LOG_DIR/userlogs ディレクトリ配下に作成されます。
1(KB) 以上
0(制限なし)
1000(1MB) 程度(約 1 万行分)
一般的な利用範囲では十分な大きさですが、MapReduce ジョブのログ出力量に応じて調節してください。
<property> <name>mapred.userlog.limit.kb</name> <value>1000</value> </property>
MapReduce タスクログの保存期間を指定します。タスクログは、MapReduce ジョブのエラー原因の調査に必要となる場合があります。
MapReduce タスクログは、$HADOOP_LOG_DIR/userlogs ディレクトリ配下に作成されます。
保存時間
24(時間)
168(1 週間分)程度
指定した時間が短いと、過去のジョブを調査するときに、必要な情報を得られない場合があります。ただし、ログを保存するために使用できるディスク容量(HADOOP_LOG_DIR ディレクトリのあるディスク容量)との兼ね合いもあるため、以下を考慮して適切な時間を設定してください。
許容できる容量
運用業務スケジュール
mapred.userlog.limit.kb プロパティの値(mapred.userlog.limit.kb 参照)
仮に、1 分間に最大 1MB(約 1 万行)のログ出力を想定した場合、1 週間分保存するためには約 10GB の容量が必要になります。
<property> <name>mapred.userlog.retain.hours</name> <value>168</value> </property>
pdfs-site.xmlファイル
必要に応じて以下のプロパティを設定してください。
通常は、pdfs.fs.local.basedir プロパティ(pdfs.fs.local.basedir 参照)と pdfs.security.authorization プロパティ(pdfs.security.authorization 参照)を設定し、その他はデフォルトのままでも使用できます。
DFS のマウントディレクトリのパスを指定します。
例えば、pdfs.fs.local.basedir が "/mnt/pdfs/hadoop" と設定されている場合、URI パス "pdfs:///user/bdppuser1" は OS 上の "/mnt/pdfs/hadoop/user/bdppuser1" というパスになります。
/
<property> <name>pdfs.fs.local.basedir</name> <value>/mnt/pdfs/hadoop</value> </property>
DFS 用 FileSystem クラス上でのユーザ用のホームディレクトリパスを指定します。
例えば、pdfs.fs.local.homedir が "/user" と設定されている場合、"bdppuser1" という名前のユーザの DFS 上ホームディレクトリ URI パスは "pdfs:///user/bdppuser1" になります。
/user(HDFS と同じ)
デフォルト(/user)
<property> <name>pdfs.fs.local.homedir</name> <value>/home</value> </property>
DFS 独自の MapReduce ジョブユーザ認証を使用するかどうかを指定します。
true : 使用する
false : 使用しない
false
true
なお、Hadoop で Kerberos 認証を利用する場合は "false" を指定してください。
<property> <name>pdfs.security.authorization</name> <value>true</value> </property>
Read/Write 時のデフォルトバッファサイズを指定します。
なお、このプロパティ値と io.file.buffer.size 値の大きい方が使用されます(io.file.buffer.size 参照)。
4096(Byte) の倍数
128KB
128KB ~ 512KB
<property> <name>pdfs.fs.local.buffer.size</name> <value>524288</value> </property>
MapReduce ジョブで各 Map タスクに分割するデータサイズを指定します。
<主な MapReduce ジョブの総入力データサイズ÷Slave ノード数>以下を目安に指定してください。
なお、「D.4.2 ファイルシステム作成」の際の pdfsmkfs で指定するブロックサイズ(blocksz オプション)と合わせる必要はありません。
33554432 (32MB)の倍数
256MB
1GB (1073741824)
256MB ~ 1GB
<property> <name>pdfs.fs.local.block.size</name> <value>1073741824</value> </property>
ファイルまたはディレクトリ作成時に設定するアクセス権にプロセスの umask 値を反映するかどうかを指定します。
true : umask 値を使用する(POSIX 互換)
false : umask 値を使用しない(HDFS 互換)
true
<property> <name>pdfs.fs.local.posix.umask</name> <value>false</value> </property>
キャッシュローカル MapReduce 機能を使用するかどうかを指定します。
有効にすることで、MapReduce ジョブ起動時に対象ファイルのメモリキャッシュ保持ノード情報を取得し、キャッシュを持っているノードに Map タスクが優先的に割り当てられるようになり Map フェーズ処理が高速になります。
true : キャッシュローカル MapReduce 機能を使用する
false : キャッシュローカル MapReduce 機能を使用しない
true
<property> <name>pdfs.fs.local.cache.location</name> <value>false</value> </property>
キャッシュローカル MapReduce 機能の対象から除外するファイルのサイズを指定します。メモリキャッシュ保持ノード情報の取得にはコストがかかるため、指定したサイズ未満のファイルは情報を取得しないようにすることができます。
1(Byte) 以上
1048576 (1MB)
<property> <name>pdfs.fs.local.cache.minsize</name> <value>1048576</value> </property>
キャッシュローカル MapReduce 機能により、メモリキャッシュ情報を取得する際に使用するリモートコマンド実行パラメタを指定します。
/usr/bin/ssh -o IdentityFile=%HOME/.pdfs/id_hadoop -o ConnectTimeout=10 -o BatchMode=yes -o StrictHostKeyChecking=no -o EscapeChar=none
なお、文字列内の "%HOME" は "${pdfs.fs.local.basedir}/${pdfs.fs.local.homedir}/<ユーザ名>" に、"%USER" はユーザ名に置き換えられます。
<property> <name>pdfs.fs.local.cache.shell</name> <value> /usr/bin/ssh -o IdentityFile=/home/%USER/.ssh/id_rsa -o ConnectTimeout=10 -o BatchMode=yes -o StrictHostKeyChecking=no -o EscapeChar=none</value> </property>
キャッシュローカル MapReduce 機能により、メモリキャッシュ情報を取得する際の多重実行数を指定します。
10
<property> <name>pdfs.fs.local.cache.procs</name> <value>40</value> </property>