HBase系列(四)Java Api

这篇博客详细介绍了HBase的Java API,包括HBaseAdmin、HBaseConfiguration、HTableDescriptor、HColumnDescriptor、HTable、Put、Get和Result等类的用途。并讲解了Java API 1.X的基本使用,如Maven依赖、HBase连接和操作类的实现,以及单元测试。此外,还提及了Java API 2.X的变化,如HTableDescriptor和HColumnDescriptor被TableDescriptorBuilder和ColumnFamilyDescriptorBuilder取代。
摘要由CSDN通过智能技术生成


目前HBase维护了两个版本:1.x和2.x,两个版本的Java API有些区别,同时你使用的客户端的版本必须与服务端版本保持一致,如果用 2.x 版本的客户端代码去连接 1.x 版本的服务端,会抛出 NoSuchColumnFamilyException 等异常。

API常用类

在这里插入图片描述

HBaseAdmin

关系: org.apache.hadoop.hbase.client.HBaseAdmin
作用:提供了一个接口来管理 HBase 数据库的表信息。它提供的方法包括:创建表,删 除表,列出表项,使表有效或无效,以及添加或删除表列族成员等。
在这里插入图片描述
在这里插入图片描述

HBaseConfiguration

关系: org.apache.hadoop.hbase.HBaseConfiguration
作用:对 HBase 进行配置
在这里插入图片描述

HTableDescriptor

关系: org.apache.hadoop.hbase.HTableDescriptor
作用:包含了表的名字极其对应表的列族
在这里插入图片描述

HColumnDescriptor

关系: org.apache.hadoop.hbase.HColumnDescriptor
作用:维护着关于列族的信息,例如版本号,压缩设置等。它通常在创建表或者为表添 加列族的时候使用。列族被创建后不能直接修改,只能通过删除然后重新创建的方式。
列族被删除的时候,列族里面的数据也会同时被删除。
在这里插入图片描述

HTable

关系: org.apache.hadoop.hbase.client.HTable
作用:可以用来和 HBase 表直接通信。此方法对于更新操作来说是非线程安全的。
在这里插入图片描述
在这里插入图片描述

Put

关系: org.apache.hadoop.hbase.client.Put
作用:用来对单个行执行添加操作
在这里插入图片描述

Get

关系: org.apache.hadoop.hbase.client.Get
作用:用来获取单个行的相关信息
在这里插入图片描述

Result

关系: org.apache.hadoop.hbase.client.Result
作用:存储 Get 或者 Scan 操作后获取表的单行值。使用此类提供的方法可以直接获取值 或者各种 Map 结构( key-value 对)
在这里插入图片描述

Java API 1.X基本使用

Maven依赖

<dependency>
       <groupId>org.apache.hbase</groupId>
       <artifactId>hbase-client</artifactId>
       <version>1.4.1</version>
</dependency>

HBase连接类

先封装一个HBase连接类,用于获取连接、关闭连接

package com.shanchuan.hbase.api;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.client.Connection;
import org.apache.hadoop.hbase.client.ConnectionFactory;
import org.apache.log4j.Logger;

/**
 * @Author: H.w
 * @Date: 2021/1/20 上午10:17
 * @Description: TODO HBase连接类
 **/
public class HBaseUtils {
   
    private static final Logger logger = Logger.getLogger(HBaseUtils.class);

    private static Configuration configuration;
    private static Connection connection;

    // 设置HBase
    static {
   
        try {
   
            if (configuration == null) {
   
                configuration = HBaseConfiguration.create();
                configuration.set("hbase.zookeeper.property.clientPort", "2181");
                // 如果是集群 则主机名使用","隔开
                configuration.set("hbase.zookeeper.quorum","localhost");
            }
        }catch (Exception e) {
   
            logger.error("HBaseConfiguration Create field !");
        }
    }

    /**
     * TODO 获取连接
     * @return
     */
    public static Connection getConnection() {
   
        if (connection==null || connection.isClosed()) {
   
            try {
   
                connection = ConnectionFactory.createConnection(configuration);
            }catch (Exception e) {
   
                logger.error(e);
            }
        }
        return connection;
    }

    /**
     * 关闭连接
     */
    public static void closeConnection() {
   
        if (connection != null) {
   
            try {
   
                connection.close();
            }catch (Exception e) {
   
                logger.error(e);
            }
        }
    }
}

HBase操作类

package com.shanchuan.hbase.api;

import org.apache.hadoop.hbase.*;
import org.apache.hadoop.hbase.client.*;
import org.apache.hadoop.hbase.filter.FilterList;
import org.apache.hadoop.hbase.util.Bytes;
import org.apache.log4j.Logger;

import java.io.IOException;
import java.util.List;

/**
 * @Author: H.w
 * @Date: 2021/1/20 上午11:34
 * @Description: TODO HBase操作类
 **/
public class HBaseOperators {
   
    private static final Logger logger = Logger.getLogger(HBaseOperators.class);

    /**
     * TODO 创建namespace(相当于数据库)
     * @param connection
     * @param name namespace名称
     * @throws IOException
     */
    public static void createNameSpace(Connection connection,String name) throws IOException {
   
        HBaseAdmin admin = null;
        try {
   
            admin = (HBaseAdmin) connection.getAdmin();
            NamespaceDescriptor namespaceDescriptor = NamespaceDescriptor.create(name).build();
            admin.createNamespace(namespaceDescriptor);
        }finally {
   
            if (admin != null) {
   
                admin.close();
            }
        }
    }

    /**
     * TODO 删除namespace
     * @param connection
     * @param name namespace名称
     * @throws IOException
     */
    public static void deleteNameSpace(Connection connection, String name) throws IOException{
   
        HBaseAdmin admin = null;
        try {
   
            admin = (HBaseAdmin) connection.getAdmin();
            admin.deleteNamespace(name);
        }finally {
   
            if (admin != null) {
   
                admin.close();
            }
        }
    }

    /**
     * TODO 创建表
     * @param connection
     * @param tableName 表名
     * @param columnFamilies  列族
     */
    public static void createTable(Connection connection, String nameSpace,TableName tableName, List<String> columnFamilies) throws IOException {
   
        HBaseAdmin admin = null;
        try {
   
            admin = (HBaseAdmin) connection.getAdmin();
            //获取命名空间看是否存在,不存在会直接抛 NamespaceNotFoundException 异常(可以查看底层代码实现)  使用 try catch 捕捉
            try {
   
                NamespaceDescriptor namespaceDescriptor = admin.getNamespaceDescriptor(nameSpace);
            }catch (NamespaceNotFoundException
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值