Linux安装Phoenix及其环境配置

目录


Linux服务器环境部署专栏目录(点击进入…)


快来加入我们的互动学习群吧,与我们一起成长和进步吧! QQ交流群:948912943

进群下载配套安装包,无需考虑版本兼容等问题!!!


Linux安装Phoenix及其环境配置

Apache Phoenix是构建在HBase之上的关系型数据库层,作为内嵌的客户端JDBC驱动用以对HBase中的数据进行低延迟访问。Apache Phoenix会将用户编写的SQL查询编译为一系列的scan操作,最终产生通用的JDBC结果集返回给客户端。数据表的元数据存储在HBase的表中被会标记版本号,所以进行查询的时候会自动选择正确的schema。直接使用HBase的API,结合协处理器(coprocessor)和自定义的过滤器的话,小范围的查询在毫秒级响应,千万数据的话响应速度为秒级。

注意:如果只需启动Phoenix,只需将服务端Jar传至hbase/bin目录下,并配置Phoenix相关配置到hbase-site.xml当中,重新启动Hbase即可。


下载Phoenix

官方地址https://phoenix.apache.org/
下载地址https://archive.apache.org/dist/phoenix/

在这里插入图片描述

在这里插入图片描述

选择自己需要的版本
在这里插入图片描述

在这里插入图片描述


1.解压

tar -zxvf phoenix-hbase-2.4.0-5.1.2-bin.tar.gz
mv ./phoenix-hbase-2.4.0-5.1.2-bin ./phoenix-hbase-2.4.0-5.1.2

2.配置环境变量

将以下部分放在环境变量文件中。记得把$PHOENIX_HOME换成自己的

export PHOENIX_HOME=/home/environment/phoenix-hbase-2.4.0-5.1.2
export PHOENIX_CLASSPATH=$PHOENIX_HOME
export PATH=$PHOENIX_HOME/bin:$PATH

编辑好后切记要让环境变量文件生效:

source .bashrc

3.复制server.jar文件到$HBASE_HOME/lib目录下(每台机器都要发送)

cp -a /home/environment/phoenix-hbase-2.4.0-5.1.2/phoenix-server-hbase-2.4.0-5.1.2.jar /home/environment/hbase-2.4.14/lib

两个Jar包

phoenix-server-hbase-2.4.0-5.1.2.jar
htrace-core-3.1.0-incubating.jar

其中htrace-core-3.1.0-incubating.jar是从maven repo下载的(这个巨坑,phoenix居然没有携带)


4.启用二级索引

进入hbase/conf目录,启用二级索引(建立二级索引,将业务需要的数据联立建立索引,方便查询,但是如果用 hbase 维护的话会很麻烦)

为什么要做二级索引?
对于HBase而言,如果想精确地定位到某行记录,唯一的办法是通过rowkey来查询。如果不通过rowkey来查找数据,就必须逐行地比较每一列的值,即全表扫描。对于较大的表,全表扫描的代价是不可接受的。但是,很多情况下,需要从多个角度查询数据。

例如:在定位某个人的时候,可以通过姓名、身份证号、学籍号等不同的角度来查询,要想把这么多角度的数据都放到rowkey中几乎不可能(业务的灵活性不允许,对rowkey长度的要求也不允许)。所以,需要secondary index(二级索引)来完成这件事。secondary index的原理很简单,但是如果自己维护的话则会麻烦一些。现在,Phoenix已经提供了对HBase secondary index的支持。


5.修改Hbase的hbase-site.xml文件配置(全部内容附在最后)

进入$HBASE_HOME/conf,修改hbase-site.xml文件内容,加入下面这一段内容。

<!-- 支持可变索引 -->
<property>
	<name>hbase.regionserver.wal.codec</name>
	<value>org.apache.hadoop.hbase.regionserver.wal.IndexedWALEditCodec</value>
</property>

<!-- 开启phoenix命名空间的自动映射 -->
<!-- 使用schema和Namespace对应的配置 -->
<property>
	<name>phoenix.schema.isNamespaceMappingEnabled</name>
	<value>true</value>
</property>
<property>
	<name>phoenix.schema.mapSystemTablesToNamespace</name>
	<value>true</value>
</property>

<!-- 开启用户自定义函数(UDFs) -->
<property>
	<name>phoenix.functions.allowUserDefinedFunctions</name>
	<value>true</value>
</property>

isNamespaceMappingEnabled、mapSystemTablesToNamespace属性前缀:phoenix.schema

属性默认值描述
isNamespaceMappingEnabledfalse如果启用了它,那么使用模式创建的表将映射到名称空间。这需要在客户端和服务器端同时设置。如果设置一次,则不应回滚。启用此属性后,旧客户端将无法工作
mapSystemTablesToNamespacetrue启动此属性将在isNamespaceMappingEnabled也设置成true。如果它启动,系统表将自动迁移到SYSTEM命名空间。如果设置成false,系统表将在默认的命名空间中创建。它需要同时在客户端和服务端设置
属性描述
hbase.rootdir共享目录。默认在临时/tmp下,需要自己配置修改,因为重启服务器未见回丢失,也可以配置hdfs。
例如:hdfs://namenode.ehl.com:9000/hbase
hbase.dynamic.jars.dir目录是phoenix 客户端/regionserver获取自定义udf的jar的地方。不需要重启服务

然后将hbase-site.xml拷贝到$PHOENIX_HOME/bin目录下:

cp -a hbase-site.xml /home/environment/phoenix-hbase-2.4.0-5.1.2/bin

修改配置后,重启hbase


6.启动Phoenix(客户端)

①先启动hdfs和zookeeper(phoenix是通过zookeeper连接hbase)
②再启动hbase(注意:如果在配置phoenix前已经启动了hbase,需要重启;hbase里的新配置会跟着生效)
③启动phoenix客户端

进入$PHOENIX_HOME/bin目录下,输入以下命令:

./sqlline.py

注意:在启动时可能报以下错误

raceback (most recent call last):
File "./sqlline.py", line 27, in <module>
import argparse
<font color=red>ImportError: No module named argparse</font>

解决办法:在安装phoenix的服务器上安装该模块

#不报错可以不用安装
yum ‐y install python‐argparse
#列出所有表
!tables

开发程序,对HBase+PhoenixDB进行操作

①使用phoenix-queryserver,这是一个http服务,通过这个服务操作Phoenix DB。
②使用JDBC标准驱动; SpringBoot+MyBatis表捆绑映射、直接写代码操作JDBC API。


常用命令

命令描述
help查看所有指令的帮助信息
!table | !tables查看所有的表
!describe查看的表的描述信息
!index查询表的所有索引信息
!history可以查看执行的历史SQL
!dbinfo可以查看Phoenix所有的属性配置

hbase-site.xml文件

<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
	<!--
	HBase有三种运行模式:
						①单机模式	
						②伪分布式模式	
						③分布式模式
	基于本地文件系统运行
	将HBase作为单个进程在开发人员工作站。使用此配置,HBase正在运行“单机”模式,没有分布式文件系统。在此模式下,无需进一步配置,HBase和ZooKeeper数据存储在本地文件系统,位于为`hbase.tmp.dir`配置的值下的路径中。
	此值将从其默认值“/tmp”重写,因为系统定期清理“/tmp”。相反,它指向此HBase安装目录。针对“LocalFileSystem”运行,而不是针对分布式文件系统存在数据完整性问题和数据丢失的风险。正常地HBase将拒绝在这样的环境中运行。
	设置`hbase.unsafe.stream.capability.enforce=false`覆盖此行为,允许操作。此配置用于开发人员工作站仅和不应用于生产
    See also https://hbase.apache.org/book.html#standalone_dist
	
	<property>
		<name>hbase.cluster.distributed</name>
		<value>false</value>
	</property>
	<property>
		<name>hbase.tmp.dir</name>
		<value>./tmp</value>
	</property>
	<property>
		<name>hbase.unsafe.stream.capability.enforce</name>
		<value>false</value>
	</property>
	-->
  
	<!-- HBase的存储目录 与Hadoop中的core-site.xml中的地址保持一致-->
	<property>
		<name>hbase.rootdir</name>
		<value>hdfs://node1:9000/hbase</value>
	</property>
	<!-- HBase Web服务 -->
	<property>
		<name>hbase.master.info.port</name>
		<value>60010</value>
	</property>
	
	<!-- 指定HBase的运行模式 - 是否为分布式 -->
	<!-- 当使用外置zookeeper时必须配置为true,仅在使用hbase自带zookeeper时配置为false -->
	<property>
		<name>hbase.cluster.distributed</name>
		<value>true</value>
	</property>
	
	<!-- Zookeeper的运行节点地址(hbase外置) -->
	<!-- 可配置多个节点, 没有配置主机名和IP地址的映射etc/hosts文件, 可以使用各节点IP地址 -->
	<property>
		<name>hbase.zookeeper.quorum</name>
		<value>node1,node2,node3</value>
	</property>
	<property>
		​<name>hbase.zookeeper.property.clientPort</name>
		​<value>2181</value>
   ​</property>

	<!-- Zookeeper的运行节点(hbase内置)
	<property>
		<name>hbase.zookeeper.quorum</name>
		<value>localhost</value>
	</property>
	<property>
		​<name>hbase.zookeeper.property.clientPort</name>
		​<value>2181</value>
   ​</property>
   <property>
        <name>zookeeper.session.timeout</name>
        <value>60000000</value>
    </property>
    <property>
        <name>dfs.support.append</name>
        <value>true</value>
    </property>
	
	Zookeeper存放数据目录 对应ZooKeeper的config zoo.cfg中的属性
	<property>
		<name>hbase.zookeeper.property.dataDir</name>
		<value>/home/environment/zookeeper/zkdata</value>
	</property>
	-->
	
	
	
	<!-- ================================== -->
	<!-- ==============Phoenix============= -->
	<!-- ================================== -->
	<!-- 支持可变索引 -->
	<property>
		<name>hbase.regionserver.wal.codec</name>
		<value>org.apache.hadoop.hbase.regionserver.wal.IndexedWALEditCodec</value>
	</property>
	<!-- 开启phoenix命名空间的自动映射 -->
	<!-- 使用schema和Namespace对应的配置 -->
	<!--
	<property>
		<name>phoenix.schema.isNamespaceMappingEnabled</name>
		<value>true</value>
	</property>
	<property>
		<name>phoenix.schema.mapSystemTablesToNamespace</name>
		<value>true</value>
	</property>
	-->
	<!-- 开启用户自定义函数(UDFs) -->
	<property>
		<name>phoenix.functions.allowUserDefinedFunctions</name>
		<value>true</value>
	</property>

	
</configuration>
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

未禾

您的支持是我最宝贵的财富!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值