HBaseにはRESTで操作する機能が用意されている。通常はライブラリに頼るのでこれを直接使うことはあまりなさそうだけど、嗜みとして(あとRESTとcurlの練習代わりに)触ってみる。
CDH3使用。ところどころcurlでリクエスト。
以下のコマンドで起動。
$ hbase rest start
上記コマンドは内部的にはorg.apache.hadoop.hbase.rest.Mainを叩いている。
8080ポートで立ち上がる。ポートを指定する場合は下記のような感じ。
$ hbase rest start -p 8089
試しに接続してみると、テーブル一覧が表示される。
http://localhost:8080/
ドキュメントはこの辺を参照した。
ルートディレクトリにリクエストするとテーブル一覧が表示される。
http://localhost:8080/ table1 table2
この時、ヘッダに「Acctpt: text/xml」を指定するとXMLで結果が返る。
$ curl -H "Accept: text/xml" http://localhost:8080/ <?xml version="1.0" encoding="UTF-8" standalone="yes"?><TableList><table name="table1"/><table name="table2"/></TableList>
JSONを指定する場合はこんな感じ。
$ curl -H "Accept: application/json" http://localhost:8080/
http://sancce:8080/version rest 0.0.2 [JVM: Oracle Corporation 1.7.0-21.0-b17] [OS: Linux 3.1.0-7.fc16.x86_64 amd64] [Server: jetty/6.1.26] [Jersey: 1.4]
column1というカラムを持った、table1というテーブルを作ってみる。
$ curl -X PUT -H "Content-Type: application/json" -d '{"@name":"table1", "ColumnSchema":[{"name":"column1"}]}' http://localhost:8080/table1/schema
$ curl -X DELETE http://localhost:8080/table1/schema
「/テーブル名/schema」でスキーマの詳細が表示される。
http://localhost:8080/table1/schema { NAME=> 'table1', IS_META => 'false', IS_ROOT => 'false', COLUMNS => [ { NAME => 'column1', BLOCKSIZE => '65536', BLOOMFILTER => 'NONE', BLOCKCACHE => 'true', COMPRESSION => 'NONE', VERSIONS => '3', REPLICATION_SCOPE => '0', TTL => '2147483647', IN_MEMORY => 'false' } ] }
「row=row1, family=column1, qualifier=q1, value=value1」みたいなデータを登録する
データはbase64エンコードをかけて送る。
$ echo "value1" | base64 dmFsdWUxCg== $ curl -X PUT -H "Content-Type: application/json" -d '{"Row":{"@key":"$KEY","Cell":{"@column":"Y$COLUMN","$":"value"} } }' http://localhost:8080/table1/row1/column1:q1
$ curl http://localhost:8080/table1/row1/column1:q1 value1