TA的每日心情 | 开心 2021-12-13 21:45 |
---|
签到天数: 15 天 [LV.4]偶尔看看III
|
应用场景
当我们按照之前的博文,安装完hadoop分布式集群之后,再安装了Hbase,当准备通过hbase shell命令开始使用Hbase的时候,发现hbase非常的难用,都是一些scan,status,describe命令等,无法像mysql,oracle,Hive等通过一些简单的SQL语句来操作数据,但是通过Phoenix,它可以让Hbase可以通过SQL语句来进行操作。并且Phoenix只针对Hbase,所以它的效率比起Impala,HQL有过之而无不及!
操作步骤
1. Phoenix介绍
可以把Phoenix理解为Hbase的查询引擎,phoenix,由saleforce.com开源的一个项目,后又捐给了Apache。它相当于一个java中间件,帮助开发者,像使用jdbc访问关系型数据库一些,访问NoSql数据库HBase。
phoenix,操作的表及数据,存储在hbase上。phoenix只是需要和Hbase进行表关联起来。然后再用工具进行一些读或写操作。
其实,可以把Phoenix只看成一种代替HBase的语法的一个工具。虽然可以用java可以用jdbc来连接phoenix,然后操作HBase,但是在生产环境中,不可以用在OLTP中。在线事务处理的环境中,需要低延迟,而Phoenix在查询HBase时,虽然做了一些优化,但延迟还是不小。所以依然是用在OLAT中,再将结果返回存储下来。
2. Phoenix安装包下载
注:phoenix安装包的下载非常讲究,如果和hbase的版本不匹配,那么可能导致hbase也会失败,导致HRegionServer开启后,1分钟之内自动关闭,很麻烦!上面的安装包针对hbase1.2.X,亲测好用!
3. phoenix安装包解压缩更换目录
- [code] # cd /opt
- # tar -xzvf apache-phoenix-4.10.0-HBase-1.2-bin.tar.gz
- # mv apache-phoenix-4.10.0-HBase-1.2-bin phoenix4.10.0
- # chmod 777 -R /opt/phoenix4.10.0 #给phoenix目录授权
复制代码 [/code]
4. 修改配置文件
- [code] # vim /etc/profile
- export PHOENIX_HOME=/opt/phoenix4.10.0 #在最后两行加上如下phoenix配置
- export PATH=$PATH:$PHOENIX_HOME/bin
复制代码 [/code]
- [code] # source /etc/profile #使环境变量配置生效
复制代码 [/code]
5. 将主节点的phoenix包传到从节点
- [code] # scp -r phoenix4.10.0 root@hadoop1:/opt/
- # scp -r phoenix4.10.0 root@hadoop2:/opt/
复制代码 [/code]
并且在从节点上将phoenix目录进行授权,添加环境变量!
6. 将hbase-site.xml配置文件拷贝到phoenix的bin目录下【主从节点都需要】
- [code] # cp /opt/hbase1.2.6/conf/hbase-site.xml /opt/phoenix4.10.0/bin/
复制代码 [/code]
7. 将phoenix安装包下的包放到hbase的lib目录下【主从节点都需要】
将如下两个jar包,目录在/opt/phoenix4.10.0/下,拷贝到hbase的lib目录,目录在/opt/hbase1.2.6/lib/
- [code] phoenix-4.10.0-HBase-1.2-server.jar
- phoenix-core-4.10.0-HBase-1.2.jar
复制代码 [/code]
8. 启动phoenix
- [code] # sqlline.py hadoop0,hadoop1,hadoop2:2181
复制代码 [/code]

[/code]
$(function () { $("pre.prettyprint code").each(function () { var lines = $(this).text().split("\n").length; var $numbering = $("").addClass("pre-numbering").hide(); $(this).addClass("has-numbering").parent().append($numbering); for (i = 1; i ").text(i)); }; $numbering.fadeIn(1700); }); }); |
|