Hbase-JavaAPI操作

关于 Maven问题,添加了如下依赖,貌似并不能解决依赖,最终使用了Hbase中lib文件夹里自带的jar包。

<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>

版本:

API:

package com.Hbase.TestDemo;


import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.*;
import org.apache.hadoop.hbase.client.*;
import org.apache.hadoop.hbase.util.Bytes;


import java.io.IOException;

public class HbaseDemo {

    public static Configuration conf;
    public static Connection connection;
    public static Admin admin;

    /**
     * 静态代码块最先执行
     */
    static{
        try {
            //使用 HBaseConfiguration 的单例方法实例化
            conf = HBaseConfiguration.create();
            conf.set("hbase.zookeeper.quorum", "centos01,centos02,centos03");
            conf.set("hbase.zookeeper.property.clientPort", "2181");
            //获取连接、管理员对象
            connection = ConnectionFactory.createConnection(conf);
            admin =  connection.getAdmin();
        } catch (IOException e) {
            e.printStackTrace();
        }

    }

    /**
     * 判断表,是否存在
     * @param tableName:表名
     * @return 返回是否存在
     */
    public  static  boolean  isTableExist(String  tableName)  throws MasterNotRunningException, ZooKeeperConnectionException, IOException {

        //判断表是否存在
        boolean exites = admin.tableExists(TableName.valueOf(tableName));
        return exites;

    }

    /**
     * 创建表
     * @param tableName:表名
     * @param columnFamily:列族,可变形参
     */
    public static void createTable(String tableName, String... columnFamily) throws MasterNotRunningException, ZooKeeperConnectionException, IOException{

        if(columnFamily.length<=0){
            System.out.println("需要设置列族信息!");
            return;
        }

        //判断表是否存在
        if(isTableExist(tableName)){
            System.out.println("表" + tableName + ":已存在");
            return;
        }

        //创建表属性对象(表描述器),表名需要转字节
        HTableDescriptor descriptor = new HTableDescriptor(TableName.valueOf(tableName));

        //循环创建多个列族
        for(String cf : columnFamily){
            //添加具体的列族信息         创建列族描述器
            descriptor.addFamily(new HColumnDescriptor(cf));
        }
        //根据对表的配置,创建表
        admin.createTable(descriptor);


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

    }

    /**
     * 删除表
     * @param tableName:表名
     */
    public static void dropTable(String tableName) throws MasterNotRunningException, ZooKeeperConnectionException, IOException{

        if(isTableExist(tableName)){
            admin.disableTable(TableName.valueOf(tableName));
            admin.deleteTable(TableName.valueOf(tableName));
            System.out. println("表" + tableName + "删除成功!");
        }else{
            System.out.println("表" + tableName + "不存在!");
        }
    }

    /**
     * 向表中添加数据
     * @param tableName:表名
     * @param rowKey:rowkey
     * @param columnFamily:列族
     * @param column:列名
     * @param value:值
     * @throws IOException
     */
    public static void putData(String tableName, String rowKey, String columnFamily, String column, String value) throws IOException{
        //创建表对象
        Table table = connection.getTable(TableName.valueOf(tableName));

        //向表中插入数据(需要转为字节数组)
        Put put = new Put(Bytes.toBytes(rowKey));

        //向 Put 对象中组装数据
        put.addColumn(Bytes.toBytes(columnFamily),Bytes.toBytes(column),Bytes.toBytes(value));
        table.put(put);
        table.close();
        System.out.println("插入数据成功");

        //关闭table连接,每次操作的表不一样,不能公用tatble对象
        table.close();
    }

    /**
     * get方式获取数据
     * @param tableName
     * @param rowKey
     * @param family
     * @param qualifier
     */
    public static void getData(String tableName, String rowKey, String family, String qualifier) throws IOException{

        Table table = connection.getTable(TableName.valueOf(tableName));

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

        //2.0不填加,获取指定rowKey的所有信息


        //2.1指定获取的列族,所有值
        //get.addFamily(Bytes.toBytes(family));
        //2.2获取指定族和列
        //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)));
        }
    }

    /**
     * scan查询
     * @param tableName:表名
     */
    public static void scanTable(String tableName) throws IOException{
        Table table = connection.getTable(TableName.valueOf(tableName));
        //得到用于扫描 region 的对象
        Scan scan = new Scan();
        //使用 table 得到 resultcanner 实现类的对象
        ResultScanner resultScanner = table.getScanner(scan);

        //解析 resultScanner
        for(Result result : resultScanner){
            Cell[] cells = result.rawCells();
            //解析result
            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)));
            }
        }
        //关闭表连接
        table.close();
    }

    /**
     * 删除表中数据
     * @param tableName
     * @param rowKey
     * @param family
     * @param qualifier
     */
    public static void deleteData(String tableName, String rowKey, String family, String qualifier) throws IOException {
        //删除了整个rowkey的数据

        //1.获取表对象
        Table table = connection.getTable(TableName.valueOf(tableName));

        //2.构建删除对象
        Delete delete = new Delete(Bytes.toBytes(rowKey));

        //3.执行删除操作
        table.delete(delete);

        //4.关闭连接
        table.close();
    }





    /**
     * 最后关闭连接
     */
    public static void close(){

        if(admin != null){
            try {
                admin.close();
            }catch (Exception e){
                e.printStackTrace();
            }
        }
        if(connection != null){
            try {
                connection.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

    }
    public static void main(String[] args) throws IOException {


        /**  DDL操作
        //1、测试表是否存在
        System.out.println(isTableExist("student"));


        //2、创建表
        System.out.println(isTableExist("test1"));
        createTable("test1","info1","info2");
        System.out.println(isTableExist("test1"));

        //3、删除表
        dropTable("test1");
         */

        //1、插入数据
        //putData("student","1003","info","name","jiangqingtai");

        //2、查询数据
        //getData("student","1001","info","1");

        //3、查询表
        //scanTable("student");


        //4、删除表数据
        //deleteData("student","1001","na","na");
        //关闭连接
        close();
    }
}

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值