プログラムをシェルスクリプトで並列処理
1サーバに複数コアがあって、それらを使って並列処理する話。
Hadoopのようなサーバをまたいだ並列処理ではありません。
ビッグデータを処理する際に並列処理したいとします。
前提
- ユーザごとに集計を行うとして、指定ユーザだけのデータを読込める
- ユーザIDは数値で表現される
サンプルコード
PARALLEL=$1(コマンドラインから並列数を指定) COUNT=0 while [ $COUNT -lt $PARALLEL ] do # -p が並列数, -n が該当プロセスの並列番号 ruby hoge.rb -p $PARALLEL -n $COUNT & COUNT=`expr $COUNT + 1` done wait
ユーザ数が1000人いる場合に、並列数を4とした場合、1プロセスあたり250ユーザが対象になります。 各プロセスでは、-p, -n の値を元に自分が担当するユーザIDを剰余(mod)を使って計算します。