DFS では、キャッシュローカル MapReduce 機能を利用した MapReduce ジョブを実行する場合、Hadoop クラスタの各ノードからファイルキャッシュ情報を取得します。
その際、MapReduce ジョブ実行ユーザーによる、ジョブ起動ノードからリモートノードへのリモートコマンド実行(デフォルトでは SSH を使用)により情報を取得するため、あらかじめリモートコマンド実行を可能にしておく必要があります。
キャッシュローカル機能を使用するかどうかは、pdfs.fs.local.cache.location プロパティで設定します。デフォルトは "true" (有効)です。
なお、pdfs.fs.local.cache.location プロパティを "false" (無効)に設定した場合は、以下の作業は不要です。
例
bdppuser1 というユーザーで、DFS のマウントディレクトリが /mnt/pdfs の場合
全ノードで共用しているため、DFS をマウントしているいずれかのノードで、以下を bdppuser1 で実行します。
$ cd ~ <Enter> $ ssh-keygen -t rsa -N "" -f id_hadoop <Enter> $ echo -n "command=\"/opt/FJSVpdfs/sbin/pdfscachelocal.sh\",no-pty,no-port-forwarding,no-X11-forwarding " > authorized_keys <Enter> $ cat id_hadoop.pub >> authorized_keys <Enter> $ hadoop fs -mkdir .pdfs <Enter> $ hadoop fs -chmod 700 .pdfs <Enter> $ hadoop fs -moveFromLocal id_hadoop id_hadoop.pub authorized_keys .pdfs/ <Enter> $ hadoop fs -chmod 600 .pdfs/id_hadoop .pdfs/authorized_keys <Enter> $ hadoop fs -chmod 644 .pdfs/id_hadoop.pub <Enter>
上記では、authorized_keys ファイルに以下のようなエントリーが設定されます。
$ hadoop fs -cat .pdfs/authorized_keys <Enter> "command=/opt/pdfs/sbin/pdfscachelocal.sh",no-pty,no-port-forwarding,no-X11-forwarding ssh-rsa 公開キー bdppuser1@自ノード名
全スレーブサーバおよび開発実行環境サーバ(develop)でユーザー bdppuser1 のホームディレクトリの .ssh/authorized_keys に反映します。
以下を bdppuser1 で実行します。
$ xargs -ti ssh {} "umask 0077; mkdir -p .ssh; cat /mnt/pdfs/hadoop/user/bdppuser1/.pdfs/authorized_keys >> .ssh/authorized_keys" < /etc/hadoop/slaves <Enter> $ ssh develop "umask 0077; mkdir -p .ssh; cat /mnt/pdfs/hadoop/user/bdppuser1/.pdfs/authorized_keys >> .ssh/authorized_keys" <Enter>
以下のようにリモート実行することで確認できます。
$ echo /dummy | ssh -o IdentityFile=/mnt/pdfs/hadoop/user/bdppuser1/.pdfs/id_hadoop -o StrictHostKeyChecking=no -o BatchMode=no {他ノード名} /opt/FJSVpdfs/sbin/pdfscachelocal.sh <Enter>
2 (*)
(*) 通常は "2" と出力されます。