springboot-phoenix5.0-hbase2.0

1,下载 hbase 对应的 phoenix 安装包(有严格的版本限制)

2,解压 apache-phoenix-5.0.0-HBase-2.0-bin.tar.gz

3,将 apache-phoenix-5.0.0-HBase-2.0-bin 中的 phoenix-5.0.0-HBase-2.0-server.jar 拷贝到 hbase-2.0.1/lib

4,修改 hbase-site.xml

<configuration>
        <property>
                <name>hbase.rootdir</name>
                <value>hdfs://bigdata:9000/hbase</value>
        </property>
        <property>
                <name>hbase.zookeeper.quorum</name>
                <value>bigdata</value>
        </property>
        <property>
                <name>hbase.master.info.port</name>
                <value>16010</value>
        </property>
        <property>
	            <name>hbase.table.sanity.checks</name>
	            <value>false</value>
        </property>
        <!-- phoenix开启映射表 -->
        <property>
              <name>phoenix.schema.isNamespaceMappingEnabled</name>
              <value>true</value>
        </property>
        <property>
              <name>phoenix.schema.mapSystemTablesToNamespace</name>
              <value>true</value>
        </property>
        <!-- zookeeper超时时间 -->
        <property>
	          <name>zookeeper.session.timeout</name>
	          <value>240000</value>
        </property>
        <!-- 支持创建二级索引 -->
        <property>
              <name>hbase.regionserver.wal.codec</name>
              <value>org.apache.hadoop.hbase.regionserver.wal.IndexedWALEditCodec</value>
        </property>
        <!-- phoenix查询时间设置 -->
        <property>
              <name>phoenix.query.timeoutMs</name>
              <value>240000</value> 
        </property>
        <property>
              <name>hbase.rpc.timeout</name>
              <value>240000</value>
        </property>
</configuration>

5,将 core-site.xml 、hbase-site.xml、hdfs-site.xml  拷贝覆盖到 apache-phoenix-5.0.0-HBase-2.0-bin/bin

6,验证,在 apache-phoenix-5.0.0-HBase-2.0-bin/bin 下执行:./sqlline.py bigdata:2181

7,DBeaver 连接 phoenix

  • 将 hbase-site.xml 通过压缩工具放到 phoenix-5.0.0-HBase-2.0-client.jar 中 ,DBeaver客户端连接用这个驱动包

8,springboot-phoenix5.0-hbase2.0

8.1,错误的引入方式(坑了我1整天。。。)

xml 和 jar

  • core-site.xml hbase-site.xmlhdfs-site.xml (放到resource目录下)
  • phoenix-5.0.0-HBase-2.0-client.jar(驱动包)
public class TestPhoenixJDBC {
    private static String driver = "org.apache.phoenix.jdbc.PhoenixDriver";

    public static void main(String[] args) throws SQLException {
        try {
            Class.forName(driver);
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
        Statement stmt = null;
        ResultSet rs = null;

        Connection con = DriverManager.getConnection("jdbc:phoenix:bigdata:2181");
        stmt = con.createStatement();
        String sql = "select * from test_sql";
        rs = stmt.executeQuery(sql);
        while (rs.next()) {
            System.out.print("id:"+rs.getString("id"));
            System.out.println(",name:"+rs.getString("name"));
        }
        stmt.close();
        con.close();
    }
}

这种在main方法里可执行查询,但用client包放到springboot项目中会报 phoenix 驱动包不存在、jar冲突等异常,简而言之就是boot起不来呀。。

8.2,正确的引入方式:

核心:phoenix 作为一个数据源去连接hbase

pom.xml

<dependency>
    <groupId>org.apache.phoenix</groupId>
    <artifactId>phoenix-core</artifactId>
    <version>5.0.0-HBase-2.0</version>
</dependency>

application.yml

spring:
  datasource:
    driver-class-name: org.apache.phoenix.jdbc.PhoenixDriver
    url: jdbc:phoenix:bigdata:2181
 

core-site.xml、hbase-site.xml、hdfs-site.xml 放在 resource 根目录下

将以上配置放入一个springboot项目里即可正常查询

特别感谢!提供的思路:https://blog.youkuaiyun.com/Wing_kin666/article/details/109855358

9,phoenix 操作 hbase 遇到的问题

  • 9.0,phoenix 与 hbase 表映射
  • 9.1,hbase 的 rowkey 设计:需要考虑热点问题,hbase主要靠rowkey查询
  • 9.2,hbae 的 二级索引:通过 phoenix 创建的二级索引,不通过 phoenix 直接插入数据到 hbase时,索引不会同步,开启二级索引后,如果录入口径不是 phoenix,hbase的那部分只能写代码更新索引
  • 9.3,hbae 的 二级索引 开启之后的各种异常处理:清空数据最为快捷

清空方式

# cd /xxx/hbase-2.0.1/bin

删除自带zk里边的hbase记录

# ./hbase zkcli rmr /hbase

删除hadoop里边的hbase记录

# hadoop fs -rm -f -r /hbase/

然后重启 hbase

10,参考链接

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值