大数据存储工具:HBase整合_Phoenix
作者头像
  • 2020-08-11 22:16:26 5

6.1 Phoenix概述

6.1.1 Phoenix的定义

Phoenix 是一个开源的 SQL 层,用于 HBase 数据库。它允许用户通过标准的 JDBC API 来创建表、插入数据和查询 HBase 数据,而无需直接使用 HBase 的客户端 API。

6.1.2 Phoenix的特点

  1. 易于集成:Phoenix 能够与多种工具无缝集成,包括 Spark、Hive、Pig、Flume 和 MapReduce;
  2. 操作简便:用户可以通过 DML 命令和 DDL 命令轻松创建和管理表及版本化的增量更改;
  3. 支持二级索引:Phoenix 支持 HBase 二级索引的创建,从而优化查询性能。

6.1.3 Phoenix的架构

(此处省略图片)

6.2 快速入门Phoenix

6.2.1 安装指南

  1. 官方网站

    • 访问网址:http://phoenix.apache.org/
  2. 部署步骤

    1. 解压 tar 包 bash tar -zxvf apache-phoenix-5.0.0-HBase-2.0-bin.tar.gz -C /opt/module/ mv apache-phoenix-5.0.0-HBase-2.0-bin phoenix
    2. 将 server 包复制到各个节点的 hbase/lib 目录 bash cd /opt/module/phoenix/ cp /opt/module/phoenix/phoenix-5.0.0-HBase-2.0-server.jar /opt/module/hbase/lib/ xsync /opt/module/hbase/lib/phoenix-5.0.0-HBase-2.0-server.jar
    3. 设置环境变量 bash export PHOENIX_HOME=/opt/module/phoenix export PHOENIX_CLASSPATH=$PHOENIX_HOME export PATH=$PATH:$PHOENIX_HOME/bin
    4. 重启 HBase bash stop-hbase.sh start-hbase.sh
    5. 连接 Phoenix bash bin/sqlline.py hadoop102,hadoop103,hadoop104:2181

6.2.2 使用Phoenix Shell操作

表的操作
  1. 显示所有表 sql !table 或 !tables
  2. 创建表
    • 单一列作为主键 sql CREATE TABLE IF NOT EXISTS student(id VARCHAR PRIMARY KEY, name VARCHAR, addr VARCHAR);
    • 多个列组合为主键 sql CREATE TABLE IF NOT EXISTS us_population(State CHAR(2) NOT NULL, City VARCHAR NOT NULL, Population BIGINT CONSTRAINT my_pk PRIMARY KEY (state, city));
  3. 插入数据 sql UPSERT INTO student VALUES('1001', 'zhangsan', 'beijing');
  4. 查询数据 sql SELECT * FROM student; SELECT * FROM student WHERE id='1001';
  5. 删除数据 sql DELETE FROM student WHERE id='1001';
  6. 删除表 sql DROP TABLE student;
  7. 退出命令行 sql !quit
表的映射

默认情况下,在 HBase 中创建的表无法通过 Phoenix 查看。若需在 Phoenix 中操作这些表,则需要进行映射。映射分为两种类型:视图映射和表映射。

  1. 创建表 test bash create 'test', 'info1', 'info2'
  2. 视图映射 sql CREATE VIEW "test" (id VARCHAR PRIMARY KEY, "info1"."name" VARCHAR, "info2"."address" VARCHAR); 删除视图: sql DROP VIEW "test";
  3. 表映射
    • 创建表时自动映射 sql CREATE TABLE "test" (id VARCHAR PRIMARY KEY, "info1"."name" VARCHAR, "info2"."address" VARCHAR) COLUMN_ENCODED_BYTES=0;

6.2.3 使用JDBC操作Phoenix

  1. 启动Query Server bash queryserver.py start
  2. 创建项目并导入依赖 xml <dependencies> <dependency> <groupId>org.apache.phoenix</groupId> <artifactId>phoenix-queryserver-client</artifactId> <version>5.0.0-HBase-2.0</version> </dependency> </dependencies>
  3. 编写代码 ```java package com.bigdata; import java.sql.*; import org.apache.phoenix.queryserver.client.ThinClientUtil;

    public class PhoenixTest { public static void main(String[] args) throws SQLException { String connectionUrl = ThinClientUtil.getConnectionUrl("hadoop102", 8765); System.out.println(connectionUrl); Connection connection = DriverManager.getConnection(connectionUrl); PreparedStatement preparedStatement = connection.prepareStatement("SELECT * FROM student"); ResultSet resultSet = preparedStatement.executeQuery(); while (resultSet.next()) { System.out.println(resultSet.getString(1) + "t" + resultSet.getString(2)); } connection.close(); } } ```

6.3 Phoenix的二级索引

6.3.1 配置二级索引

  1. 添加配置到HBase的HRegionserver节点的hbase-site.xml xml <property> <name>hbase.regionserver.wal.codec</name> <value>org.apache.hadoop.hbase.regionserver.wal.IndexedWALEditCodec</value> </property> <property> <name>hbase.region.server.rpc.scheduler.factory.class</name> <value>org.apache.hadoop.hbase.ipc.PhoenixRpcSchedulerFactory</value> </property> <property> <name>hbase.rpc.controllerfactory.class</name> <value>org.apache.hadoop.hbase.ipc.controller.ServerRpcControllerFactory</value> </property>

6.3.2 全局二级索引

全局索引是一种默认的索引格式,适用于多读少写的应用场景。创建全局索引时,会在 HBase 中创建一张新表,索引数据和原始数据分别存储在不同的表中。

  1. 创建单个字段的全局索引 sql CREATE INDEX my_index ON my_table (my_col);
  2. 创建包含其他字段的全局索引 sql CREATE INDEX my_index ON my_table (v1) INCLUDE (v2);

6.3.3 本地二级索引

本地索引适用于写操作频繁的场景。索引数据和原始数据存储在同一张表中,避免了写操作时跨服务器传输数据带来的额外开销。

sql CREATE LOCAL INDEX my_index ON my_table (my_column);

    本文来源:图灵汇
责任编辑: :
声明:本文系图灵汇原创稿件,版权属图灵汇所有,未经授权不得转载,已经协议授权的媒体下载使用时须注明"稿件来源:图灵汇",违者将依法追究责任。
    分享
整合存储Phoenix工具数据HBase
    下一篇