
# HBase Java API接口介绍
#### 接口使用建议
- 建议使用org.apache.hadoop.hbase.Cell作为KV数据对象，而不是org.apache.hadoop.hbase.KeyValue。
- 建议使用Connection connection = ConnectionFactory.createConnection(conf)来创建连接，废弃HTablePool。
- 建议使用org.apache.hadoop.hbase.mapreduce，不建议使用org.apache.hadoop.hbase.mapred。
- 建议通过构造出来的Connection对象的getAdmin()方法来获取HBase的客户端操作对象。
 
#### HBase常用接口介绍
HBase常用的Java类有以下几个：
- 接口类Admin，HBase客户端应用的核心类，主要封装了HBase管理类操作的API，例如建表，删表等操作，部分常见接口参见表[表1]。
- 接口类Table，HBase读写操作类，主要封装了HBase表的读写操作的API，部分常见接口参见表[表2]。
   表1org.apache.hadoop.hbase.client.Admin 
  | **方法**                                                                                      | **描述**                                                                                                        |
  |:---|:---|
  | boolean tableExists(final TableName tableName)                                              | 通过该方法可以判断指定的表是否存在。如果hbase:meta表中存在该表则返回true，否则返回false。                                                        |
  | HTableDescriptor\[\] listTables(String regex)                                               | 查看匹配指定正则表达式格式的用户表。该方法还有另外两个重载的方法，一个入参类型为Pattern；一个入参为空，默认查看所有用户表。                                             |
  | HTableDescriptor\[\] listTables(final Pattern pattern, final boolean includeSysTables)      | 作用与上一个方法类似，用户可以通过该方法指定返回的结果是否包含系统表，上一个接口只返回用户表。                                                               |
  | TableName\[\] listTableNames(String regex)                                                  | 查看匹配指定正则表达式格式的用户表。该方法还有另外两个重载的方法，一个入参类型为Pattern；一个入参为空，默认查看所有用户表。该方法的作用与listTables类似，只是该方法返回类型为TableName\[\]。 |
  | TableName\[\] listTableNames(final Pattern pattern, final boolean includeSysTables)         | 作用与上一个方法类似，用户可以通过该方法指定返回的结果是否包含系统表，上一个方法只返回用户表。                                                               |
  | void createTable(HTableDescriptor desc)                                                     | 创建一个只有一个region的表。                                                                                             |
  | void createTable(HTableDescriptor desc, byte\[\] startKey, byte\[\] endKey, int numRegions) | 创建一个有指定数量region的表，其中第一个region的endKey为参数中的startKey，最后一个region的StartKey为参数中的endKey。如果region的数量过多，该方法可能调用超时。     |
  | void createTable(final HTableDescriptor desc, byte\[\]\[\] splitKeys)                       | 创建一个表，该表的region数量以及每个region的startKey由splitKeys决定。如果region的数量过多，该方法可能调用超时。                                     |
  | void createTable(final HTableDescriptor desc, final byte\[\]\[\] splitKeys)                 | 创建一个表，该表的region数量以及每个region的startKey由splitKeys决定。该方法为异步调用，不会等待创建的表上线。                                         |
  | void deleteTable(final TableName tableName)                                                 | 删除指定的表。                                                                                                       |
  | public void truncateTable(final TableName tableName, final boolean preserveSplits)          | 重建指定的表，如果第二个参数为true，重建后的表region与之前保持一致，否则只有一个region。                                                          |
  | void enableTable(final TableName tableName)                                                 | 启用指定的表。如果表的region数量过多，该方法可能调用超时。                                                                              |
  | void enableTableAsync(final TableName tableName)                                            | 启用指定的表。该方法为异步调用，不会等待所有region上线后才返回。                                                                           |
  | void disableTable(final TableName tableName)                                                | 禁用指定的表。如果表的region数量过多，该方法可能调用超时。                                                                              |
  | void disableTableAsync(final TableName tableName)                                           | 禁用指定的表。该方法为异步调用，不会等待所有region下线后才返回。                                                                           |
  | boolean isTableEnabled(TableName tableName)                                                 | 判断表是否已启用。该方法可以配合enableTableAsync方法使用来判断一个启用表的操作是否完成。                                                          |
  | boolean isTableDisabled(TableName tableName)                                                | 判断表是否已禁用。该方法可以配合disableTableAsync方法使用来判断一个禁用表的操作是否完成。                                                         |
  | void addColumn(final TableName tableName, final HColumnDescriptor column)                   | 添加一个列簇到指定的表。                                                                                                  |
  | void deleteColumn(final TableName tableName, final HColumnDescriptor column)                | 从指定的表删除指定的列簇。                                                                                                 |
  | void modifyColumn(final TableName tableName, final HColumnDescriptor column)                | 修改指定的列簇。                                                                                                      |
     
   表2org.apache.hadoop.hbase.client.Table 
  | **方法**                                  | **描述**                                                              |
  |:---|:---|
  | boolean exists(Get get)                 | 判断指定的rowkey在表中是否存在。                                                 |
  | boolean\[\] existsAll(List\<Get\> gets) | 判断这批指定的rowkey在表中是否存在，返回的boolean数组结果与入参位置一一对应。                       |
  | Result get(Get get)                     | 通过指定的rowkey读取数据。                                                    |
  | Result\[\] get(List\<Get\> gets)        | 通过指定一批rowkey的方式批量读取数据。                                              |
  | ResultScanner getScanner(Scan scan)     | 获取该表的一个Scanner对象，查询相关的参数可以通过入参scan指定，包括StartRow，StopRow，caching大小等。 |
  | void put(Put put)                       | 往该表写入一条数据。                                                          |
  | void put(List\<Put\> puts)              | 往该表写入一批数据。                                                          |
  | void close()                            | 释放该Table对象持有的资源。                                                    |
     
  ![](https://support.huaweicloud.com/devg-lts-mrs/public_sys-resources/note_3.0-zh-cn.png)
  [表1]和[表2]只列举了部分常用的方法。
  
 
