Phoenix基本使用

1、Phoenix简介

1.1 Phoenix定义

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

1.2 Phoenix特点

  1. 容易集成:如Spark,Hive,Pig,Flume和Map Reduce。
  2. 性能好:直接使用HBase API以及协处理器和自定义过滤器,可以为小型查询提供毫秒级的性能,或者为数千万行提供数秒的性能。
  3. 操作简单:DML命令以及通过DDL命令创建表和版本化增量更改。
  4. 安全功能: 支持GRANT和REVOKE 。
  5. 完美支持Hbase二级索引创建。

1.3 Phoenix架构

在这里插入图片描述

1.4 Phoenix的作用

在这里插入图片描述

2、Phoenix快速入门

2.1 Phoenix安装部署

2.1.1官方网址: http://phoenix.apache.org/index.html

2.1.2 上传jar包到/opt/software/

解压到/opt/module 改名为phoenix

[ybb@hadoop101 module]$ tar -zxvf /opt/software/apache-phoenix-4.14.1-HBase-1.3-bin.tar.gz -C /opt/module [ybb@hadoop101 module]$ mv apache-phoenix-4.14.1-HBase-1.3-bin phoenix

2.1.3 复制server和client这俩个包拷贝到各个节点的hbase/lib

在phoenix目录下

[ybb@hadoop101 module]$ cd /opt/module/phoenix/

向每个节点发送server jar

[ybb@hadoop101 phoenix]$ cp phoenix-4.14.1-HBase-1.3-server.jar /opt/module/hbase-1.3.1/lib/
[ybb@hadoop101 phoenix]$ scp phoenix-4.14.1-HBase-1.3-server.jar hadoop102:/opt/module/hbase-1.3.1/lib/
[ybb@hadoop101 phoenix]$ scp phoenix-4.14.1-HBase-1.3-server.jar hadoop103:/opt/module/hbase-1.3.1/lib/

向每个节点发送client jar

[ybb@hadoop101 phoenix]$ cp phoenix-4.14.1-HBase-1.3-client.jar /opt/module/hbase-1.3.1/lib/
[ybb@hadoop101 phoenix]$ scp phoenix-4.14.1-HBase-1.3-client.jar hadoop102:/opt/module/hbase-1.3.1/lib/
[ybb@hadoop101 phoenix]$ scp phoenix-4.14.1-HBase-1.3-client.jar hadoop103:/opt/module/hbase-1.3.1/lib/

2.1.4在root权限下给/etc/profile 下添加如下内容

#phoenixexport PHOENIX_HOME=/opt/module/phoenixexport PHOENIX_CLASSPATH=$PHOENIX_HOMEexport PATH=$PATH:$PHOENIX_HOME/bin

2.1.5启动Zookeeper,Hadoop,Hbase

2.1.6启动Phoenix

[ybb@hadoop101 phoenix]$ /opt/module/phoenix/bin/sqlline.py hadoop101,hadoop102,hadoop103:2181

2.2 phoenix表操作

2.2.1 显示所有表

!table 或 !tables

2.2.2 创建表

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中,默认情况下,表名等会自动转换为大写,若要小写,使用双引号,如"us_population"。

2.2.3 插入记录

upsert into us_population values(‘NY’,‘NewYork’,8143197);

2.2.4 查询记录

select * from us_population ;

select * from us_population wherestate=‘NY’;

2.2.5 删除记录

delete from us_population wherestate=‘NY’;

2.2.6 删除表

drop table us_population;

2.2.7 退出命令行

!quit

2.3 phoenix表映射

2.3.1 Phoenix和Hbase表的关系

默认情况下,直接在hbase中创建的表,通过phoenix是查看不到的。如图1和图2,US_POPULATION是在phoenix中直接创建的,而kylin相关表是在hbase中直接创建的,在phoenix中是查看不到kylin等表的。
在这里插入图片描述
hbase命令行中查看所有表:
在这里插入图片描述
如果要在phoenix中操作直接在hbase中创建的表,则需要在phoenix中进行表的映射。映射方式有两种:视图映射和表映射

2.3.2 Hbase命令行中创建表test

Hbase 中test的表结构如下,两个列簇name、company.
在这里插入图片描述
启动Hbase shell
[ybb@hadoop101 ~]$ /opt/module/hbase-1.3.1/bin/hbase shell

创建Hbase表test
hbase(main):001:0> create ‘test’,‘name’,‘company’

创建表,如下图:

在这里插入图片描述

2.3.3 视图映射

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

0: jdbc:phoenix:hadoop101,hadoop102,hadoop103> create view "test"(empid varchar primary key,"name"."firstname" varchar,"name"."lastname" varchar,"company"."name" varchar,"company"."address" varchar);

删除视图

0: jdbc:phoenix:hadoop101,hadoop102,hadoop103> drop view "test";

2.3.3 表映射

使用Apache Phoenix创建对HBase的表映射,有两种方法:
1) 当HBase中已经存在表时,可以以类似创建视图的方式创建关联表,只需要将create view改为create table即可。

0: jdbc:phoenix:hadoop101,hadoop102,hadoop103> create table "test"(empid varchar primary key,"name"."firstname" varchar,"name"."lastname" varchar,"company"."name" varchar,"company"."address" varchar);

2) 当HBase中不存在表时,可以直接使用create table指令创建需要的表,系统将会自动在Phoenix和HBase中创建person_infomation的表,并会根据指令内的参数对表结构进行初始化。

0: jdbc:phoenix:hadoop101,hadoop102,hadoop103> create table "test"(empid varchar primary key,"name"."firstname" varchar,"name"."lastname" varchar,"company"."name" varchar,"company"."address" varchar);

2.3.4 使用spark对phoenix的读写

在这里插入图片描述
在Phoenix中查看数据
select * from STOCK_SYMBOL
如下显示:

在这里插入图片描述
在Hbase中查看数据
scan “STOCK_SYMBOL”

在这里插入图片描述

更多使用详情,请参考http://phoenix.apache.org/phoenix_spark.html

2.3.5 视图映射和表映射的对比与总结:

相比于直接创建映射表,视图的查询效率会低,原因是:创建映射表的时候,Phoenix会在表中创建一些空的键值对,这些空键值对的存在可以用来提高查询效率。
使用create table创建的关联表,如果对表进行了修改,源数据也会改变,同时如果关联表被删除,源表也会被删除。但是视图就不会,如果删除视图,源数据不会发生改变。

3、Phoenix创建Hbase二级索引

3.1 配置Hbase支持Phoenix创建二级索引

3.1.1 添加如下配置到Hbase的Hregionserver节点的hbase-site.xml

<!-- phoenix regionserver 配置参数 -->
<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>
<description>Factory to create the Phoenix RPC Scheduler that uses separate queues for index and metadata updates</description>
</property><property>
<name>hbase.rpc.controllerfactory.class</name>
<value>org.apache.hadoop.hbase.ipc.controller.ServerRpcControllerFactory</value>
<description>Factory to create the Phoenix RPC Scheduler that uses separate queues for index and metadata updates</description>
</property>

3.1.2 添加如下配置到Hbase中Hmaster节点的hbase-site.xml中

<!-- phoenix master 配置参数 -->
<property>
<name>hbase.master.loadbalancer.class</name>
<value>org.apache.phoenix.hbase.index.balancer.IndexLoadBalancer</value>
</property><property>
<name>hbase.coprocessor.master.classes</name>
<value>org.apache.phoenix.hbase.index.master.IndexMasterObserver</value>
</property>

3.1.3 常见问题汇总:

1)注意:网上配置文档里有这一条,但在实际测试中(测试环境hbase-1.3.1,网上0.98.6),加入该条的regionserver会在hbase启动时失败,对应节点上没有HregionServer进程,去掉该配置后正常启动,且能正常创建local index。

<property>
<name>hbase.coprocessor.regionserver.classes</name>
<value>org.apache.hadoop.hbase.regionserver.LocalIndexMerger</value>
</property>

2)hbase-site.xml的zookeeeper的配置信息不能加2181,否则在创建local index的时候会报以下异常:
在这里插入图片描述

正常配置:

<property><name>hbase.zookeeper.quorum</name><value>hadoop101,hadoop102,hadoop103</value>
</property>

3.2创建索引

3.2.1 phoenix的索引分类

1)global index是默认的索引格式。适用于多读少写的业务场景。写数据的时候会消耗大量开销,因为索引表也要更新,而索引表是分布在不同的数据节点上的,跨节点的数据传输带来了较大的性能消耗。在读数据的时候Phoenix会选择索引表来降低查询消耗的时间。如果想查询的字段不是索引字段的话索引表不会被使用,也就是说不会带来查询速度的提升。
CREATE INDEX my_index ON my_table (my_index)

2)Local index适用于写操作频繁的场景。索引数据和数据表的数据是存放在相同的服务器中的,避免了在写操作的时候往不同服务器的索引表中写索引带来的额外开销。查询的字段不是索引字段索引表也会被使用,这会带来查询速度的提升。
CREATE LOCAL INDEX my_index ON my_table (my_index)

3.2.2 三种提升效率查询方式

1) CREATE INDEX my_index ON my_table (v1) INCLUDE (v2)
2) SELECT /*+ INDEX(my_table my_index) */ v2 FROM my_table WHERE v1 = ‘foo’
3) CREATE LOCAL INDEX my_index ON my_table (v1)

3.2.3 如何删除索引

DROP INDEX my_index ON my_table

4、 Squirrel可视化连接Phoenix

4.1 下载Squirrel的jar包官方网址

http://squirrel-sql.sourceforge.net/

4.2 在Windows环境下安装Squirrel程序

  1. 选择Java方式打开安装

在这里插入图片描述

  1. 自定义安装目录

在这里插入图片描述
3) 一直Next到安装完成

在这里插入图片描述

4.3 配置Squirrel连接到Phoenix

1) 复制Phoenix的client.jar包到D:\work\squirrel\lib的lib下
在这里插入图片描述
2) 启动Squirrel
在这里插入图片描述

3) 配置Driver
在这里插入图片描述

4) 添加Driver具体配置信息

在这里插入图片描述
配置信息:
Name=Phoenix
Example URL = jdbc:phoenix:hadoop101,hadoop102,hadoop103:2181
Java Class Path 选择D:\work\squirrel\lib\phoenix-4.14.1-HBase-1.3-client.jar
Class Name = org.apache.phoenix.jdbc.PhoenixDriver

5)配置Aliases

在这里插入图片描述
6)添加Aliases具体配置信息

在这里插入图片描述
配置信息:
Name=任意
Driver选择刚才添加的Phoenix
URL= jdbc:phoenix:hadoop101,hadoop102,hadoop103:2181
User Name = 任意
Password = 任意

7)测试连接是否成功

在这里插入图片描述
双击连接Phoenix

在这里插入图片描述
8)使用Squirrel查询数据
在这里插入图片描述

查询sql(WEB_STAT表要提前建好并导入数据)
[ybb@hadoop101 bin]$ psql.py …/examples/STOCK_SYMBOL.sql
[ybb@hadoop101 bin]$ psql.py …/examples/STOCK_SYMBOL.csv
select * from WEB_STAT;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/610731.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

元宇宙电商带你走进数字商城

在当今这个数字化、互联网高速发展的时代&#xff0c;传统的购物方式已逐渐被新兴的电商模式所替代。而在这股变革的浪潮中&#xff0c;一个全新的概念——元宇宙电商&#xff0c;正逐步走入我们的视野&#xff0c;元宇宙概念的兴起成为了热门话题。元宇宙是一个虚拟的世界&…

遥感影像大气校正一:6S模型使用

6S介绍 1986年&#xff0c;法国里尔科技大学大气光学实验室Tanr等人为了简化大气辐射传输方程&#xff0c;开发了太阳光谱波段卫星信号模拟程序5S&#xff08;SIMULATION OF THE SATELLITE SIGNAL IN THE SOLAR SPECTRUM&#xff09;&#xff0c;用来模拟地气系统中太阳…

Hive之set参数大全-3

D 是否启用本地任务调试模式 hive.debug.localtask 是 Apache Hive 中的一个配置参数&#xff0c;用于控制是否启用本地任务调试模式。在调试模式下&#xff0c;Hive 将尝试在本地模式下运行一些任务&#xff0c;以便更容易调试和分析问题。 具体来说&#xff0c;当 hive.de…

spring cloud之集成sentinel

写在前面 源码 。 本文一起看下spring cloud的sentinel组件的使用。 1&#xff1a;准备 1.1&#xff1a;理论 对于一个系统来说&#xff0c;最重要的就是高可用&#xff0c;那么如何实现高可用呢&#xff1f;你可能会说&#xff0c;集群部署不就可以了&#xff0c;但事实并…

【C#】用CefSharp.ChromiumWebBrowser做winform开发过程中遇到的一些坑

文章目录 使用键盘F5刷新、F12打开控制台浏览器默认下载弹窗禁用GPU配置 使用键盘F5刷新、F12打开控制台 public class CEFKeyBoardHander : IKeyboardHandler {public bool OnKeyEvent(IWebBrowser browserControl, IBrowser browser, KeyType type, int windowsKeyCode, int…

【3D动画】Animcraft 基础运用

骨骼包地址&#xff1a;G:\Animcraft相关资料\motion_2024 入库&#xff1a;FBX文件 Mixamo 下载一个模型。格式&#xff1a;FBX 导入到animcraft软件中。

论文封面表格制作

原文参考&#xff1a;【【论文排版】论文封面完美对齐 强迫症重度患者的经验分享】https://www.bilibili.com/video/BV18f4y1p7hc?vd_source046491acdcff4b39fed20406b36a93e2 视频里up主介绍很详细。我自己也记录一下。 介绍一下如何完成论文封面信息的填写。 创建一个3列…

MATLAB对数据隔位抽取和插值的几种方法

对于串行的数据&#xff0c;有时我们需要转成多路并行的数据进行处理&#xff0c;抽取&#xff1b;或者是需要对数据进行隔点抽取&#xff0c;或对数据进行插值处理。此处以4倍抽取或插值为例&#xff0c;MATLAB代码实现。 文章目录 抽取方法一&#xff1a;downsample函数方法…

vue:如果.vue文件内容过多,我们可以这样拆分

一、标签内容太多&#xff0c;我们可以用组件的方式拆分 二、那如果JS的内容太多呢&#xff1f;因为耦合性太高&#xff0c;拆成组件后父子组件传值不方便&#xff0c;我们可以这样&#xff1a; 子组件: export default {data() {return {};},methods: {a(){alert(1)}} };父组…

算法练习:找出数组大于 n/2 的元素

题目&#xff1a; 给定一个大小为 n 的数组nums &#xff0c;返回其中的多数元素。多数元素是指在数组中出现次数 大于 n/2 的元素。你可以假设数组是非空的&#xff0c;并且给定的数组总是存在多数元素。 示例&#xff1a; 输入&#xff1a;nums [3,2,3] 输出&#xff1a;…

[足式机器人]Part2 Dr. CAN学习笔记 - Ch02动态系统建模与分析

本文仅供学习使用 本文参考&#xff1a; B站&#xff1a;DR_CAN Dr. CAN学习笔记 - Ch02动态系统建模与分析 1. 课程介绍2. 电路系统建模、基尔霍夫定律3. 流体系统建模4. 拉普拉斯变换&#xff08;Laplace&#xff09;传递函数、微分方程4.1 Laplace Transform 拉式变换4.2 收…

Exception sending a multicast message:Network is unreachable故障

出现这个故障就是没有连接到网络&#xff0c;如果虚拟机没有连接到本机&#xff0c;那么就会出现这个情况&#xff0c;当虚拟机连接到本机就会自动消失&#xff0c;同时如果是用电脑直接安装Ubuntu运行也会出现这个情况&#xff0c;应该是要连接到一个路由器里面这个情况才会消…

Python 借助装饰器,实现父对象使用子对象的方法!

文章目录 1. 引言2. 实践2.1 装饰器说明2.2 定义一个父类2.3 定义子类 3. 整体来看4. 参考 1. 引言 这个需求的背景是这样的&#xff0c;我们在写复杂代码时候&#xff0c;可能会用到 Python 的类继承的方法&#xff0c;即子对象继承父对象的一些属性方法。 在这个过程中&…

游戏后端如何实现服务器之间的负载均衡?

网络游戏已成为人们休闲娱乐的重要方式之一。而在游戏开发中&#xff0c;如何实现服务器之间的负载均衡是一个非常关键的问题。负载均衡不仅可以提高服务器的处理能力&#xff0c;还能保证游戏的稳定性和流畅性。本文将探讨游戏后端如何实现服务器之间的负载均衡。 一、负载均…

Eigen 中的传播计算

Eigen: Reductions, visitors and broadcasting

太实用了!关于ControlNet,这篇你一定要看

一篇文章教会你&#xff0c;从入门到使用。 这里是行者AI&#xff0c;我们专注于人工智能在游戏领域的研究和应用&#xff0c;凭借自研算法&#xff0c;推出游戏AI、智能内容审核、数据平台等产品服务。 controlNet控制生成 anypaint 看到这篇文章的你&#xff0c;一定也是AI绘…

SpringBoot整合人大金仓数据库KingBase

1 去KingBase官网下载驱动jar包 2 将解压得到的所有jar包放置在libs目录下&#xff08;没有就新建一个目录&#xff09; 3 在pom文件添加相关依赖 <!--添加KingBase所需要的依赖--> <dependency><groupId>com.kingbase</groupId><artifactId>kin…

DNS解析原理和k8s DNS 实践

1. 问题背景 1.1 域名解析异常 近期开发的一个功能&#xff0c;需要在k8s集群容器环境中调用公司内部api&#xff0c;api提供了内网域名&#xff0c;解析内网域名异常导致请求超时&#xff0c;因此梳理了下DNS的知识点。 可以先看到下面&#x1f447;这段配置&#xff0c;修…

向量数据库:Milvus

特性 Milvus由Go(63.4%),Python(17.0%),C(16.6%),Shell(1.3%)等语言开发开发&#xff0c;支持python&#xff0c;go&#xff0c;java接口(C,Rust,c#等语言还在开发中)&#xff0c;支持单机、集群部署&#xff0c;支持CPU、GPU运算。Milvus 中的所有搜索和查询操作都在内存中执行…

《每天十分钟》-红宝书第4版-基本引用类型

引用值&#xff08;或者对象&#xff09;是某个特定引用类型的实例。在 ECMAScript 中&#xff0c;引用类型是把数据和功能组织到一起的结构&#xff0c;经常被人错误地称作“类”。虽然从技术上JavaScript 是一门面向对象语言&#xff0c;但ECMAScript 缺少传统的面向对象编程…