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ということで。
とりあえず気になったので追記で。