Phoenix基本使用

news2024/11/18 21:33:44

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 下添加如下内容

#phoenix
	export PHOENIX_HOME=/opt/module/phoenix
	export PHOENIX_CLASSPATH=$PHOENIX_HOME
	export 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.coloradmin.cn/o/1371535.html

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

相关文章

51-6 Vision Transformer ,ViT 论文精读

李沐&#xff08;沐神&#xff09;、朱毅讲得真的好&#xff0c;干货蛮多&#xff0c;值得认真读很多遍&#xff0c;甚至可以当成多模态大模型基础课程学习。 论文原文: An image is worth 16x16 words: transformers for image recognition at scale。 ViT取代了CNN&#xf…

给大家带来三个图片格式转换工具以及步骤

在处理图片时&#xff0c;我们经常需要将图片格式转换为JPG格式。JPG格式是一种常见的图片格式&#xff0c;它具有较好的压缩效果和兼容性&#xff0c;适用于各种不同的应用场景。下面将介绍如何将图片格式转换为JPG格式。 方法一&#xff1a;水印云工具 1. 打开我们的软件。…

Q-BENCH: A BENCHMARK FOR GENERAL-PURPOSEFOUNDATION MODELS ON LOW-LEVEL VISION

继续分享Q系列文章&#xff0c;今天分享Q-BENCH。 简单来说&#xff0c;作者对MLLMs在lowlevel领域中的评价提出了一个测试基准&#xff0c;主要分三点进行讲述。 有点类似于综述&#xff0c;显然作者团队在MLLM的lowlevel领域属于开山之作了。 第一个基准叫感知Perception 简…

朴素贝叶斯进行垃圾邮件分类的python简单示例实现

朴素贝叶斯&#xff08;Naive Bayes&#xff09;是一种基于贝叶斯定理的分类算法&#xff0c;它的核心思想是利用特征之间的独立性来简化分类问题。具体来说&#xff0c;朴素贝叶斯假设每个特征与其他特征之间是相互独立的&#xff0c;即每个特征对于分类结果的影响是相互独立的…

网络安全B模块(笔记详解)- Web渗透测试

Web渗透测试 1.通过渗透机Kali1.0对服务器场景PYsystem20192进行Web渗透测试(使用工具w3af的对目标Web服务器进行审计),在w3af的命令行界面下,使用命令列出所有用于审计的插件,将该操作使用的命令作为Flag值提交; 进入kali命令控制台中使用命令w3af_console进入w3af命令…

Java IO学习和总结(超详细)

一、理解 I/O 是输入和输出的简写&#xff0c;指的是数据在计算机内部和外部设备之间的流动。简单来说&#xff0c;当你从键盘输入数据、从鼠标选择操作&#xff0c;或者在屏幕上看到图像&#xff0c;这些都是 I/O 操作。它就像是计算机与外部世界沟通的桥梁&#xff0c;没有 I…

Zookeeper设计理念与源码剖析

Zookeeper 架构理解 整体架构 Follower server 可以直接处理读请求&#xff0c;但不能直接处理写请求。写请求只能转发给 leader server 进行处理。最终所有的写请求在 leader server 端串行执行。&#xff08;因为分布式环境下永远无法精确地确认不同服务器不同事件发生的先后…

【Flink精讲】Flink数据延迟处理

面试题&#xff1a;Flink数据延迟怎么处理&#xff1f; 将迟到数据直接丢弃【默认方案】将迟到数据收集起来另外处理&#xff08;旁路输出&#xff09;重新激活已经关闭的窗口并重新计算以修正结果&#xff08;Lateness&#xff09; Flink数据延迟处理方案 用一个案例说明三…

鸿蒙开发已解决-Failed to connect to gitee.com port 443: Time out 连接超时提示

文章目录 项目场景:问题描述原因分析:解决方案:解决方案1解决方案2:解决方案3:此Bug解决方案总结解决方案总结**心得体会:解决连接超时问题的三种方案**项目场景: 导入Sample时遇到导入失败的情况,并提示“Failed to connect to gitee.com port 443: Time out”连接超…

外汇天眼:MT5到底比MT4强在哪里?

这段时间&#xff0c;我们收到许多用户询问关于MT5比MT4优秀的地方&#xff0c;为解答多数投资人的疑惑&#xff0c;决定简短分享两者的差距。 其实MT4功能已经非常强大&#xff0c;但MT5的功能提升绝对不只一个量级&#xff0c;这也是工程师积极向MT5转型的主要原因&#xff0…

Apache ECharts | 一个数据可视化图表库

文章目录 1、简介1.1、主要特点1.2、使用场景 2、安装方式一&#xff1a;从下载的源代码或编译产物安装方法二&#xff1a;从 npm 安装方法三&#xff1a;⭐定制安装echarts.js 3、使用 官网&#xff1a; 英语&#xff1a;https://echarts.apache.org/en/index.html 中文&a…

使用Moonbuilders Academy平台,学习DApp开发

Moonbeam团队于2022年宣布开放Moonbuilders Academy。这是一套以开发为中心的异步学习课程&#xff0c;用于学习如何在Moonbeam上构建跨链DApp。 如何从官网进入平台&#xff1f; 点击http://moonbeam.network 鼠标移动至 “Builders”&#xff0c;在Resources下方选择“Moo…

激活函数整理

sigmoid函数 import torch from d2l import torch as d2l %matplotlib inline ​ xtorch.arange(-10,10,0.1,requires_gradTrue) sigmoidtorch.nn.Sigmoid() ysigmoid(x) ​ d2l.plot(x.detach(),y.detach(),x,sigmoid(x),figsize(5,2.5)) sigmoid函数连续、光滑、单调递增&am…

Queue接口分析

一、Queue是什么 该接口是Java集合框架成员 Queue&#xff1a; 通常&#xff08;但不一定&#xff09;队列就是一个先入先出&#xff08;FIFO&#xff09;的数据结构&#xff0c;和堆一样&#xff08;但可以进行转换&#xff0c;比如优先级列队排序&#xff0c;又或者改为栈形…

增广路算法 DFS求解 最大网络流问题

最大网络流问题 最大网络流问题是这样的&#xff0c;有一个有向图&#xff0c;假定有一个源点&#xff0c;有一个汇点&#xff0c;源点有流量出来&#xff0c;汇点有流量进入&#xff0c;有向图上的边的权重为该条边可通过的最大流量(方向为边的方向)&#xff0c;问从源点到汇…

网络安全新形势下的动态防御体系研究(下)

文章目录 一、动态防御体系构成&#xff08;一&#xff09;建立对抗式威胁评估能力&#xff08;二&#xff09;建立安全防御效能验证能力&#xff08;三&#xff09;建立安全防御基准检测能力&#xff08;四&#xff09;建立欺骗式防御能力&#xff08;五&#xff09;建立安全态…

Windows下面基于pgsql15的备份和恢复

一、基础备份 1.创建一个文件用来存储备份数据 2.备份指令 $CurrentDate Get-Date -Format "yyyy-MM-dd" $OutputDirectory "D:\PgsqData\pg_base\$CurrentDate" $Command "./pg_basebackup -h 127.0.0.1 -U postgres -Ft -Pv -Xf -z -Z5 -D $O…

前端面试题集合四(html)

HTML 面试知识点总结 本部分主要是笔者在复习 HTML 相关知识和一些相关面试题时所做的笔记&#xff0c;如果出现错误&#xff0c;希望大家指出&#xff01; 目录 1. DOCTYPE 的作用是什么&#xff1f;2. 标准模式与兼容模式各有什么区别&#xff1f;3. HTML5 为什么只需要写…

Cesium笔记 初始化 原生Cesium

1、创建vue项目 vue create my_demo 2、下载Cesium 可以从官网下载&#xff0c;也可以使用node下载 npm install cesium 3、把node_modules文件夹中下载得Cesium&#xff0c;移出到public文件夹下 4、将Cesium.js 以及样式文件widgets.css在index.html中引用 <!DOCT…

鸿鹄云商B2B2C:JAVA实现的商家间直播带货商城系统概览

【saas云平台】打造全行业全渠道全场景的saas产品&#xff0c;为经营场景提供一体化解决方案&#xff1b;门店经营区域化、网店经营一体化&#xff0c;本地化、全方位、一站式服务&#xff0c;为多门店提供统一运营解决方案&#xff1b;提供丰富多样的营销玩法覆盖所有经营场景…