Simple HBase query bridge
I’ve recently released a simple json-rpc query bridge (using our own simple json-rpc framework) for HBase at http://code.google.com/p/hbasebridge/
You can use this bridge to query HBase for either the current record or the last few versions of a record.
To see the methods
http://localhost:8080/hbasebridge/rpc?debug=true
Which returns a list of usable RPC methods:
{
"jsonrpc": "2.0",
"result": {"method": [
{
"class": "com.werxltd.hbasebridge.HBaseInfo",
"name": "listtables",
"params": [],
"returns": "org.json.JSONObject",
"static": false
},
{
"class": "com.werxltd.hbasebridge.HadoopInfo",
"name": "clusterstatus",
"params": [],
"returns": "org.json.JSONObject",
"static": false
},
{
"class": "com.werxltd.hbasebridge.HadoopInfo",
"name": "jobstatus",
"params": [],
"returns": "org.json.JSONObject",
"static": false
},
{
"class": "com.werxltd.jsonrpc.RPC",
"name": "listrpcmethods",
"params": [],
"returns": "org.json.JSONObject",
"static": false
},
{
"class": "com.werxltd.hbasebridge.TableLookup",
"name": "lookup",
"params": ["org.json.JSONObject"],
"returns": "org.json.JSONObject",
"static": false
}
]}
}
To list tables:
http://localhost:8080/hbasebridge/rpc?debug=true&method=listtables
Which returns:
{
"jsonrpc": "2.0",
"result": {"tables": [
"mytable"
]}
}
To get the current status of the cluster:
http://localhost:8080/hbasebridge/rpc?debug=true&method=clusterstatus
Which returns:
{
"jsonrpc": "2.0",
"result": {
"activetrackernames": [
"trackernode1:localhost/127.0.0.1:33455",
"trackernode2:localhost/127.0.0.1:54616",
],
"blacklistedtrackernames": [],
"blacklistedtrackers": 0,
"jobqueues": {"queues": [{
"jobs": [
{
"cleanuptasks": [{"state": ""}],
"complete": false,
"filename": "hdfs://hadoophdfsnode:9000/data/hadoop/mapred/system/job_201003191557_0442/job.xml",
"jobpriority": "normal",
"mapprogress": 1,
"name": "My mapreduce job",
"reduceprogress": 0.9819000363349915,
"runstate": "running",
"schedulinginfo": "NA",
"setupprogress": 1,
"starttime": 1269024863960,
"username": "hadoop-admin"
}
],
"name": "default"
}]},
"jobtrackerstate": "running",
"maptasks": 1,
"maxmaptasks": 116,
"maxmemory": 2079719424,
"maxreducetasks": 58,
"reducetasks": 16,
"tasktrackers": 34,
"ttyexpiryinterval": 600000,
"usedmemory": 969170944
}
}
Key/Value Query:
http://localhost:8080/hbase_tape/rpc?debug=true&data={"method":"lookup","params":{"table":"tablename","keys":["mykey"]}}
Results:
{
"jsonrpc": "2.0",
"result": {"rows": [{"mykey": {
"family:col": "myvalue"
}}]}
}
Key/Value query with versions:
http://localhost:8080/hbase_tape/rpc?debug=true&data={"method":"lookup","params":{"table":"tablename","keys":["mykey"],versions:2}}
Results:
{
"jsonrpc": "2.0",
"result": {"rows": [{"mykey": {
"family:col": [{
"value": "myval",
"version": 123456789
}],
"family:col": [{
"value": "myoldval",
"version": 123456788
}]
}}]}
}
The code should also provide a handy reference for anyone who wants to learn how to query HBase and scrape Result objects for values without knowing family or column names in advance.