Java多线程连接HBase

Java连接HBase:

1.C:\Windows\System32\drivers\etc路径下hosts文件添加ip地址加主机名

2.新建maven-quickstart工程

3.添加依赖,可以选择更高版本

<!-- https://mvnrepository.com/artifact/org.apache.hbase/hbase-client -->
<dependency>
    <groupId>org.apache.hbase</groupId>
    <artifactId>hbase-client</artifactId>
    <version>1.2.0</version>
</dependency>

4.连接数据库

hbase-site.xml文件


<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>

<configuration>

    <property>
        <name>hbase.zookeeper.quorum</name>
        <value>192.168.64.188</value>
        <description>The direction shared by RegionServers</description>
    </property>

</configuration>

java多线程使用连接:

//多线程使用连接,推荐使用!
import org.apache.hadoop.hbase.TableName;
import org.apache.hadoop.hbase.client.*;

import java.io.IOException;

public class HbaseMultiConnection {
    //Connection是重量级的连接,是线程安全的,一个客户端应该只创建一个连接,类似单例模式
    //因此推荐使用多线程连接

    //声明一个静态属性
    public static Connection connection = null;

    static {
        //创建连接配置,实际开发中一般新建hbase-site.xml作为配置文件,
        // 内容复制hbase下conf的hbase-site.xml的property:hbase.zookeeper.quorum内容

//        Configuration conf = new Configuration();
//        //添加配置参数
//        conf.set("hbase.zookeeper.quorum", "192.168.64.188");

        //创建连接,空参为使用读取本地文件的形式添加参数,默认使用同步连接
        try {
            connection = ConnectionFactory.createConnection();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public static void close() throws IOException {
        //判断连接是否为null
        if (connection != null) {
            connection.close();
        }
    }

    public static void main(String[] args) throws IOException {
        //直接使用创建好的连接
        //找到对应的表
        Table table = connection.getTable(TableName.valueOf("mydemo:userinfos"));
        //1.查询所有的数据
        Scan scan = new Scan();
        ResultScanner results = table.getScanner(scan);
        //循环获取数据
        for (Result rs : results) {
            System.out.println(new String(rs.getValue("base".getBytes(), "username".getBytes())));
        }
        HbaseMultiConnection.close();
    }
}

连接的使用测试:

import org.apache.hadoop.hbase.NamespaceDescriptor;
import org.apache.hadoop.hbase.TableName;
import org.apache.hadoop.hbase.client.Admin;
import org.apache.hadoop.hbase.client.Connection;

import java.io.IOException;

public class HBaseDDL {

    //声明一个静态属性,在任何一个类里调用连接,都会引用同一个连接
    public static Connection connection = HbaseMultiConnection.connection;

    /*
    创建命名空间
    @param namespace  命名空间名称
     */
    public static void createNameSpace(String namespace) throws IOException {
        //获取admin
        Admin admin = connection.getAdmin();

        //2.调用方法,创建命名空间

        //2.1创建命名空间描述的builder
        NamespaceDescriptor.Builder builder = NamespaceDescriptor.create(namespace);

        //2.2给命名空间添加需求
        builder.addConfiguration("user","atguigu");

        //2.3使用builder构造出对应的添加完参数的对象,完成创建
        //此处的异常属于本方法的异常,应手动处理而非抛出
        try {
            admin.createNamespace(builder.build());
        } catch (IOException e) {
            System.out.println("命名空间已存在");
            e.printStackTrace();
        }

        //3.关闭admin
        admin.close();
    }

    /*
    判断表格是否存在
    @param namespace 命名空间名
    @param tableName 表名
    @return true表示存在
     */
    public static boolean isTableExists(String namespace,String tableName) throws IOException {
        //1.获取admin
        Admin admin = connection.getAdmin();

        //使用admin的tableExists方法判断表格是否存在;命名空间或表名不存在,就为false
        boolean b = false;
        try {
            b = admin.tableExists(TableName.valueOf(namespace, tableName));
        } catch (IOException e) {
            e.printStackTrace();
        }

        //3.关闭连接
        admin.close();
        return b;
    }

   
    public static void main(String[] args) throws IOException {
        //测试创建命名空间
        createNameSpace("atguigu");

        //测试表格是否存在
        System.out.println(isTableExists("mydemo", "userinfos"));
        //
        System.out.println("******");
        //关闭connection
        HbaseMultiConnection.close();

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值