编写HBaseAPI (Java版)

1、新建Maven Project

新建项目后在pom.xml中添加依赖:

<dependency>

    <groupId>org.apache.hbase</groupId>

    <artifactId>hbase-server</artifactId>

    <version>1.3.1</version>

</dependency>

 

<dependency>

    <groupId>org.apache.hbase</groupId>

    <artifactId>hbase-client</artifactId>

    <version>1.3.1</version>

</dependency>

 

<dependency>

       <groupId>jdk.tools</groupId>

       <artifactId>jdk.tools</artifactId>

       <version>1.6</version>

       <scope>system</scope>

       <systemPath>${JAVA_HOME}/lib/tools.jar</systemPath>

</dependency>

 

2、编写HBaseAPI

注意,这部分的学习内容,我们先学习使用老版本的API,接着再写出新版本的API调用方式。因为在企业中,有些时候我们需要一些过时的API来提供更好的兼容性。

1) 首先需要获取Configuration对象:

public static Configuration conf;

static{

       //使用HBaseConfiguration的单例方法实例化

       conf = HBaseConfiguration.create();

conf.set("hbase.zookeeper.quorum", "192.168.216.20");

conf.set("hbase.zookeeper.property.clientPort", "2181");

}

2) 判断表是否存在:

public static boolean isTableExist(String tableName) throws MasterNotRunningException, ZooKeeperConnectionException, IOException{

       //在HBase中管理、访问表需要先创建HBaseAdmin对象

//Connection connection = ConnectionFactory.createConnection(conf);

//HBaseAdmin admin = (HBaseAdmin) connection.getAdmin();

       HBaseAdmin admin = new HBaseAdmin(conf);

       return admin.tableExists(tableName);

}

3) 创建表

public static void createTable(String tableName, String... columnFamily) throws MasterNotRunningException, ZooKeeperConnectionException, IOException{

       HBaseAdmin admin = new HBaseAdmin(conf);

       //判断表是否存在

       if(isTableExist(tableName)){

              System.out.println("表" + tableName + "已存在");

              //System.exit(0);

       }else{

              //创建表属性对象,表名需要转字节

              HTableDescriptor descriptor = new HTableDescriptor(TableName.valueOf(tableName));

              //创建多个列族

              for(String cf : columnFamily){

                     descriptor.addFamily(new HColumnDescriptor(cf));

              }

              //根据对表的配置,创建表

              admin.createTable(descriptor);

              System.out.println("表" + tableName + "创建成功!");

       }

}

 

4) 删除表

public static void dropTable(String tableName) throws MasterNotRunningException, ZooKeeperConnectionException, IOException{

       HBaseAdmin admin = new HBaseAdmin(conf);

       if(isTableExist(tableName)){

              admin.disableTable(tableName);

              admin.deleteTable(tableName);

              System.out.println("表" + tableName + "删除成功!");

       }else{

              System.out.println("表" + tableName + "不存在!");

       }

}

5) 向表中插入数据

public static void addRowData(String tableName, String rowKey, String columnFamily, String column, String value) throws IOException{

       //创建HTable对象

       HTable hTable = new HTable(conf, tableName);

       //向表中插入数据

       Put put = new Put(Bytes.toBytes(rowKey));

       //向Put对象中组装数据

       put.add(Bytes.toBytes(columnFamily), Bytes.toBytes(column), Bytes.toBytes(value));

       hTable.put(put);

       hTable.close();

       System.out.println("插入数据成功");

}

6) 删除多行数据

public static void deleteMultiRow(String tableName, String... rows) throws IOException{

       HTable hTable = new HTable(conf, tableName);

       List<Delete> deleteList = new ArrayList<Delete>();

       for(String row : rows){

              Delete delete = new Delete(Bytes.toBytes(row));

              deleteList.add(delete);

       }

       hTable.delete(deleteList);

       hTable.close();

}

7) 得到所有数据

public static void getAllRows(String tableName) throws IOException{

       HTable hTable = new HTable(conf, tableName);

       //得到用于扫描region的对象

       Scan scan = new Scan();

       //使用HTable得到resultcanner实现类的对象

       ResultScanner resultScanner = hTable.getScanner(scan);

       for(Result result : resultScanner){

              Cell[] cells = result.rawCells();

              for(Cell cell : cells){

                     //得到rowkey

                     System.out.println("行键:" + Bytes.toString(CellUtil.cloneRow(cell)));

                     //得到列族

                     System.out.println("列族" + Bytes.toString(CellUtil.cloneFamily(cell)));

                     System.out.println("列:" + Bytes.toString(CellUtil.cloneQualifier(cell)));

                     System.out.println("值:" + Bytes.toString(CellUtil.cloneValue(cell)));

              }

       }

}

8) 得到某一行所有数据

public static void getRow(String tableName, String rowKey) throws IOException{

       HTable table = new HTable(conf, tableName);

       Get get = new Get(Bytes.toBytes(rowKey));

       //get.setMaxVersions();显示所有版本

    //get.setTimeStamp();显示指定时间戳的版本

       Result result = table.get(get);

       for(Cell cell : result.rawCells()){

              System.out.println("行键:" + Bytes.toString(result.getRow()));

              System.out.println("列族" + Bytes.toString(CellUtil.cloneFamily(cell)));

              System.out.println("列:" + Bytes.toString(CellUtil.cloneQualifier(cell)));

              System.out.println("值:" + Bytes.toString(CellUtil.cloneValue(cell)));

              System.out.println("时间戳:" + cell.getTimestamp());

       }

}

9) 获取某一行指定“列族:列”的数据

public static void getRowQualifier(String tableName, String rowKey, String family, String qualifier) throws IOException{

       HTable table = new HTable(conf, tableName);

       Get get = new Get(Bytes.toBytes(rowKey));

       get.addColumn(Bytes.toBytes(family), Bytes.toBytes(qualifier));

       Result result = table.get(get);

       for(Cell cell : result.rawCells()){

              System.out.println("行键:" + Bytes.toString(result.getRow()));

              System.out.println("列族" + Bytes.toString(CellUtil.cloneFamily(cell)));

              System.out.println("列:" + Bytes.toString(CellUtil.cloneQualifier(cell)));

              System.out.println("值:" + Bytes.toString(CellUtil.cloneValue(cell)));

       }

}

 

/**
         * 管理表的:
         * HBaseAdmin(Admin):管理表(创建,删除) 
         *         HTableDescriptor:表表述器,用于创建表
         *         HColumnDescriptor:列描述器,用于构建列族 
         *         尖叫提示:列族和列不能混淆 在添加数据时候的列是动态添加的
         * 
         * 操作表的:
         * Table:用于表中数据的操作 
         *         Put:用于封装带存放的数据
         *         Delete:用于封装要删除的数据
         *         Get:用于得到某一个具体的数据
         * 
         * Scan:用于扫描表的数据信息
         * ResultScanner:通过配置的扫描器,得到一个扫描表的实例扫描器
         * Result:每一个该类型的实例化对象,都对应了一个rowkey中的若干个数据
         * Cell:用于封装一个rowkey下面的所有单元格中的数据(rowkey,columnFamily:列族,column:列,values:值)
         * 
         * 
         */

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值