複数のリモートマシンに同時に同じコマンドを送るツールpdshについて。 hadoop系はsshコマンドを使用してリモートマシンでコマンドを実行することが多く、pdshもよく出てくるので、ここでまとめておく。
ここでは、以下の通り、driverノード
からworker1ノード
, worker2ノード
の2台に同じコマンドを送る例を見ていく。
worker1
┌─────► 192.168.64.4
driver node │
192.168.64.3 ───┤
│ worker2
└─────► 192.168.64.5
Installation
基本的にapt, yum, brewなどのパッケージャで対応している。
$ sudo apt install pdsh
$ pdsh
Usage: pdsh [-options] command ...
-S return largest of remote command return values
-h output usage menu and quit
-V output version information and quit
-q list the option settings and quit
-b disable ^C status feature (batch mode)
-d enable extra debug information from ^C status
-l user execute remote commands as user
-t seconds set connect timeout (default is 10 sec)
-u seconds set command timeout (no default)
-f n use fanout of n nodes
-w host,host,... set target node list on command line
-x host,host,... set node exclusion list on command line
-R name set rcmd module to name
-M name,... select one or more misc modules to initialize first
-N disable hostname: labels on output lines
-L list info on all loaded modules and exit
-g query,... target nodes using genders query
-X query,... exclude nodes using genders query
-F file use alternate genders file `file'
-i request alternate or canonical hostnames if applicable
-a target all nodes except those with "pdsh_all_skip" attribute
-A target all nodes listed in genders database
available rcmd modules: ssh,rsh,exec (default: rsh)
準備
pdsh
自体は多種のリモートシェル実行に対応している。ヘルプの最後にある通り、デフォルトだとrsh
になっている。だけど、ほとんどのケースでssh
を使うことが多いはず。ここでもssh
を使う例を見ていく。
その準備として、この記事で見た公開鍵を使ったssh認証をリモートホストに事前に実行しておく必要がある。
今回の例では、driver node
からworker1
, worker2
にssh
するので、driver node
の公開鍵をworker1
, worker2
に登録しておく。
設定後にパスーワードレスでsshログインできるか確認しておく。
### driver node上(192.168.64.3)
$ ssh 192.168.64.4
> ログイン成功
$ ssh 192.168.64.5
> ログイン成功
pdsh
コマンドの実行
準備できたので、pdsh
をやってみる。
$ pdsh -w 192.168.64.4,192.168.64.5 -R ssh "date"
192.168.64.4: Mon Jan 2 10:36:36 JST 2023
192.168.64.5: Mon Jan 2 10:36:35 JST 2023
オプションの説明:
-w
: コマンドを送る先のホスト一覧。カンマ区切りで複数指定できる。-R
: リモートシェルの指定。ssh, rsh, exec
が指定できる。
いちいち-R ssh
を指定するのが面倒な場合は、環境変数PDSH_RCMD_TYPE=ssh
で対応可能になる。
$ export PDSH_RCMD_TYPE=ssh
$ pdsh -w 192.168.64.4,192.168.64.5 "date"
192.168.64.5: Mon Jan 2 10:41:20 JST 2023
192.168.64.4: Mon Jan 2 10:41:20 JST 2023