1. 程式人生 > >Hbase新舊api對比

Hbase新舊api對比

複製程式碼
 1 package com.felix.hbaseapi_test;
 2 
 3 /*   
這是舊版的 API操作
*/ 16 public class hbaseapifelix { 17 18 public static final String TABLE_NAME = "testapi"; 19 public static final String COLUMNFAMILY_NAME = "cf"; 20 public static final String ROW_KEY = "rowkey1"; 21 22 public
static void main(String[] args) throws Exception { 23 Configuration conf = HBaseConfiguration.create(); 24 HBaseAdmin admin=new HBaseAdmin(conf); 51 createtable(admin); 53 HTable htable=new HTable(conf, TABLE_NAME); 54 55 put(htable,"age","25"); 56 put(htable,"age","26");
57 put(htable,"age","27"); 58 put(htable,"age","28"); 59 60 //Get 61 Get get=new Get(ROW_KEY.getBytes()); 62 htable.get(get); 63 64 //scan 65 Scan scan=new Scan(); 66 ResultScanner scanner = htable.getScanner(scan); 67 }
68 69 private static void put(HTable htable,String column,String value) throws IOException { 70 Put put=new Put(ROW_KEY.getBytes()); 71 put.addColumn(COLUMNFAMILY_NAME.getBytes(), column.getBytes(), value.getBytes()); 72 htable.put(put); 73 } 74 75 private static void createtable(HBaseAdmin admin) throws IOException { 76 HTableDescriptor desc = new HTableDescriptor(TABLE_NAME); 77 HColumnDescriptor family = new HColumnDescriptor(COLUMNFAMILY_NAME); 78 desc.addFamily(family); 79 family.setMaxVersions(3); 80 if (!admin.tableExists(TABLE_NAME)) { 81 //該表不存在,直接建立 82 admin.createTable(desc); 83 }else{ 84 //該表存在,刪除後再建立 85 if(!admin.isTableAvailable(TABLE_NAME)){ 86 //該表disable,直接刪除 87 admin.deleteTable(TABLE_NAME); 88 }else{ 89 //該表enable,先disable,再刪除 90 admin.disableTable(TABLE_NAME); 91 admin.deleteTable(TABLE_NAME); 92 } 93 admin.createTable(desc); 94 } 95 } 96 97 }
複製程式碼 複製程式碼
  1 package com.felix.hbaseapi_test;
  2 
  3 
  4 import java.io.IOException;
  5 
  6 import org.apache.hadoop.conf.Configuration;
  7 import org.apache.hadoop.hbase.HBaseConfiguration;
  8 import org.apache.hadoop.hbase.HColumnDescriptor;
  9 import org.apache.hadoop.hbase.HTableDescriptor;
 10 import org.apache.hadoop.hbase.TableName;
 11 import org.apache.hadoop.hbase.client.Admin;
 12 import org.apache.hadoop.hbase.client.Connection;
 13 import org.apache.hadoop.hbase.client.ConnectionFactory;
 14 import org.apache.hadoop.hbase.client.Get;
 15 import org.apache.hadoop.hbase.client.Put;
 16 import org.apache.hadoop.hbase.client.Result;
 17 import org.apache.hadoop.hbase.client.ResultScanner;
 18 import org.apache.hadoop.hbase.client.Scan;
 19 import org.apache.hadoop.hbase.client.Table;
 20 
 21 
 22 public class hbaseapifelix {
 23 
 24     public static final String TABLE_NAME = "testapi";
 25     public static final String COLUMNFAMILY_NAME = "cf";
 26     public static final String ROW_KEY = "rowkey1";
 27     
 28     public static void main(String[] args) throws Exception {
 29         Configuration conf = HBaseConfiguration.create();
 30         //下面的配置,在configuration檔案中都配置過了這裡沒必要配置,也不方便
 31         //conf.set("hbase.rootdir", "hdfs://centos:9000/hbase");
 32         //conf.set("hbase.zookeeper.quorum","centos");
 33         //conf.set("hbase.zookeeper.property.clientPort", "2181");
 34     
 35          Connection connection = ConnectionFactory.createConnection(conf);
 36          Admin admin = connection.getAdmin();
 37          Table table = connection.getTable(TableName.valueOf("user"));
 38          TableName name = table.getName();
 39          
 40          initBeforeCreate(admin, name);
 41          createTable(admin, table);
 42         
 43          try {
 44              Put put=new Put("rowkey".getBytes());
 45              put.addColumn(COLUMNFAMILY_NAME.getBytes(), "age".getBytes(), "25".getBytes());
 46              put.addColumn(COLUMNFAMILY_NAME.getBytes(), "age".getBytes(), "26".getBytes());
 47              put.addColumn(COLUMNFAMILY_NAME.getBytes(), "age".getBytes(), "27".getBytes());
 48              put.addColumn(COLUMNFAMILY_NAME.getBytes(), "age".getBytes(), "28".getBytes());
 49              table.put(put);
 50          } finally {
 51            table.close();
 52            connection.close();
 53          }
 54          
 55         
 56         Get get = new Get(ROW_KEY.getBytes());
 57         Result result = table.get(get);
 58         
 59         Scan scan=new Scan();
 60         ResultScanner scanner = table.getScanner(scan);
 61          
 62     /*    HBaseAdmin admin=new HBaseAdmin(conf);
 63         createtable(admin);
 64         
 65         HTable htable=new HTable(conf, TABLE_NAME);
 66         
 67         put(htable,"age","25");
 68         put(htable,"age","26");
 69         put(htable,"age","27");
 70         put(htable,"age","28");
 71         
 72         //Get
 73         Get get=new Get(ROW_KEY.getBytes());
 74         htable.get(get);
 75         
 76         //scan
 77         Scan scan=new Scan();
 78         ResultScanner scanner = htable.getScanner(scan);*/
 79     }
 80 
 81     private static void initBeforeCreate(Admin admin, TableName name)
 82             throws IOException {
 83         /*建立前存在就刪除
 84          * */
 85         if(admin.tableExists(name)){
 86              if(admin.isTableEnabled(name)){
 87                  admin.disableTable(name);
 88              }
 89              admin.deleteTable(name);
 90          }
 91     }
 92 
 93     private static void createTable(Admin admin, Table table)
 94             throws IOException {
 95         HTableDescriptor desc=new HTableDescriptor(table.getName());
 96         HColumnDescriptor family=new HColumnDescriptor(COLUMNFAMILY_NAME);
 97         family.setMaxVersions(3);
 98         family.setMinVersions(0);
 99         desc.addFamily(family);
100         admin.createTable(desc);
101     }
102 
103     /*private static void put(HTable htable,String column,String value) throws IOException {
104         Put put=new Put(ROW_KEY.getBytes());
105         put.addColumn(COLUMNFAMILY_NAME.getBytes(), column.getBytes(), value.getBytes());
106         htable.put(put);
107     }
108 
109     private static void createtable(HBaseAdmin admin) throws IOException {
110         HTableDescriptor desc = new HTableDescriptor(TABLE_NAME);
111         HColumnDescriptor family = new HColumnDescriptor(COLUMNFAMILY_NAME);
112         desc.addFamily(family);
113        family.setMaxVersions(3);
114         if (!admin.tableExists(TABLE_NAME)) {
115             //該表不存在,直接建立
116             admin.createTable(desc);
117         }else{
118             //該表存在,刪除後再建立
119             if(!admin.isTableAvailable(TABLE_NAME)){
120                 //該表disable,直接刪除
121                 admin.deleteTable(TABLE_NAME);
122             }else{
123                 //該表enable,先disable,再刪除
124                 admin.disableTable(TABLE_NAME);
125                 admin.deleteTable(TABLE_NAME);
126             }
127             admin.createTable(desc);
128         }
129     }*/
130 
131 }
複製程式碼

具體改成什麼了,以及為什麼修改,原始碼裡面說的很清楚,比如:

HBaseAdmin is no longer a client API. It is marked InterfaceAudience.Private indicating that
* this is an HBase-internal class as defined in
* https://hadoop.apache.org/docs/current/hadoop-project-dist/hadoop-common/InterfaceClassification.html
* There are no guarantees for backwards source / binary compatibility and methods or class can
* change or go away without deprecation.
* Use {@link Connection#getAdmin()} to obtain an instance of {@link Admin} instead of constructing
* an HBaseAdmin directly.

其他的自己關聯原始碼自己看吧!