カイワレの大冒険 Third

技術的なことや他愛もないことをたまに書いてます

hadoopのサンプルで遊んでみる

hadoop使っててやりたいことがあったんだけど、サイト上にあまり資料なかったので書いてみる。

hadoop付属サンプルのgrepで、前方参照使いたいんだけど、やり方分からなかったのでメモ。

$ /usr/lib/hadoop/bin/hadoop jar /usr/lib/hadoop/hadoop-*-examples.jar grep inputs/log.gz outputs/test1 "([0-9]{1,2}-[0-9]{1,2})" 1

単にhdfs上にあるinputs/log.gzに対して、「12-15」みたいな正規表現でマッチする文字列を map / reduce するだけ。
単に特定の文字列を含む例はよく見かけるんだけど、参照使うのあまりなかったので、備忘録ということで。

あと、gzip形式みたいな圧縮ファイルに対してもmapかけられるので便利ですよーという例でもあったりします。

上の方法とやり方としては同じですが、アクセスログから上位ページを抽出する方法に関してはWEB+DB PRESSに載ってたはず(アバウトでごめんなさい。正規表現の部分が違うかな)。

hadoopのパスに関しては各自の環境に置き換えて実行してくださいな。

hadoopってでっかい機械操ってるようでなんか面白いと思うこの頃。
こういうなんかやったことのメモがわりとローカルに備忘録として残ってるから、ちゃんと整理してblogに書いていったほうがいいんだろうなぁ。

アウトプットがんばりまっせ。


【追記】
読み返してたらちょいと思ったので追記。

hadoopでgrepかける場合実行に時間かかるし、hdfsのファイルをまずいじる必要もないと思うので、
まずデータのコピーを置いて、以下のような感じで出力見てから、mapかけたほうがよいかも。

$ gzip -dc test.gz | grep -o -E "[0-9]{1,2}-[0-9]{1,2}" | head

このコマンド実行すれば、grepで正規表現使って抽出ができてheadで出力も減らせるので、すぐ確認できて楽かな。
あとはダブルクオテーションで囲んだ部分を括弧でグループ化すればおkということで。

とりあえず気になったので追記で。