hbaserb

アプリケーションのログをparseしてHBaseに格納する為に、hbaserbというライブラリを使ってみました。hbaserbからHBaseを操作するのはThrift経由となる為、先にThriftの受け口を起動しておきます。

hbase-daemon.sh start thrift

tableもhbaserbで作成することはできますが、今回は予めhbase shellでtableを作っておき、データを保存してみました。

hbase(main):004:0> create 'hbaserb_test', 'data'

HBaseを操作するRubyのコードは以下です。

require 'rubygems'
require 'hbaserb'

client = HBaseRb::Client.new '127.0.1.1'
table = client.get_table 'hbaserb_test'

table.mutate_row 'row1', {'data:key1' => 'value1', 'data:key2' => 'value2'}
table.mutate_row 'row2', {'data:key1' => 'hoge', 'data:key2' => 'foobar'}

table.create_scanner('row1') do |row|
  row.columns.keys.each do |key|
    puts "#{key} => #{row.columns[key].value}"
  end
end

上記コードを実行すると、以下のように表示されます。

masayuki@ubuntu-vm:~/work/ruby/hbaserb$ ruby test.rb
data:key1 => value1
data:key2 => value2
data:key1 => hoge
data:key2 => foobar

hbase shellからも保存したデータを確認することができます。

hbase(main):005:0> scan 'hbaserb_test'          
ROW                           COLUMN+CELL                                                                         
 row1                         column=data:key1, timestamp=1312999209128, value=value1                             
 row1                         column=data:key2, timestamp=1312999209128, value=value2                             
 row2                         column=data:key1, timestamp=1312999209130, value=hoge                               
 row2                         column=data:key2, timestamp=1312999209130, value=foobar                             
2 row(s) in 0.2240 seconds