Spring Boot 2.4.3 集成 HBase 2.3.4 + Phoenix 5.1

版权声明:本文为作者原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/gjycn/p/14443470.html

软件依赖版本:

  1. springboot 2.4.3
  2. HBase 2.3.4
  3. Phoenix 5.1

准备工作

  1. idea构建springboot项目

  2. 导入pom依赖,注意以下两个依赖的顺序不能调换,由于Phoenix版本较新,须在Hbase-client后面

    <dependency>
        <groupId>org.apache.hbase</groupId>
        <artifactId>hbase-client</artifactId>
        <version>2.3.4</version>
        <exclusions>
            <exclusion>
                <groupId>org.slf4j</groupId>
                <artifactId>slf4j-log4j12</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
    <dependency>
        <groupId>org.apache.phoenix</groupId>
        <artifactId>phoenix-core</artifactId>
        <version>5.1.0</version>
        <exclusions>
            <exclusion>
                <groupId>org.slf4j</groupId>
                <artifactId>slf4j-log4j12</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
    
  3. 复制 Hadoop 安装时的 core-site.xml 和 HBase 安装时的 hbase-site.xml 两个配置文件,放入 resources 目录下

导入Maven中央仓库没有的兼容层源代码

由于Phoenix版本较新,部分jar包在maven中央仓库不存在,故须直接引入源码。
该包为:phoenix-hbase-compat-2.3.0

下载 Phoenix5.1源码包 ,解压缩,复制 phoenix-5.1.0-src\phoenix-5.1.0\phoenix-hbase-compat-2.3.0\src\main\java\org\ 包下全部内容,放在springboot项目的 java 包下,使包路径与解压的包路径一致,为 org\apache\phoenix\compat\hbase

测试

  1. 在Sqlline.py运行以下 Phoenix F.A.Q. 示例代码,创建测试表。

    create table test (mykey integer not null primary key, mycolumn varchar);
    upsert into test values (1,'Hello');
    upsert into test values (2,'World!');
    select * from test;
    
  2. 在 Spring boot 测试类添加以下函数进行测试(JDBC连接地址需替换为自己的 zookeeper 地址,主机名(或IP):端口号)

    @Test
    void fun() throws SQLException {
        java.sql.Connection connection = null;
        try {
            Class.forName(PhoenixDriver.class.getName());
            connection = DriverManager.getConnection("jdbc:phoenix:[zookeeper]");
    
            String sql = "select * from TEST";
    
            PreparedStatement preparedStatement = connection.prepareStatement(sql);
            ResultSet resultSet = preparedStatement.executeQuery();
    
            System.out.println("结果为");
            while (resultSet.next()) {
                System.out.println(resultSet.getString("mycolumn"));
            }
        } catch (ClassNotFoundException e) {
            throw new RuntimeException("加载Phoenix驱动失败!");
        } catch (SQLException e) {
            e.printStackTrace();
            throw new RuntimeException("获取Phoenix JDBC连接失败!");
        } finally {
            if (connection != null) {
                connection.close();
            }
        }
    }
    
  3. 测试结果为控制台输出以下内容

    结果为
    Hello
    World!
    
posted @ 2021-02-24 19:52  有你何须仰望  阅读(659)  评论(0编辑  收藏  举报