Hiveで半構造化ログをそのまま読み込んでしまえ!

Hiveを勉強したら、思った以上によかったので

いいと思ったことを紹介。

 

正規表現で半構造化ログファイルを読める!

Hiveのテーブルを以下のように作ると、

ログファイルをそのまま読むことができます!

 https://issues.apache.org/jira/browse/HIVE-662

 

input.regexにログ1行のログのフォーマットを正規表現で指定します。

output.format.stringでHiveが読むときのフォーマットを

JavaのFormatterクラスの変換形式に従って指定します。

 #http://java.sun.com/javase/ja/6/docs/ja/api/java/util/Formatter.html

 

簡単に言えば、

input.regex正規表現で「()」書きした箇所が、先頭から順に

output.format.stringの%1$s、%2$s、%3$s…

となっていくイメージです。

 ※文字列ならば。数字が入ると「s」が「d」や「f」になります。

 

リンク見て、お分かりの通り、

転送してきたログファイルをいちいち加工(パース)することなく、

HiveにLOADしてあげるだけで、検索できるようになっちゃんです!

 

BigDataと呼ばれるほど、大きなデータになればなるほど、

効力が出てくるんじゃないでしょうか。

 

②圧縮ファイルをそのまま読める!

Hiveは圧縮ファイルを解凍せずとも、ファイルを読めます。

 http://metasearch.sourceforge.jp/wiki/index.php?Hive%A4%C8%B0%B5%BD%CC%A5%C7%A1%BC%A5%BF

 

できる圧縮形式はGZip,LZO,BZip2,

あと、上記リンクには紹介されていないですが、Snappyもできます。

 ※(英語)http://mapredit.blogspot.com/2012/01/use-snappy-codec-with-hive.html

あ、もちろんSequenceFileもOK。

 

てっきりplainじゃないと読めないと思ってました。

よくよく考えてみれば、

Hiveの検索は結局MapReduceですから、

MapReduceでできていることはHiveでもできて当然なんですけどね。。

 

③パーティションを事前に作れば、LOAD不要

なぜかは知りません。

やったらできたレベルです。

もう少しHiveのメタデータについて、勉強しないと仕組みはわかりません。

 

けど、これで、

転送されてきた圧縮ファイルをHDFSの特定のディレクトリに配置するだけでよいので

転送されたその時から、即検索できちゃう!!

 

リアルタイムにデータ転送をするストリーム転送と相性よさそうですね。