• HBase学习之路 (四)HBase的API操作


    Eclipse环境搭建

    具体的jar的引入方式可以参考http://www.cnblogs.com/qingyunzong/p/8623309.html

    HBase API操作表和数据

      1 import java.io.IOException;
      2 import java.util.Date;
      3 
      4 import org.apache.hadoop.conf.Configuration;
      5 import org.apache.hadoop.hbase.HBaseConfiguration;
      6 import org.apache.hadoop.hbase.HColumnDescriptor;
      7 import org.apache.hadoop.hbase.HTableDescriptor;
      8 import org.apache.hadoop.hbase.TableName;
      9 import org.apache.hadoop.hbase.client.Admin;
     10 import org.apache.hadoop.hbase.client.Connection;
     11 import org.apache.hadoop.hbase.client.ConnectionFactory;
     12 import org.apache.hadoop.hbase.client.Delete;
     13 import org.apache.hadoop.hbase.client.Get;
     14 import org.apache.hadoop.hbase.client.Put;
     15 import org.apache.hadoop.hbase.client.Result;
     16 import org.apache.hadoop.hbase.client.ResultScanner;
     17 import org.apache.hadoop.hbase.client.Scan;
     18 import org.apache.hadoop.hbase.client.Table;
     19 
     20 import com.study.hbase.service.HBaseUtils;
     21 
     22 public class HBaseUtilsImpl implements HBaseUtils {
     23 
     24     private static final String ZK_CONNECT_KEY = "hbase.zookeeper.quorum";
     25     private static final String ZK_CONNECT_VALUE = "hadoop1:2181,hadoop2:2181,hadoop3:2181";
     26 
     27     private static Connection conn = null;
     28     private static Admin admin = null;
     29 
     30     public static void main(String[] args) throws Exception {
     31         
     32         getConnection();
     33         getAdmin();
     34         
     35         HBaseUtilsImpl hbu = new HBaseUtilsImpl();
     36         
     37         
     38         //hbu.getAllTables();
     39         
     40         //hbu.descTable("people");
     41         
     42         //String[] infos = {"info","family"};
     43         //hbu.createTable("people", infos);
     44         
     45         //String[] add = {"cs1","cs2"};
     46         //String[] remove = {"cf1","cf2"};
     47         
     48         //HColumnDescriptor hc = new HColumnDescriptor("sixsixsix");
     49         
     50         //hbu.modifyTable("stu",hc);
     51         //hbu.getAllTables();
     52 
     53         
     54         hbu.putData("huoying", "rk001", "cs2", "name", "aobama",new Date().getTime());
     55         hbu.getAllTables();
     56         
     57         conn.close();
     58     }
     59 
     60     // 获取连接
     61     public static Connection getConnection() {
     62         // 创建一个可以用来管理hbase配置信息的conf对象
     63         Configuration conf = HBaseConfiguration.create();
     64         // 设置当前的程序去寻找的hbase在哪里
     65         conf.set(ZK_CONNECT_KEY, ZK_CONNECT_VALUE);
     66         try {
     67             conn = ConnectionFactory.createConnection(conf);
     68         } catch (IOException e) {
     69             e.printStackTrace();
     70         }
     71         return conn;
     72     }
     73 
     74     // 获取管理员对象
     75     public static Admin getAdmin() {
     76         try {
     77             admin = conn.getAdmin();
     78         } catch (IOException e) {
     79             e.printStackTrace();
     80         }
     81         return admin;
     82     }
     83 
     84     // 查询所有表
     85     @Override
     86     public void getAllTables() throws Exception {
     87         //获取列簇的描述信息
     88         HTableDescriptor[] listTables = admin.listTables();
     89         for (HTableDescriptor listTable : listTables) {
     90             //转化为表名
     91             String tbName = listTable.getNameAsString();
     92             //获取列的描述信息
     93             HColumnDescriptor[] columnFamilies = listTable.getColumnFamilies();
     94             System.out.println("tableName:"+tbName);
     95             for(HColumnDescriptor columnFamilie : columnFamilies) {
     96                 //获取列簇的名字
     97                 String columnFamilyName = columnFamilie.getNameAsString();
     98                 System.out.print("	"+"columnFamilyName:"+columnFamilyName);
     99             }
    100             System.out.println();
    101         }
    102 
    103     }
    104 
    105     // 创建表,传参,表名和列簇的名字
    106     @Override
    107     public void createTable(String tableName, String[] family) throws Exception {
    108         
    109         TableName name = TableName.valueOf(tableName);
    110         //判断表是否存在
    111         if(admin.tableExists(name)) {
    112             System.out.println("table已经存在!");
    113         }else {
    114             //表的列簇示例
    115             HTableDescriptor htd = new HTableDescriptor(name);
    116             //向列簇中添加列的信息
    117             for(String str : family) {
    118                 HColumnDescriptor hcd = new HColumnDescriptor(str);
    119                 htd.addFamily(hcd);
    120             }
    121             //创建表
    122             admin.createTable(htd);
    123             //判断表是否创建成功
    124             if(admin.tableExists(name)) {
    125                 System.out.println("table创建成功");
    126             }else {
    127                 System.out.println("table创建失败");
    128             }
    129         }    
    130         
    131     }
    132 
    133     // 创建表,传参:封装好的多个列簇
    134     @Override
    135     public void createTable(HTableDescriptor htds) throws Exception {
    136         //获得表的名字
    137         String tbName = htds.getNameAsString();
    138         
    139         admin.createTable(htds);
    140     }
    141 
    142     // 创建表,传参,表名和封装好的多个列簇
    143     @Override
    144     public void createTable(String tableName, HTableDescriptor htds) throws Exception {
    145 
    146         TableName name = TableName.valueOf(tableName);
    147         
    148         if(admin.tableExists(name)) {
    149             System.out.println("table已经存在!");
    150         }else {
    151             admin.createTable(htds);
    152             boolean flag = admin.tableExists(name);
    153             System.out.println(flag ? "创建成功" : "创建失败");
    154         }
    155         
    156     }
    157 
    158     
    159     // 查看表的列簇属性
    160     @Override
    161     public void descTable(String tableName) throws Exception {
    162         //转化为表名
    163         TableName name = TableName.valueOf(tableName);
    164         //判断表是否存在
    165         if(admin.tableExists(name)) {
    166             //获取表中列簇的描述信息
    167             HTableDescriptor tableDescriptor = admin.getTableDescriptor(name);
    168             //获取列簇中列的信息
    169             HColumnDescriptor[] columnFamilies = tableDescriptor.getColumnFamilies();
    170             for(HColumnDescriptor columnFamily : columnFamilies) {
    171                 System.out.println(columnFamily);
    172             }
    173             
    174         }else {
    175             System.out.println("table不存在");
    176         }
    177         
    178     }
    179 
    180     // 判断表存在不存在
    181     @Override
    182     public boolean existTable(String tableName) throws Exception {
    183         TableName name = TableName.valueOf(tableName);
    184         return admin.tableExists(name);
    185     }
    186 
    187     // disable表
    188     @Override
    189     public void disableTable(String tableName) throws Exception {
    190         
    191         TableName name = TableName.valueOf(tableName);
    192         
    193         if(admin.tableExists(name)) {
    194             if(admin.isTableEnabled(name)) {
    195                 admin.disableTable(name);
    196             }else {
    197                 System.out.println("table不是活动状态");
    198             }
    199         }else {
    200             System.out.println("table不存在");
    201         }
    202             
    203     }
    204 
    205     // drop表
    206     @Override
    207     public void dropTable(String tableName) throws Exception {
    208         //转化为表名
    209         TableName name = TableName.valueOf(tableName);
    210         //判断表是否存在
    211         if(admin.tableExists(name)) {
    212             //判断表是否处于可用状态
    213             boolean tableEnabled = admin.isTableEnabled(name);
    214             
    215             if(tableEnabled) {
    216                 //使表变成不可用状态
    217                 admin.disableTable(name);
    218             }
    219             //删除表
    220             admin.deleteTable(name);
    221             //判断表是否存在
    222             if(admin.tableExists(name)) {
    223                 System.out.println("删除失败");
    224             }else {
    225                 System.out.println("删除成功");
    226             }
    227             
    228         }else {
    229             System.out.println("table不存在");
    230         } 
    231         
    232         
    233     }
    234     
    235     // 修改表(增加和删除)
    236     @Override
    237     public void modifyTable(String tableName) throws Exception {
    238         //转化为表名
    239         TableName name = TableName.valueOf(tableName);
    240         //判断表是否存在
    241         if(admin.tableExists(name)) {
    242             //判断表是否可用状态
    243             boolean tableEnabled = admin.isTableEnabled(name);
    244             
    245             if(tableEnabled) {
    246                 //使表变成不可用
    247                 admin.disableTable(name);
    248             }
    249             //根据表名得到表
    250             HTableDescriptor tableDescriptor = admin.getTableDescriptor(name);
    251             //创建列簇结构对象
    252             HColumnDescriptor columnFamily1 = new HColumnDescriptor("cf1".getBytes());
    253             HColumnDescriptor columnFamily2 = new HColumnDescriptor("cf2".getBytes());
    254             
    255             tableDescriptor.addFamily(columnFamily1);
    256             tableDescriptor.addFamily(columnFamily2);
    257             //替换该表所有的列簇
    258             admin.modifyTable(name, tableDescriptor);
    259             
    260         }else {
    261             System.out.println("table不存在");
    262         } 
    263     }
    264 
    265     // 修改表(增加和删除)
    266     @Override
    267     public void modifyTable(String tableName, String[] addColumn, String[] removeColumn) throws Exception {
    268         //转化为表名
    269         TableName name = TableName.valueOf(tableName);
    270         //判断表是否存在
    271         if(admin.tableExists(name)) {
    272             //判断表是否可用状态
    273             boolean tableEnabled = admin.isTableEnabled(name);
    274             
    275             if(tableEnabled) {
    276                 //使表变成不可用
    277                 admin.disableTable(name);
    278             }
    279             //根据表名得到表
    280             HTableDescriptor tableDescriptor = admin.getTableDescriptor(name);
    281             //创建列簇结构对象,添加列
    282             for(String add : addColumn) {
    283                 HColumnDescriptor addColumnDescriptor = new HColumnDescriptor(add);
    284                 tableDescriptor.addFamily(addColumnDescriptor);
    285             }
    286             //创建列簇结构对象,删除列
    287             for(String remove : removeColumn) {
    288                 HColumnDescriptor removeColumnDescriptor = new HColumnDescriptor(remove);
    289                 tableDescriptor.removeFamily(removeColumnDescriptor.getName());
    290             }
    291             
    292             admin.modifyTable(name, tableDescriptor);
    293             
    294             
    295         }else {
    296             System.out.println("table不存在");
    297         } 
    298         
    299     }
    300 
    301     @Override
    302     public void modifyTable(String tableName, HColumnDescriptor hcds) throws Exception {
    303         //转化为表名
    304         TableName name = TableName.valueOf(tableName);
    305         //根据表名得到表
    306         HTableDescriptor tableDescriptor = admin.getTableDescriptor(name);
    307         //获取表中所有的列簇信息
    308         HColumnDescriptor[] columnFamilies = tableDescriptor.getColumnFamilies();
    309         
    310         boolean flag = false;
    311         //判断参数中传入的列簇是否已经在表中存在
    312         for(HColumnDescriptor columnFamily : columnFamilies) {
    313             if(columnFamily.equals(hcds)) {
    314                 flag = true;
    315             }
    316         }    
    317         //存在提示,不存在直接添加该列簇信息
    318         if(flag) {
    319             System.out.println("该列簇已经存在");
    320         }else {
    321             tableDescriptor.addFamily(hcds);
    322             admin.modifyTable(name, tableDescriptor);
    323         }
    324         
    325     }
    326 
    327     
    328     /**添加数据
    329     *tableName:    表明
    330     *rowKey:    行键
    331     *familyName:列簇
    332     *columnName:列名
    333     *value:        值
    334     */
    335     @Override
    336     public void putData(String tableName, String rowKey, String familyName, String columnName, String value)
    337             throws Exception {
    338         //转化为表名
    339         TableName name = TableName.valueOf(tableName);
    340         //添加数据之前先判断表是否存在,不存在的话先创建表
    341         if(admin.tableExists(name)) {
    342         
    343         }else {
    344             //根据表明创建表结构
    345             HTableDescriptor tableDescriptor = new HTableDescriptor(name);
    346             //定义列簇的名字
    347             HColumnDescriptor columnFamilyName = new HColumnDescriptor(familyName);
    348             tableDescriptor.addFamily(columnFamilyName);
    349             admin.createTable(tableDescriptor);
    350         
    351         }
    352 
    353         Table table = conn.getTable(name);
    354         Put put = new Put(rowKey.getBytes());
    355         
    356         put.addColumn(familyName.getBytes(), columnName.getBytes(), value.getBytes());
    357         table.put(put);
    358 
    359     }
    360 
    361     @Override
    362     public void putData(String tableName, String rowKey, String familyName, String columnName, String value,
    363             long timestamp) throws Exception {
    364 
    365         // 转化为表名
    366         TableName name = TableName.valueOf(tableName);
    367         // 添加数据之前先判断表是否存在,不存在的话先创建表
    368         if (admin.tableExists(name)) {
    369 
    370         } else {
    371             // 根据表明创建表结构
    372             HTableDescriptor tableDescriptor = new HTableDescriptor(name);
    373             // 定义列簇的名字
    374             HColumnDescriptor columnFamilyName = new HColumnDescriptor(familyName);
    375             tableDescriptor.addFamily(columnFamilyName);
    376             admin.createTable(tableDescriptor);
    377 
    378         }
    379 
    380         Table table = conn.getTable(name);
    381         Put put = new Put(rowKey.getBytes());
    382 
    383         //put.addColumn(familyName.getBytes(), columnName.getBytes(), value.getBytes());
    384         put.addImmutable(familyName.getBytes(), columnName.getBytes(), timestamp, value.getBytes());
    385         table.put(put);
    386 
    387     }
    388 
    389 
    390     // 根据rowkey查询数据
    391     @Override
    392     public Result getResult(String tableName, String rowKey) throws Exception {
    393         
    394         Result result;
    395         TableName name = TableName.valueOf(tableName);
    396         if(admin.tableExists(name)) {
    397             Table table = conn.getTable(name);
    398             Get get = new Get(rowKey.getBytes());
    399             result = table.get(get);
    400             
    401         }else {
    402             result = null;
    403         }
    404         
    405         return result;
    406     }
    407 
    408     // 根据rowkey查询数据
    409     @Override
    410     public Result getResult(String tableName, String rowKey, String familyName) throws Exception {
    411         Result result;
    412         TableName name = TableName.valueOf(tableName);
    413         if(admin.tableExists(name)) {
    414             Table table = conn.getTable(name);
    415             Get get = new Get(rowKey.getBytes());
    416             get.addFamily(familyName.getBytes());
    417             result = table.get(get);
    418             
    419         }else {
    420             result = null;
    421         }
    422         
    423         return result;
    424     }
    425 
    426     // 根据rowkey查询数据
    427     @Override
    428     public Result getResult(String tableName, String rowKey, String familyName, String columnName) throws Exception {
    429         
    430         Result result;
    431         TableName name = TableName.valueOf(tableName);
    432         if(admin.tableExists(name)) {
    433             Table table = conn.getTable(name);
    434             Get get = new Get(rowKey.getBytes());
    435             get.addColumn(familyName.getBytes(), columnName.getBytes());
    436             result = table.get(get);
    437             
    438         }else {
    439             result = null;
    440         }
    441         
    442         return result;
    443     }
    444 
    445     // 查询指定version
    446     @Override
    447     public Result getResultByVersion(String tableName, String rowKey, String familyName, String columnName,
    448             int versions) throws Exception {
    449         
    450         Result result;
    451         TableName name = TableName.valueOf(tableName);
    452         if(admin.tableExists(name)) {
    453             Table table = conn.getTable(name);
    454             Get get = new Get(rowKey.getBytes());
    455             get.addColumn(familyName.getBytes(), columnName.getBytes());
    456             get.setMaxVersions(versions);
    457             result = table.get(get);
    458             
    459         }else {
    460             result = null;
    461         }
    462         
    463         return result;
    464     }
    465 
    466     // scan全表数据
    467     @Override
    468     public ResultScanner getResultScann(String tableName) throws Exception {
    469         
    470         ResultScanner result;
    471         TableName name = TableName.valueOf(tableName);
    472         if(admin.tableExists(name)) {
    473             Table table = conn.getTable(name);
    474             Scan scan = new Scan();
    475             result = table.getScanner(scan);
    476             
    477         }else {
    478             result = null;
    479         }
    480         
    481         return result;
    482     }
    483 
    484     // scan全表数据
    485     @Override
    486     public ResultScanner getResultScann(String tableName, Scan scan) throws Exception {
    487         
    488         ResultScanner result;
    489         TableName name = TableName.valueOf(tableName);
    490         if(admin.tableExists(name)) {
    491             Table table = conn.getTable(name);
    492             result = table.getScanner(scan);
    493             
    494         }else {
    495             result = null;
    496         }
    497         
    498         return result;
    499     }
    500 
    501     // 删除数据(指定的列)
    502     @Override
    503     public void deleteColumn(String tableName, String rowKey) throws Exception {
    504         
    505         TableName name = TableName.valueOf(tableName);
    506         if(admin.tableExists(name)) {
    507             Table table = conn.getTable(name);
    508             Delete delete = new Delete(rowKey.getBytes());
    509             table.delete(delete);
    510         
    511         }else {
    512             System.out.println("table不存在");
    513         }
    514         
    515         
    516     }
    517 
    518     // 删除数据(指定的列)
    519     @Override
    520     public void deleteColumn(String tableName, String rowKey, String falilyName) throws Exception {
    521         
    522         TableName name = TableName.valueOf(tableName);
    523         if(admin.tableExists(name)) {
    524             Table table = conn.getTable(name);
    525             Delete delete = new Delete(rowKey.getBytes());
    526             delete.addFamily(falilyName.getBytes());
    527             table.delete(delete);
    528         
    529         }else {
    530             System.out.println("table不存在");
    531         }
    532         
    533     }
    534 
    535     // 删除数据(指定的列)
    536     @Override
    537     public void deleteColumn(String tableName, String rowKey, String falilyName, String columnName) throws Exception {
    538         TableName name = TableName.valueOf(tableName);
    539         if(admin.tableExists(name)) {
    540             Table table = conn.getTable(name);
    541             Delete delete = new Delete(rowKey.getBytes());
    542             delete.addColumn(falilyName.getBytes(), columnName.getBytes());
    543             table.delete(delete);
    544         
    545         }else {
    546             System.out.println("table不存在");
    547         }
    548     }
    549 
    550 }
  • 相关阅读:
    ptrace
    CentOS 5.4 final下Systemtap的安装
    SystemTap 静态探针安装包
    sysdig
    ORACLE 内部原理
    An introduction to KProbes
    CentOS6.5升级手动安装GCC4.8.2 与 CentOS 6.4 编译安装 gcc 4.8.1
    在Oracle Linux上安装dtrace
    dwarf调试信息格式入门
    MySQL 5.6.20-4 and Oracle Linux DTrace
  • 原文地址:https://www.cnblogs.com/qingyunzong/p/8671804.html
Copyright © 2020-2023  润新知