1. Enable AggregationClient coprocessor
You have two choices :
You can enable aggregation coprocessor on all your tables by adding the following lines tohbase-site.xml :
<property> <name>hbase.coprocessor.user.region.classes</name> <value>org.apache.hadoop.hbase.coprocessor.AggregateImplementation</value> </property>or ...you can enable coprocessor only on a table throught the HBase shell :
2. Increase RPC timeout (opt)
In some cases the following exception could be raised :
java.net.SocketTimeoutException: Call to node2/55.37.68.154:60020 failed on socket timeout exception
On large table or if you are expecting slow I/O this might be necessary:
<property> <name>hbase.rpc.timeout</name> <value>300000</value> </property>n.b. : you can also specify this property directly in the client source code, see next section
3. ''RowCount' Snippet
public class MyAggregationClient { private static final byte[] TABLE_NAME = Bytes.toBytes("mytable"); private static final byte[] CF = Bytes.toBytes("d"); public static void main(String[] args) throws Throwable { Configuration customConf = new Configuration(); customConf.setStrings("hbase.zookeeper.quorum", "node0,node1,node2"); // Increase RPC timeout, in case of a slow computation customConf.setLong("hbase.rpc.timeout", 600000); // Default is 1, set to a higher value for faster scanner.next(..) customConf.setLong("hbase.client.scanner.caching", 1000); Configuration configuration = HBaseConfiguration.create(customConf); AggregationClient aggregationClient = new AggregationClient( configuration); Scan scan = new Scan(); scan.addFamily(CF); long rowCount = aggregationClient.rowCount(TABLE_NAME, null, scan); System.out.println("row count is " + rowCount); } }