Hbase API开发实例(Java版)

2019-01-14 10:50:25 浏览数 (1)

import java.io.IOException; import java.io.ByteArrayOutputStream; import java.io.DataOutputStream; import java.io.ByteArrayInputStream; import java.io.DataInputStream; import java.util.Map; import java.util.ArrayList; import java.util.List; import org.apache.hadoop.io.Writable; import org.apache.hadoop.io.IntWritable; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.hbase.HBaseConfiguration; import org.apache.hadoop.hbase.HTableDescriptor; import org.apache.hadoop.hbase.HColumnDescriptor; 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.Delete; import org.apache.hadoop.hbase.util.*; import org.apache.hadoop.hbase.KeyValue; import org.apache.hadoop.hbase.util.Writables; import org.apache.hadoop.hbase.client.Result; import org.apache.hadoop.hbase.client.ResultScanner; import org.apache.hadoop.hbase.client.Scan; import org.apache.hadoop.hbase.MasterNotRunningException; //import org.apache.hadoop.hbase.ZooKeeperConnectionException; public class HBaseHandler {     private static HBaseConfiguration conf = null;     /**      * 初始化配置      */     static {        //conf = HBaseConfiguration.create();          conf = new HBaseConfiguration();          conf.addResource("hbase-site.xml");     }     /**      * @param args      * @throws IOException      */     public static void main(String[] args) throws IOException {         // TODO Auto-generated method stub         System.out.println("Helloworld");         String[] cfs;         cfs = new String[1];         cfs[0] = "Hello";         createTable("Test",cfs);     }     /**      * 创建表操作      * @throws IOException      */     public static void createTable(String tablename, String[] cfs) throws IOException {         HBaseAdmin admin = new HBaseAdmin(conf);         if (admin.tableExists(tablename)) {             System.out.println("表已经存在!");         }         else {             HTableDescriptor tableDesc = new HTableDescriptor(tablename);             for (int i = 0; i < cfs.length; i ) {                 tableDesc.addFamily(new HColumnDescriptor(cfs[i]));             }             admin.createTable(tableDesc);             System.out.println("表创建成功!");         }     }         /**      * 删除表操作      * @param tablename      * @throws IOException      */     public static void deleteTable(String tablename) throws IOException     {         try {             HBaseAdmin admin = new HBaseAdmin(conf);             admin.disableTable(tablename);             admin.deleteTable(tablename);             System.out.println("表删除成功!");         }         catch (MasterNotRunningException e)         {             e.printStackTrace();         }     }     /**      * 插入一行记录      * @param tablename      * @param cfs      */     public static void writeRow(String tablename, String[] cfs) {         try {             HTable table = new HTable(conf, tablename);             Put put = new Put(Bytes.toBytes("rows1"));             for (int j = 0; j < cfs.length; j ) {                 put.add(Bytes.toBytes(cfs[j]),                         Bytes.toBytes(String.valueOf(1)),                         Bytes.toBytes("value_1"));                 table.put(put);             }         } catch (IOException e) {             e.printStackTrace();         }     }     /**      * 删除一行记录      * @param tablename      * @param rowkey      * @throws IOException      */     public static void deleteRow(String tablename, String rowkey) throws IOException {         HTable table = new HTable(conf, tablename);         List list = new ArrayList();         Delete d1 = new Delete(rowkey.getBytes());         list.add(d1);         table.delete(d1);         System.out.println("删除行成功!");     }     /**      * 查找一行记录      * @param tablename      * @param rowkey      */     public static void selectRow(String tablename, String rowKey)             throws IOException {         HTable table = new HTable(conf, tablename);         Get g = new Get(rowKey.getBytes());         Result rs = table.get(g);         for (KeyValue kv : rs.raw()) {             System.out.print(new String(kv.getRow()) "  ");             System.out.print(new String(kv.getFamily()) ":");             System.out.print(new String(kv.getQualifier()) "  ");             System.out.print(kv.getTimestamp() "  ");             System.out.println(new String(kv.getValue()));         }     }     /**      * 查询表中所有行      * @param tablename      */     public static void scaner(String tablename) {         try {             HTable table = new HTable(conf, tablename);             Scan s = new Scan();             ResultScanner rs = table.getScanner(s);             for (Result r : rs) {                 KeyValue[] kv = r.raw();                 for (int i = 0; i < kv.length; i ) {                     System.out.print(new String(kv[i].getRow()) "  ");                     System.out.print(new String(kv[i].getFamily()) ":");                     System.out.print(new String(kv[i].getQualifier()) "  ");                     System.out.print(kv[i].getTimestamp() "  ");                     System.out.println(new String(kv[i].getValue()));                 }             }         } catch (IOException e)         {             e.printStackTrace();         }     } }

说明: HBaseConfiguration: 用于告诉client如何连接,连接到哪个HBase的服务器上。 HTable:代表一个HBase表格。 BatchUpdate:用于表格中一行的更新。包括添加某个列,修改某列的值,删除某列等。 commit:table的一个方法。代表某个BatchUpdate操作可以生效了。类似于数据库中的commit操作。

Cell:table中对应某个(行key, 列值,时间戳)下的单元格值。 获取Cell的方法。For example: table.get("myRow", "myColumnFamily:columnQualifier1");

scanner:用于遍历表格。 rowResult:遍历过程当中保存某行信息。

0 人点赞