package net.hbase.secondaryindex; import java.io.IOException; import java.util.List; import java.util.Map; import java.util.NavigableMap; import net.hbase.secondaryindex.util.ConfigFactory; import net.hbase.secondaryindex.util.ConfigProperties; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.hbase.HBaseConfiguration; import org.apache.hadoop.hbase.KeyValue; import org.apache.hadoop.hbase.client.HBaseAdmin; import org.apache.hadoop.hbase.client.HTable; import org.apache.hadoop.hbase.client.Put; import org.apache.hadoop.hbase.client.Get; import org.apache.hadoop.hbase.client.Scan; import org.apache.hadoop.hbase.client.ResultScanner; import org.apache.hadoop.hbase.client.Result; import org.apache.hadoop.hbase.filter.ColumnPaginationFilter; import org.apache.hadoop.hbase.filter.Filter; import org.apache.hadoop.hbase.util.Bytes; public class HBaseManager { public Configuration config; public HTable table; public HBaseAdmin admin; ConfigProperties cp = ConfigFactory.getInstance().getConfigProperties( ConfigFactory.INDEX_CONFIG_PATH); public HBaseManager() { config = HBaseConfiguration.create(); config.set("hbase.master", cp.getProperty(ConfigProperties.CONFIG_NAME_HBASE_MASTER)); config.set("hbase.zookeeper.property.clientPort", "2181"); config.set( "hbase.zookeeper.quorum", cp.getProperty(ConfigProperties.CONFIG_NAME_HBASE_ZOOKEEPER_QUORUM)); try { admin = new HBaseAdmin(config); } catch (IOException e) { e.printStackTrace(); } } public static void main(String[] args) throws Exception { HBaseManager m = new HBaseManager(); // m.testScanner(); // m.put(); // m.testGet(); m.testScanGet(); } public void put(List<Put> puts, byte[] tableName) throws IOException { if (null != puts && puts.size() > 0 && null != tableName && tableName.length > 0) { table = new HTable(config, tableName); table.put(puts); table.close(); } } public void put(Put put, byte[] tableName) throws IOException { if (null != put && null != tableName && tableName.length > 0) { table = new HTable(config, tableName); table.put(put); table.close(); } } public Result get(byte[] tableName, byte[] rowkey, byte[] columnFamily, String[] columns) throws IOException { table = new HTable(config, tableName); Get get = new Get(rowkey); if (null != columnFamily && null != columns && columns.length > 0) { for (int i = 0; i < columns.length; i++) { get.addColumn(columnFamily, Bytes.toBytes(columns[i])); } } if (null != columnFamily && (null == columns || columns.length == 0)) { get.addFamily(columnFamily); } return table.get(get); } public Result get(byte[] tableName, byte[] rowkey, byte[] columnFamily) throws IOException { return get(tableName, rowkey, columnFamily, null); } public Result get(byte[] tableName, byte[] rowkey) throws IOException { return get(tableName, rowkey, null, null); } public ResultScanner getVer(byte[] tableName, byte[] rowkey, byte[] columnFamily, String[] columns, int ver) throws IOException { table = new HTable(config, tableName); Get get = new Get(rowkey); if (null != columnFamily && null != columns && columns.length > 0) { for (int i = 0; i < columns.length; i++) { get.addColumn(columnFamily, Bytes.toBytes(columns[i])); } } else if (null != columnFamily && (null == columns || columns.length == 0)) { get.addFamily(columnFamily); } Scan scanner = new Scan(get); scanner.setMaxVersions(ver); return table.getScanner(scanner); } public void testQueryRS() throws Exception { Scan scanner = new Scan(); scanner.addColumn(Bytes.toBytes("cf"), Bytes.toBytes("description")); scanner.setMaxVersions(); ResultScanner rsScanner = table.getScanner(scanner); System.out.println(rsScanner.toString()); Result rs = rsScanner.next(); int count = 0; while (null != rs) { ++count; System.out.println(rs.size()); NavigableMap<byte[], NavigableMap<byte[], NavigableMap<Long, byte[]>>> nMap = rs .getMap(); NavigableMap<byte[], NavigableMap<Long, byte[]>> columnMap = nMap .get(Bytes.toBytes("description")); NavigableMap<Long, byte[]> qualMap = columnMap.get(new byte[] {}); if (qualMap.entrySet().size() > 0) { System.out.println("---------------------------"); for (Map.Entry<Long, byte[]> m : qualMap.entrySet()) { System.out.println("Value:" + new String(m.getValue())); } } rs = rsScanner.next(); if (count > 10) break; } } public void testQueryCommodity() throws Exception { System.out.println("Get Spin's commodity info"); Get mathGet = new Get(new String("Spin").getBytes()); mathGet.addColumn(Bytes.toBytes("cf"), Bytes.toBytes("widgetname")); mathGet.setMaxVersions(); Result rs = table.get(mathGet); NavigableMap<byte[], NavigableMap<byte[], NavigableMap<Long, byte[]>>> nMap = rs .getMap(); NavigableMap<byte[], NavigableMap<Long, byte[]>> columnMap = nMap .get(Bytes.toBytes("widgetname")); NavigableMap<Long, byte[]> qualMap = columnMap.get(new byte[] {}); if (qualMap.entrySet().size() > 0) { for (Map.Entry<Long, byte[]> m : qualMap.entrySet()) { System.out.println("Value:" + new String(m.getValue())); break; } } } public void testScanner() throws IOException { long st = System.currentTimeMillis(); // System.out.println("Scan...."); Scan scanner = new Scan(); // /*version*/ // scanner.addColumn(Bytes.toBytes("cf1"), Bytes.toBytes("mid")); // scanner.setTimeRange(1253997917140L, 1453997917140L); scanner.setMaxVersions(); /* filter */ // Filter filter = new RowFilter(CompareFilter.CompareOp.EQUAL, new // RegexStringComparator("20121.*_AF6E39E3-3174-7BBF-7EE9-02AB6528897B")); // scanner.setFilter(filter); /* batch and caching */ // scanner.setBatch(0); // scanner.setCaching(100000); ResultScanner rsScanner = table.getScanner(scanner); // long en = System.currentTimeMillis(); // System.out.println("search Time: " + (en - st) + " ms"); int version = 0; for (Result res : rsScanner) { version++; final List<KeyValue> list = res.list(); // System.out.println(getRealRowKey(list.get(0))); // for (final KeyValue kv : list) { // System.out.println(getRealRowKey(kv)); // break; // } for (final KeyValue kv : list) System.out.println(kv.toString()); version = list.size(); // System.out.println("Time: " + System.currentTimeMillis()); // if(version % 10000 == 0) // System.out.println("rows: " + version); } rsScanner.close(); long en2 = System.currentTimeMillis(); System.out.println("Total rows: " + version); System.out.println("Total Time: " + (en2 - st) + " ms"); // long en = System.currentTimeMillis(); // System.out.println("Time: " + (en-st) +" ms"); // // Result rs = rsScanner.next(); // for (; null != rs; rs = rsScanner.next()) { // System.out.println("rs.getRow()[" + new String(rs.getRow()) + "]"); // System.out.println("[" // + new String(rs.getValue(Bytes.toBytes("vv_log"), // Bytes.toBytes("aid"))) + "]"); // // } } public static String getRealRowKey(KeyValue kv) { int rowlength = Bytes.toShort(kv.getBuffer(), kv.getOffset() + KeyValue.ROW_OFFSET); String rowKey = Bytes.toStringBinary(kv.getBuffer(), kv.getOffset() + KeyValue.ROW_OFFSET + Bytes.SIZEOF_SHORT, rowlength); return rowKey; } public void testGet() throws IOException { long st = System.currentTimeMillis(); Get get = new Get( Bytes.toBytes("{1F591795-74DE-EB70-0245-0E4465C72CFA}")); get.addColumn(Bytes.toBytes("bhvr"), Bytes.toBytes("vvmid")); get.setMaxVersions(100); // get.setTimeRange(1354010844711L - 12000L, 1354010844711L); // get.setTimeStamp(1354700700000L); Filter filter = new ColumnPaginationFilter(1, 10); get.setFilter(filter); Result dbResult = table.get(get); System.out.println("result=" + dbResult.toString()); long en2 = System.currentTimeMillis(); System.out.println("Total Time: " + (en2 - st) + " ms"); } public void testScanGet() throws IOException { long st = System.currentTimeMillis(); Get get = new Get( Bytes.toBytes("{1F591795-74DE-EB70-0245-0E4465C72CFA}")); get.addColumn(Bytes.toBytes("bhvr"), Bytes.toBytes("vvmid")); Filter filter = new ColumnPaginationFilter(1, 10); Scan scanner = new Scan(get); scanner.setFilter(filter); scanner.setMaxVersions(100); // scanner.setCaching(100); // scanner.setBatch(10); ResultScanner rsScanner = table.getScanner(scanner); for (Result result : rsScanner) { System.out.println(result); } rsScanner.close(); int version = 0; // int count = 0; // for (Result res : rsScanner) { // System.out.println("count: " + ++count); // final List<KeyValue> list = res.list(); // // for (final KeyValue kv : list) // System.out.println(kv.toString()); // // version = list.size(); // } // rsScanner.close(); long en2 = System.currentTimeMillis(); System.out.println("Total rows: " + version); System.out.println("Total Time: " + (en2 - st) + " ms"); } }