【HBase】——整合Phoenix

1 概述

Phoenix 是 HBase 的开源 SQL 皮肤。可以使用标准 JDBC API 代替 HBase 客户端 API 来创建表,插入数据和查询 HBase 数据。

Phoenix 在 5.0 版本默认提供有两种客户端使用(瘦客户端和胖客户端),在 5.1.2 版本 安装包中删除了瘦客户端,本文也不再使用瘦客户端。而胖客户端和用户自己写 HBase 的 API 代码读取数据之后进行数据处理是完全一样的。

2 安装部署

2.1 官网下载

http://phoenix.apache.org/

2.2 解压

powershell 复制代码
tar -zxvf phoenix-hbase-2.4-5.1.2- bin.tar.gz -C /opt/module/ 
mv phoenix-hbase-2.4-5.1.2-bin/ phoenix 

2.3 复制 server 包并拷贝到各个节点的 hbase/lib

powershell 复制代码
 cd /opt/module/phoenix/
 cp phoenix-server-hbase-2.4-5.1.2.jar /opt/module/hbase/lib/
 sh /root/bin/xsync /opt/module/hbase/lib/ phoenixserver-hbase-2.4-5.1.2.jar 

2.4 配置环境变量

powershell 复制代码
#PHOENIX
export PHOENIX_HOME=/opt/module/phoenix
export PHOENIX_CLASSPATH=$PHOENIX_HOME
export PATH=$PATH:$PHOENIX_HOME/bin
powershell 复制代码
source /etc/profile

2.5 重启 HBase

powershell 复制代码
stop-hbase.sh
start-hbase.sh

2.6 连接phoenix

powershell 复制代码
/opt/module/phoenix/bin/sqlline.py hadoop102,hadoop103,hadoop104:2181 

3 Phoenix Shell

  1. 关于 Phoenix 的语法建议使用时直接查看官网: https://phoenix.apache.org/language/index.html
  2. Phoenix 中建表,会在 HBase 中创建一张对应的表。为了减少数据对磁盘空间的占 用,Phoenix 默认会对 HBase 中的列名做编码处理。具体规则可参考官网链接: https://phoenix.apache.org/columnencoding.html,若不想对列名编码,可在建表语句末尾加 上 COLUMN_ENCODED_BYTES = 0;
  3. 在 phoenix 中,表名等会自动转换为大写,若要小写,使用双引号,如"us_population"。

3.1 显示所有表

sql 复制代码
!table 

3.2 创建表

3.2.1 直接指定单个列作为 RowKey

sql 复制代码
CREATE TABLE IF NOT EXISTS student(
id VARCHAR primary key,
name VARCHAR,
age BIGINT,
addr VARCHAR);

3.2.2 指定多个列的联合作为 RowKey

sql 复制代码
CREATE TABLE IF NOT EXISTS student1 (
id VARCHAR NOT NULL,
name VARCHAR NOT NULL,
age BIGINT,
addr VARCHAR
CONSTRAINT my_pk PRIMARY KEY (id, name));

3.3 插入数据

sql 复制代码
upsert into student values('1001','zhangsan', 10, 'beijing');

3.4 查询记录

sql 复制代码
select * from student; 
select * from student where id='1001';

3.5 删除记录

sql 复制代码
delete from student where id='1001';

3.6 删除表

sql 复制代码
drop table student;

3.7 退出命令行

sql 复制代码
!quit

4 表映射

默认情况下, HBase 中已存在的表,通过 Phoenix 是不可见的。如果要在 Phoenix 中操 作 HBase 中已存在的表,可以在 Phoenix 中进行表的映射。映射方式有两种:视图映射和表 映射。

sql 复制代码
 create 'test','info1','info2'

4.1 视图映射

Phoenix 创建的视图是只读的,所以只能用来做查询,无法通过视图对数据进行修改等 操作。在 phoenix 中创建关联 test 表的视图

sql 复制代码
create view "test"(
    id varchar primary key,
    "info1"."name" varchar,
    "info2"."address" varchar
);

4.2 表映射

在 Pheonix 创建表去映射 HBase 中已经存在的表,是可以修改删除 HBase 中已经存在 的数据的。而且,删除 Phoenix 中的表,那么 HBase 中被映射的表也会被删除。

注:进行表映射时,不能使用列名编码,需将 column_encoded_bytes 设为 0。

sql 复制代码
create table "test"(
    id varchar primary key,
    "info1"."name" varchar,
    "info2"."address" varchar
) column_encoded_bytes=0;

5 Phoenix JDBC 操作

5.1 依赖

xml 复制代码
<dependencies>
    <dependency>
        <groupId>org.apache.phoenix</groupId>
        <artifactId>phoenix-client-hbase-2.4</artifactId>
        <version>5.1.2</version>
    </dependency>
</dependencies>

5.2 代码

java 复制代码
import java.sql.*;
import java.util.Properties;

public class PhoenixClient {
    public static void main(String[] args) throws SQLException {
        // 标准的 JDBC 代码
        // 1.添加链接
        String url = "jdbc:phoenix:hadoop102,hadoop103,hadoop104:2181";
        // 2. 创建配置
        // 没有需要添加的必要配置 因为 Phoenix 没有账号密码
        Properties properties = new Properties();
        // 3. 获取连接
        Connection connection = DriverManager.getConnection(url,
                properties);
        // 5.编译 SQL 语句
        PreparedStatement preparedStatement = connection.prepareStatement("select * from student");
        // 6.执行语句
        ResultSet resultSet = preparedStatement.executeQuery();
        // 7.输出结果
        while (resultSet.next()) {
            System.out.println(resultSet.getString(1) + ":" +
                    resultSet.getString(2) + ":" + resultSet.getString(3));
        }
        // 8.关闭资源
        connection.close();
        // 由于 Phoenix 框架内部需要获取一个 HBase 连接,所以会延迟关闭
        // 不影响后续的代码执行
        System.out.println("hello");
    }
}
相关推荐
安当加密23 分钟前
MySQL数据库透明加密(TDE)解决方案:基于国密SM4的合规与性能优化实践
数据库·mysql·性能优化
异次元的星星33 分钟前
智慧新零售时代:施易德系统平衡技术与人力,赋能门店运营
大数据·零售
JH30731 小时前
第七篇:Buffer Pool 与 InnoDB 其他组件的协作
java·数据库·mysql·oracle
板凳坐着晒太阳1 小时前
ClickHouse 配置优化与问题解决
数据库·clickhouse
数据库生产实战1 小时前
解析Oracle 19C中并行INSERT SELECT的工作原理
数据库·oracle
深思慎考2 小时前
ElasticSearch与Kibana 入门指南(7.x版本)
大数据·elasticsearch·jenkins
AAA修煤气灶刘哥2 小时前
服务器指标多到“洪水泛滥”?试试InfluxDB?
数据库·后端·面试
银行数字化转型导师坚鹏2 小时前
如何设计优秀的企业微信私域运营实战培训方案
大数据·python·企业微信
阿沁QWQ2 小时前
MySQL服务器配置与管理
服务器·数据库·mysql
悠闲蜗牛�3 小时前
人工智能时代下的全栈开发:整合AI、大数据与云原生的实践策略
大数据·人工智能·云原生