【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");
    }
}
相关推荐
QD.Joker16 分钟前
Django ORM 单表操作
数据库·django
chat2tomorrow32 分钟前
如何构建类似云数据仓库 Snowflake 的本地数据仓库?
大数据·数据仓库·低代码·数据治理·snowflake·sql2api
Linux运维老纪33 分钟前
Linux之 grep、find、ls、wc 命令
linux·运维·服务器·数据库·云计算·运维开发
焱焱枫1 小时前
Oracle 19c部署之数据库软件安装(二)
数据库·oracle
一代...1 小时前
【Redis】Redis基本命令(1)
数据库·redis·缓存
孟意昶1 小时前
大数据面试问答-HBase/ClickHouse
大数据·面试·hbase
八股文领域大手子1 小时前
深入浅出 Redis:核心数据结构解析与应用场景Redis 数据结构
java·数据结构·数据库·人工智能·spring boot·redis·后端
atbigapp.com1 小时前
DeepSeek在数据仓库的10大应用场景
大数据·数据库·人工智能
一只专注api接口开发的技术猿2 小时前
基于 Java 的淘宝 API 调用实践:商品详情页 JSON 数据结构解析与重构
大数据·数据结构·重构·json
结衣结衣.2 小时前
【MySQL】库的操作
linux·数据库·mysql