LoginSignup
2
0

More than 5 years have passed since last update.

HBase shellで文字列以外の値をputする

Posted at

HBaseでは、hbase shellコマンドを実行して起動できるインタラクティブシェル内において、下記のようにすることで文字列のバイト列をテーブルにputすることができます。

put 'my_table', 'foo', 'f:q', 'some_string'

文字列のみを扱うテーブルであればこれで問題ないのですが、たとえば数値を扱うテーブルの場合などで、putの引数として数値を渡した場合でも、数値が一旦文字列に変換されてから文字列のバイト列としてテーブルに書き込まれます。HBaseで数値を扱うJavaアプリケーションではorg.apache.hadoop.hbase.util.Bytesクラスの変換メソッドを使ってLong型の値をバイト列に変換して書き込むというケースがよくありますが、HBase shell内で普通にputを行おうとすると、これと同様のことを行うことができません。

実は、HBase shell内でget_tableを呼び出し、その戻り値のtableプロパティにアクセスすることでorg.apache.hadoop.hbase.client.HTableインスタンスにアクセスすることができます。これに直接アクセスすることで、Javaアプリケーションと同様な操作を行えるようになります。

hbase(main):001:0> t = get_table('my_table').table
=> #<Java::OrgApacheHadoopHbaseClient::HTable:0x17b37e9a>

実際にこのHTableインスタンスとBytesクラスをつかって、数値を書き込んでみます。

hbase(main):001:0> import java.lang.Long
hbase(main):002:0> import org.apache.hadoop.hbase.util.Bytes
hbase(main):003:0> import org.apache.hadoop.hbase.client.Put

hbase(main):004:0> row = 'foo'
hbase(main):005:0> family = 'f'
hbase(main):006:0> qualifier = 'q'

hbase(main):007:0> t = get_table('my_table').table
=> #<Java::OrgApacheHadoopHbaseClient::HTable:0x7cfac39f>

hbase(main):008:0> p = Put.new(row.to_java_bytes).add(family.to_java_bytes, qualifier.to_java_bytes, Bytes.toBytes(Long.new(15)))
=> #<Java::OrgApacheHadoopHbaseClient::Put:0x2ead6ba4>

hbase(main):009:0> t.put(p)

org.apache.hadoop.hbase.client.Putインスタンスを生成して、HTable#putに渡しています。テーブルをscanしてみると、期待通りに書き込まれていることがわかります。

hbase(main):010:0> scan 'my_table'
ROW                                    COLUMN+CELL                                                                                                   
 foo                                   column=f:q, timestamp=1429359211800, value=\x00\x00\x00\x00\x00\x00\x00\x0F                                      
1 row(s) in 0.0630 seconds

今回はputについて扱いましたが、HTableインスタンスに直接アクセスする方法を覚えておけば、HBase shellの壁にぶつかった時により柔軟な操作を行えるようになるでしょう。

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0