パイプによるパイプライン処理でリモートマシンも生かす (1)

http://d.hatena.ne.jp/kanbayashi/20100811/p1
のつづき。

まずは単純に

"マシンを跨いだパイプで分散データ処理"というネタの前段階として、とりあえず、前のエントリでやった処理の一部をリモートに飛ばしてみた。
と言っても、大したことはしてなくて、bcコマンド呼び出しの一つをsshコマンドでリモートに移しただけ。

cat input.txt | ssh hoge1.foo.bar.jp "bc" | sed -e 's/.*/sqrt ( sqrt ( sqrt ( sqrt ( sqrt ( & ) ) ) ) )/' | bc > /dev/null

#マシン名は変えてある
#sshコマンドって、そのまま標準入出力をパイプできるんだね。今回調べて初めて知った。


所要時間は33.574秒。1コアでの実行時と比べて+32%の高速化。
2コア実行時の+73%高速化には及ばず。


リモートマシンがローカルマシンに比べて高性能だから速くなったという話は当然あるのだけど、WANでの通信が入ることから性能は期待できないかと思っていたので、この結果は少々意外だった。

あれれ

続いて、複数台のリモートマシンを繋いでみる。
が、これをやるには、実は一つ問題が。


というのも、単純に

cat somedata | ssh hoge1 "bc" | ssh hoge2 "bc" > /dev/null

なんてしても、動くには動くが、hoge1-hoge2間のデータ流(?)がローカルマシンを経由してしまうのよね。
これだと遅そうだし、あまりスマートではないのでどうにかしたい。
#と思ったけど、どれだけネットワークを経由しようが、結局はローカルマシン-hoge1間とローカルマシン-hoge2間の細い方のネットワーク転送速度で律速される(NWがボトルネックになっているとすれば)のだから関係ないのかな


次のエントリでは、この問題について掘り下げたい。