做网站可以使用rem单位吗,wordpress改变上传目录权限,门户网站建站目标,不是搜索网站的是文章目录 一、简介1、Phoenix定义2、Phoenix架构 二、安装Phoenix1、安装 三、Phoenix操作1、Phoenix 数据映射2、Phoenix Shell操作3、Phoenix JDBC操作3.1 胖客户端3.2 瘦客户端 四、Phoenix二级索引1、为什么需要二级索引2、全局索引#xff08;global index#xff09;3、… 文章目录 一、简介1、Phoenix定义2、Phoenix架构 二、安装Phoenix1、安装 三、Phoenix操作1、Phoenix 数据映射2、Phoenix Shell操作3、Phoenix JDBC操作3.1 胖客户端3.2 瘦客户端 四、Phoenix二级索引1、为什么需要二级索引2、全局索引global index3、包含索引covered index)4、本地索引local index 一、简介
1、Phoenix定义
1官网地址http://phoenix.apache.org/
Phoenix是HBase的开源SQL皮肤。可以使用标准JDBC API代替HBase客户端API来创建表插入数据和查询HBase数据。
优点使用简单直接能写sql。
缺点效率没有自己设计rowKey再使用API高性能较差。
2、Phoenix架构 二、安装Phoenix
1、安装
将安装包上传到服务器目录
解压安装包
tar -zxvf apache-phoenix-5.0.0-HBase-2.0-bin.tar.gz -C /opt/module/
mv /opt/module/apache-phoenix-5.0.0-HBase-2.0-bin /opt/module/phoenix复制server包并拷贝到各个节点Hadoop101、Hadoop102、Hadoop103的hbase/lib
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配置环境变量
vim /etc/profile.d/my_env.sh 添加内容
#phoenix
export PHOENIX_HOME/opt/module/phoenix
export PHOENIX_CLASSPATH$PHOENIX_HOME
export PATH$PATH:$PHOENIX_HOME/bin在hbase-site.xml中添加支持二级索引的参数(如果不需要创建二级索引不用不加)。之后分发到所有regionserver的节点上。
vim /opt/module/hbase/conf/hbase-site.xml
xsync /opt/module/hbase/conf/hbase-site.xml 配置内容
propertynamehbase.regionserver.wal.codec/namevalueorg.apache.hadoop.hbase.regionserver.wal.IndexedWALEditCodec/value
/propertypropertynamehbase.region.server.rpc.scheduler.factory.class/namevalueorg.apache.hadoop.hbase.ipc.PhoenixRpcSchedulerFactory/value
descriptionFactory to create the Phoenix RPC Scheduler that uses separate queues for index and metadata updates/description
/propertypropertynamehbase.rpc.controllerfactory.class/namevalueorg.apache.hadoop.hbase.ipc.controller.ServerRpcControllerFactory/valuedescriptionFactory to create the Phoenix RPC Scheduler that uses separate queues for index and metadata updates/description
/property重启HBase
stop-hbase.sh
start-hbase.sh连接 phoenix
/opt/module/phoenix/bin/sqlline.py hadoop101,hadoop102,hadoop103:2181三、Phoenix操作
1、Phoenix 数据映射
Phoenix 将 HBase 的数据模型映射到关系型模型中。 Phoenix中的主键会作为rowkey非主键列作为普通字段。默认使用0作为列族也可以在建表时使用 列族.列名 作为字段名显式指定列族。
如果主键是联合主键则会将主键字段拼接作为rowkey。
2、Phoenix Shell操作
登录Phoenix
/opt/module/phoenix/bin/sqlline.py hadoop101,hadoop102,hadoop103:2181创建表
CREATE TABLE IF NOT EXISTS student(
id VARCHAR primary key,
name VARCHAR,
addr VARCHAR);在phoenix中表名等会自动转换为大写若要小写使用双引号如us_population。
CREATE TABLE IF NOT EXISTS un_student(
id VARCHAR primary key,
name VARCHAR,
addr VARCHAR);# 指定多个列的联合作为RowKey
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));注意Phoenix中建表会在HBase中创建一张对应的表。为了减少数据对磁盘空间的占用Phoenix默认会对HBase中的列名做编码处理。具体规则可参考官网链接https://phoenix.apache.org/columnencoding.html若不想对列名编码可在建表语句末尾加上COLUMN_ENCODED_BYTES 0;
CREATE TABLE IF NOT EXISTS student(
id VARCHAR primary key,
name VARCHAR,
addr VARCHAR)
COLUMN_ENCODED_BYTES 0
;插入或更新数据
upsert执行时判断如果主键存在就更新不存在则执行插入。插入或更新数据
upsert执行时判断如果主键存在就更新不存在则执行插入。
upsert into student values(1001,zhangsan,beijing);查询记录
select * from student;
select * from student where id1001;删除记录
delete from student where id1001;删除表
drop table student;退出命令行
!quit3、Phoenix JDBC操作
3.1 胖客户端
胖客户端指将Phoenix的所有功能都集成在客户端导致客户端代码打包后体积过大。
pom依赖
!-- 胖客户端--
dependencygroupIdorg.apache.phoenix/groupIdartifactIdphoenix-core/artifactIdversion5.0.0-HBase-2.0/versionexclusionsexclusiongroupIdorg.glassfish/groupIdartifactIdjavax.el/artifactId/exclusion/exclusions
/dependency
dependencygroupIdorg.apache.hadoop/groupIdartifactIdhadoop-common/artifactIdversion2.7.2/version
/dependency测试代码
import java.sql.*;public class TestThickClient {public static void main(String[] args) throws SQLException {// 1.添加链接String url jdbc:phoenix:hadoop101,hadoop102,hadoop103:2181;// 2.获取连接Connection connection DriverManager.getConnection(url);// 3.编译SQL语句PreparedStatement preparedStatement connection.prepareStatement(select * from student);// 4.执行语句ResultSet resultSet preparedStatement.executeQuery();System.out.println();// 5.输出结果while (resultSet.next()) {System.out.println(resultSet.getString(1) : resultSet.getString(2) : resultSet.getString(3));}// 6.关闭资源connection.close();}
}3.2 瘦客户端
瘦客户端指将Phoenix的功能进行拆解主要功能由服务端提供只使用轻量级的客户端向服务端发送请求。
服务上启动hadoop101
queryserver.py startpom文件
!-- 瘦客户端--
dependencygroupIdorg.apache.phoenix/groupIdartifactIdphoenix-queryserver-client/artifactIdversion5.0.0-HBase-2.0/version
/dependency
dependencygroupIdcom.google.protobuf/groupIdartifactIdprotobuf-java/artifactIdversion3.21.4/version
/dependency测试代码
import org.apache.phoenix.queryserver.client.ThinClientUtil;
import java.sql.*;public class TestThinClient {public static void main(String[] args) throws SQLException {// 1. 直接从瘦客户端获取链接String hadoop102 ThinClientUtil.getConnectionUrl(hadoop101, 8765);System.out.println(hadoop102);// 2. 获取连接Connection connection DriverManager.getConnection(hadoop102);// 3.编译SQL语句PreparedStatement preparedStatement connection.prepareStatement(select * from student);// 4.执行语句ResultSet resultSet preparedStatement.executeQuery();// 5.输出结果while (resultSet.next()) {System.out.println(resultSet.getString(1) : resultSet.getString(2) : resultSet.getString(3));}// 6.关闭资源connection.close();}
}四、Phoenix二级索引
1、为什么需要二级索引
在HBase中查询时必须指定rowkey。但是在Phoenix中可以通过sql语句进行查询在编写sql语句时有事我们可能在不使用主键的情况下进行过滤查询。此时好比是不使用rowkey直接查询某一列。这样必须对某个表进行全表扫描才能查询到指定的数据效率低。二级索引是针对列的索引通过建立二级索引可以在不使用主键进行查询的场景中提升查询效率。 2、全局索引global index
Global Index是默认的索引格式创建全局索引时会在HBase中建立一张新表。也就是说索引数据和数据表是存放在不同的表中的因此全局索引适用于多读少写的业务场景。写数据的时候会消耗大量开销因为索引表也要更新而索引表是分布在不同的数据节点上的跨节点的数据传输带来了较大的性能消耗。在读数据的时候Phoenix会选择索引表来降低查询消耗的时间。
创建单个字段的全局索引
CREATE INDEX my_index ON my_table (my_col);如果想查询的字段不是索引字段的话索引表不会被使用也就是说不会带来查询速度的提升。 3、包含索引covered index)
包含索引会将指定的列作为rowkey包含的列作为普通列建立索引。
创建携带其他字段的全局索引
CREATE INDEX my_index ON my_table (v1) INCLUDE (v2);4、本地索引local index
Local Index适用于写操作频繁的场景。在数据表中新建一个列族来存储索引数据。避免了在写操作的时候往不同服务器的索引表中写索引带来的额外开销。
CREATE LOCAL INDEX my_index ON my_table (my_column);