pandazx's blog

データ分析など雑多な技術ブログ

プログラムをシェルスクリプトで並列処理

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)を使って計算します。