ちょっとしたデータ集計くらいでHadoop導入するのはめんどくさいのです。例えば日付ごとにまとまったアクセスログを一日単位で1ヶ月分集計したい!といった場合。ちょろっと集計するとか、デバックとかには、簡易のMapReduce実装を使って処理できます。(インターンで教わった。)
cat (入力) | perl map.pl | sort | perl reduce.pl > (出力)
もちろん、MapReduceは並列分散によるスケーラビリティが魅力なのですが、並列分散処理しないと意味ない!というわけではなくて、メモリに載せるのが大変になる量のデータ集計の実装がすごく簡単にできてしまいます。(sortコマンドが非常に優秀なので上記シェルの実装でもかなり頑張れる。)並列分散しないMapReduceと同様の処理方法は珠玉のプログラミングなどでも紹介されています。(MapReduceとしてではないですが)
しかし、上記の方法だとせっかくのマルチコアプロセッサを活かせないという問題があります。大量のタスクや、大規模データで逐次処理してたらを時間がかかるし。。。だけど、Hadoopを入れるの面倒だし、そんな権限もないし、サーバリソースもないし、HDFSとか必要ないし。。。といった状況があります。ジョブキューとか使えば楽なのかなとか思いながら、導入がめんどくさいということで、とりあえず、マルチコアプロセッサを100%使い切るためのシェルを書きました。(数GB×数千ファイルくらいまでは1台のPCで十分頑張れるレベル。)
タスクを管理するための親プロセスmain.shと、各タスクを実行するsub.shの構成。(mapperとかreducerを引数で与えれば、汎用性はあがりそうですが。いろいろ集計したい場合には組み合わせを忘れそうになるので、とりあえず、クローンコード作って対応してます。)
プロセスが乱立しないように、プロセス数の管理はロックファイルをつかって実現してます。子プロセスの数とか監視仕方をいろいろ探したのですが、わからなかったので。だいたいMAX_PROCESSくらいの数の子プロセスで処理します。多少MAX_PROCESSより多いプロセスで処理することもあります。別にシビアな条件があるわけではないのでこの程度で十分。スレッドの時代にプロセスとか時代遅れ感がありますが、以前は自分でタスク管理してたのを自動化してくれるので重宝しています。
もっといい方法があったら教えて下さい。そのために書いた。なお、転置インデックスを作るとかはそのままでは使い辛いです。
#!/bin/bash
MAX_PROCESS=4
SLEEP=5
LOCK_DIR=.lock
INPUT_DIR=input
OUTPUT_DIR=output
export LOCK_DIR
export OUTPUT_DIR
for file in $INPUT/*
do
while [ `ls $LOCK_DIR | wc -l` -ge $MAX_PROCESS ]
do
sleep $SLEEP
done
bash sub.sh $file &
done
echo "wait"
wait
#!/bin/bash
file=$1
LOCK_FILE=$LOCK_DIR/pid_$$
{ date; echo "$PPID > $$ : $file"; } > $LOCK_FILE
name=`basename $file`
cat $file | perl mapper.pl | sort | perl reducer.pl > $OUTPUT_DIR/$name
rm $LOCK_FILE
GRD3であまりに簡単に星座が映ってしまったので、一眼レフの集光力との比較をしてみます。
GRD3は、焦点距離6mm / F1.9 = 口径3.15mm。小さいですね。Sigmaのズームレンズが、焦点距離18mm / F2.8 = 口径6.43mmなので、集光力は、おおむね、1/4倍くらいになるということになります。GRD3で、30s露光した写真は、K100Dだと8sも露光すれば十分だということになります。本当にそうなら一眼恐るべし。もう一度きちんと一度、写りを比較しておくべきですね。
K100Dで撮ってみました。なにかピントを∞にしたのがまずかったのが、少しぼけてしまっています。やはり一概に集光力や、受光素子の大きさで評価できるものでもないということになるのでしょうか。K100DはISO200からなので条件的に不利な部分もありますし。
GRD3は10sを超えるとノイズリダクションが働いてしまうみたいです。
アンコールワットを撮るために買ったK100Dですが、過酷な撮影環境が多かったことに加えてメンテナンスが十分でなかったからか、レンズや本体の汚れなどがかなり目立ってきてて、おまけに最近は持ち運びが面倒で持っていくことを躊躇することが増えてたので、思い切ってGR Digital 3を買いました。
やっぱり撮ったときのシャッター音や感触などは明らかに一眼には劣るなぁと感じるのですが、K100Dにできることは大体できるみたいで結構満足なのと、使わないシーンモードの代わりに自由に設定を保存できるなどかなり好印象です。撮った写真を確認してみたらすごくキリッとしていて、しかも、30s露光で星空もかなりきれいに写りました。K100Dだと星なのかノイズなのかさえわからないような状態なのだけど、もしかしてこれはほかに原因があったのかなぁ。。。
キリっとした写りの善光寺。
カシオペア座だとちゃんとわかるように撮れています。
昔の写真を見ようと思ったのですが、ma38su.orgの方の写真が見えなくなっていました><