Java多线程连接HBase

Java连接HBase:

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

2.新建maven-quickstart工程

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


<dependency>
    <groupId>org.apache.hbasegroupId>
    <artifactId>hbase-clientartifactId>
    <version>1.2.0version>
dependency>

4.连接数据库

hbase-site.xml文件





<configuration>

    <property>
        <name>hbase.zookeeper.quorumname>
        <value>192.168.64.188value>
        <description>The direction shared by RegionServersdescription>
    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();

    }
}

你可能感兴趣的:(hbase,java,大数据)