CoffeeScript HBase client implementation with protobuf support
hbase-rpc-client
==========



CoffeeScript HBase Implementation with protobuf support based on https://github.com/alibaba/node-hbase-client/
npm install -S hbase-rpc-clientcoffeescript
hbase = require "hbase-rpc-client"client = hbase
zookeeperHosts: ["localhost"] # required
zookeeperRoot: "/hbase"
zookeeperReconnectTimeout: 20000
rootRegionZKPath: "/meta-region-server"
rpcTimeout: 30000
callTimeout: 5000
tcpNoDelay: no
tcpKeepAlive: yes
realUser: "someRealUser"
effectiveUser: "someEffectiveUser"
client.on "error", (err) ->
console.log "hbase client error:", err
`
In case you experience slow communication with hbase, please see issue #24 and try to set tcpNoDelay: trueTimeouts explained:
* zookeeperReconnectTimeout - Time after zookeeper watcher creates new zk client upon receiving following events: closing, session_expired or authentication_failed (other events are handled by node-zookeeper-client). Default: 20000ms (set by zookeeper-watcher)
* rpcTimeout - Time after hbase-rpc-client emits an error if it doesn't manage to ensure zookeeper connection or doesn't manage to get region server connection. Default: 30000ms
* callTimeout - Time after each operation call on hbase timeouts. Default: 5000ms
$3
Values can be only strings or buffers.
##### put table, put, callback
`coffeescript
put = new hbase.Put rowKey
put.add cf, qualifier, valueclient.put table, put, (err, res) ->
console.log arguments
`$3
##### get table, get, callback
`coffeescript
get = new hbase.Get rowKeyclient.get table, get, (err, res) ->
console.log arguments
`$3
##### delete table, delete, callback
`coffeescript
del = new hbase.Delete rowKeyclient.delete table, del, (err, res) ->
console.log arguments
`$3
Values can be only strings or buffers.
##### mput table, arrayOfPutObjects, callback
##### mput table, arrayOfObjects, callback
`coffeescript
put1 = new hbase.Put rowKey1
put1.add cf1, qualifier1, value1put2 = new hbase.Put rowKey2
put2.add cf2, qualifier2, value2
client.mput table, [put1, put2], (err, res) ->
console.log arguments
`
`coffeescript
put1 =
row: rowKey1
put1["#{cf1}:#{qualifier1}"] = value1put2 =
row: rowKey2
put2["#{cf2}:#{qualifier2}"] = value2
client.mput table, [put1, put2], (err, res) ->
console.log arguments
`$3
##### mget table, arrayOfGetObjects, callback
##### mget table, arrayOfObjects, callback
`coffeescript
get1 = new hbase.Get rowKey1
get2 = new hbase.Get rowKey2client.mget table, [get1, get2], (err, res) ->
console.log arguments
`
`coffeescript
client.mget table, [rowKey1, rowKey2], (err, res) ->
console.log arguments
`$3
##### mdelete table, arrayOfDeleteObjects, callback
##### mdelete table, arrayOfObjects, callback
`coffeescript
delete1 = new hbase.Delete rowKey1
delete2 = new hbase.Delete rowKey2client.mdelete table, [delete1, delete2], (err, res) ->
console.log arguments
`
`coffeescript
client.mdelete table, [rowKey1, rowKey2], (err, res) ->
console.log arguments
`$3
##### scanner = getScanner table, startRow, stopRow
##### scanner.setFilter filter
##### scanner.setReversed()
##### scanner.next callback
##### scanner.each function, callback
##### scanner.toArray callback
##### scanner.close()
`coffeescript
scan = client.getScanner tablescan.next (err, row) ->
console.log arguments
`
`coffeescript
scan = client.getScanner table, startRow, stopRowscan.next (err, row) ->
console.log arguments
`
`coffeescript
scan = client.getScanner table
scan.setFilter columnPrefixFilter: prefix: columnPrefixscan.next (err, row) ->
console.log arguments
`
`coffeescript
scan = client.getScanner tablefilter1 =
singleColumnValueFilter:
columnFamily: cf1
columnQualifier: qualifier1
compareOp: "EQUAL"
comparator:
substringComparator:
substr: value1
filterIfMissing: yes
latestVersionOnly: yes
filter2 =
singleColumnValueFilter:
columnFamily: cf2
columnQualifier: qualifier2
compareOp: "EQUAL"
comparator:
substringComparator:
substr: value2
filterIfMissing: yes
latestVersionOnly: yes
filterList1 = new hbase.FilterList
filterList2 = new hbase.FilterList
filterList3 = new hbase.FilterList "MUST_PASS_ONE"
filterList1.addFilter f1
filterList2.addFilter f2
filterList3.addFilter filterList1
filterList3.addFilter filterList2
scan.setFilter filterList3
scan.toArray (err, res) ->
console.log arguments
`
`coffeescript
scan = client.getScanner tablescan.toArray (err, res) ->
console.log arguments
`
`coffeescript
scan = client.getScanner tablescan.each (err, row) ->
return unless row # no more rows
# do something with row synchronously
`
`coffeescript
scan = client.getScanner tablescan.each (err, row, done) ->
return unless row # no more rows
# do something with row asynchronously
done()
`
`coffeescript
scan = client.getScanner tablescan.each (err, row, done) ->
# do something with row asynchronously
done()
, (err) ->
# error or no more rows
console.log err if err
`$3
Values can be only strings or buffers.
##### checkAndPut table, rowKey, cf, qualifier, value, putObject, callback
`coffeescript
put = new hbase.Put rowKey1
put.add cf1, qualifier1, value1client.checkAndPut table, rowKey2, cf2, qualifier2, value2, put, (err, res) ->
console.log arguments
`$3
##### checkAndDelete table, rowKey, cf, qualifier, value, deleteObject, callback
`coffeescript
del = new hbase.Put rowKey1client.checkAndDelete table, rowKey2, cf2, qualifier2, value2, del, (err, res) ->
console.log arguments
`$3
##### increment table, incrementObject, callback
`coffeescript
increment = new hbase.Increment rowKey
increment.add cf1, qualifier1, incrementValue1
increment.add cf2, qualifier2, incrementValue2client.increment table, increment, (err, res) ->
console.log arguments
`$3
##### incrementColumnValue table, rowKey, cf, qualifier, value, callback
`coffeescript
client.incrementColumnValue table, rowKey, cf, qualifier, incrementValue, (err, res) ->
console.log arguments
``hbase-rpc-client is made available under the Apache License, version 2.0