通过Java对HBase进行操作

使用Java对hbase进行操作是,也需要像我们对关系数据进行的操作类似,都需要导入驱动、添加配置、连接数据库然后对数据库进行操作。

1. 导入驱动

  • 导入hbase-client.jar驱动包
    在pom.xml 中添加hbase依赖即可
<dependency>
            <groupId>org.apache.hbase</groupId>
            <artifactId>hbase-client</artifactId>
            <version>${hbase.version}</version>
            <scope>compile</scope>
</dependency>

2. 创建Configuration对象

Configuration对象指定Hbase相关参数,如下代码指定的是zookeeper的相关配置。

Configuration configuration = HBaseConfiguration.create();
        configuration.set("hbase.zookeeper.quorum", zkQuorum);
        configuration.set("hbase.zookeeper.property.clientPort", zkPort);

3. 使用HBaseAdmin对象对Hbase数据库进行操作

Admin对象后,可以通过下面的代码创建数据表了

  • 与hbase相关的类
    1.HBaseAdmin
    实现 Admin类 可以用来创建,删除,列表,启用和禁用表,添加和删除表列的列族和其他的管理操作。
    官方API2.HTableDescriptor
    描述Hbase表的详细信息。官方API3.HColumnDescriptor
    HColumnDescriptor包含一个列族的信息如版本的数量,压缩设置,等等。它被用作输入当创建一个表或添加一个列。可以通过实例化方法创建一个指定名称的列族具体方法实现参考API4.HbaseTemplate
    是HBase API的核心类,主要对Hbase表中的数据进行操作,简化了HBase并且避免一些常见的错误。API

以下代码是创建名为emp表,

/**
 * Created by 151029 on 2016/8/3.
 * 对于emp表的操作,创建表,对表做基本的操作
 */
@Component
public class EmpUtils {

    private String tableName = "emp";
//    private byte[] tableNameAsBytes = Bytes.toBytes("emp");

    // 注入配置文件
    @Resource(name = "hbaseConfiguration")
    private Configuration config;
    /**
     *  Admin可以用来创建,删除,列表,启用和禁用表,
     * 添加和删除表列的家庭和其他的管理操作。
     * HBaseAdmin实现了Admin
     */
    private HBaseAdmin admin;

    private HbaseTemplate hbaseTemplate;

    @Autowired
    private EmpRepository empRepository;

    //初始化方法, 判断表是否存在,存在删除,不存在创建
    public void initialize() throws IOException {
        //判断表是否存在
        if (admin.tableExists(tableName)) {
            //判断指定的表是否启动
            if (!admin.isTableDisabled(tableName)) {
                //isTableDisabled 返回true 说明表示离线状态
                System.out.printf("Disabling %s\n", tableName);
                admin.disableTable(tableName); //禁用表
            }
            System.out.printf("Deleting %s\n", tableName);
            admin.deleteTable(tableName); // 删除表
        }
        // hbase 表的详细信息
        HTableDescriptor tableDescriptor = new HTableDescriptor(tableName);
        // 维护列族的信息 HColumnDescriptor被用作输入当创建表或者添加一个列。
        HColumnDescriptor columnDescriptor = new HColumnDescriptor(
                EmpRepository.CF_INFO);
        // 添加列族
        tableDescriptor.addFamily(columnDescriptor);
        // 创建表
        admin.createTable(tableDescriptor);
    }

    // 添加信息
    public void addEmp(Emp emp){
        empRepository.save(emp);
    }

    /**
     * 插入信息指定的列族名称的列的值,疑问:是否是修改功能
     * @param rowKey 行健
     * @param familyName 列族名称
     * @param qualifier 列族中列的名称
     * @param value 要插入的值,注意是字节类型的数组
     */
    public void put(final String rowKey, final String familyName,final String qualifier, final byte[] value ){
        hbaseTemplate.put(tableName, rowKey, familyName, qualifier, value);
    }

}