Hbase新舊api對比
阿新 • • 發佈:2019-02-20
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 publicstatic 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.
其他的自己關聯原始碼自己看吧!