参考文档
https://www.cnblogs.com/zlslch/p/7096402.html
集群节点 三个mini1,mini2,mini3
1,下载
phoenix for CDH下载位置,我下载的是目前phoenix对应的cdh最高版本5.9,但是我用的是CDH最高版本5.13(目前最高版本。测试5.13,生产上用的是CDH5.11)
https://github.com/chiastic-security/phoenix-for-cloudera/tree/4.9-HBase-1.2-cdh5.9
2,编译phoenix for CDH5.9源码包
用maven,电脑上装个maven,我是3.3.9版本的maven。不要太在意装哪个版本的maven感觉都能编译。(maven怎么装百度一大把)
然后开始菜单进入cmd,进行编译
进入你存放phoenix源码的路径,我是放在G:\Phoenix\phoenix-for-cloudera-4.9-HBase-1.2-cdh5.9
直接执行编译命令:
mvn clean package -DskipTests
(注意:变过程会很慢,很慢,很慢.........并且过程会报错编译失败,那就多编译几次。。。我是经过N次编译。。。让人崩溃)
出现 如上图,恭喜你编译成功啦!!!!!!!!!!!!!!!!!
打好包后一般都在target文件夹下。
3.将phoenix-4.9.0-cdh5.9.1.tar.gz,上传cdh的hbase集群,解压tar包,tar包我放在/home/phoenix目录下:解压
将phoenix-4.9.0-cdh5.9.1-server.jar包拷贝到每一个节点的RegionServer下
RegionServer的路径看你怎么装CDH了。但是一般默认都在
/opt/cloudera/parcels/CDH-5.13.0-1.cdh5.13.0.p0.29/lib/hbase/lib,路径下
(主要查这个目录:/cloudera/parcels/CDH-5.13.0-1.cdh5.13.0.p0.29/lib/hbase/lib)
每一个节点都要!
CDH修改方法:
增加hbase-site.xml 配置
hbase.table.sanity.checks
false
添加方式如下:
在集群管理页面点击Hbase,进入Hbase管理界面
点击配置:
选择高级:
增加如下配置:
重启Hbase
这个很简单,不多说,会玩cloudermanager的人都知道。
登录phoenix
进入phoenix-4.8.0-cdh5.8.0/bin目录执行。
进入phoenix,(mini1:2181,不是zk的leader节点,而是当前节点的)
!tables命令查看表
select * from "device_report" limit 10;可以查询了。。。。
我在hbase中先建好表:score,列簇是a,插入3个数据,如下
device_report,score这连个表我已经和hbase进行映射完了,映射方式是:
create table "score"(NAME archar primary key, "a"."age" varchar,"a"."sex" varchar);
注意:表名score,必须要加双引号!列簇和列名也是一样加双引号!
注意的问题:
phoenix 是大小写很敏感的,hbase在建表时,表名小写用引号还能查,
字段小写绝对不支持条件,所以在hbase建表时,强烈建议,表名,列簇,rowkey,列名都大写,就可以和phoenix衔接了。
不知道为什么在查询的过程的中,只要带有where 字段的查询,就报列和列名找不到
列:试了很多中形式如下
select * from "score" where "age"="16";
select * from "score" where "a"."age"="16";
select * from "score" where "a.age"="16";
select * from "score" where "a:age"="16";
select * from "score" where age=16;
select * from "score" a where a.age=16;
select * from "score" a where a.age="16";
--------------不管什么形式--只要加条件查询了就报一样的错,都是
Undefined column. columnName如下--------------------------------------
Error: ERROR 504 (42703): Undefined column. columnName=AGE (state=42703,code=504)
org.apache.phoenix.schema.ColumnNotFoundException: ERROR 504 (42703): Undefined column. columnName=AGE
at org.apache.phoenix.schema.PTableImpl.getColumn(PTableImpl.java:743)
at org.apache.phoenix.compile.FromCompiler$SingleTableColumnResolver.resolveColumn(FromCompiler.java:449)
at org.apache.phoenix.compile.ExpressionCompiler.resolveColumn(ExpressionCompiler.java:358)
at org.apache.phoenix.compile.WhereCompiler$WhereExpressionCompiler.resolveColumn(WhereCompiler.java:181)
at org.apache.phoenix.compile.WhereCompiler$WhereExpressionCompiler.visit(WhereCompiler.java:169)
at org.apache.phoenix.compile.WhereCompiler$WhereExpressionCompiler.visit(WhereCompiler.java:156)
at org.apache.phoenix.parse.ColumnParseNode.accept(ColumnParseNode.java:56)
at org.apache.phoenix.parse.CompoundParseNode.acceptChildren(CompoundParseNode.java:64)
at org.apache.phoenix.parse.ComparisonParseNode.accept(ComparisonParseNode.java:45)
at org.apache.phoenix.compile.WhereCompiler.compile(WhereCompiler.java:130)
at org.apache.phoenix.compile.WhereCompiler.compile(WhereCompiler.java:100)
at org.apache.phoenix.compile.QueryCompiler.compileSingleFlatQuery(QueryCompiler.java:556)
at org.apache.phoenix.compile.QueryCompiler.compileSingleQuery(QueryCompiler.java:507)
at org.apache.phoenix.compile.QueryCompiler.compileSelect(QueryCompiler.java:202)
at org.apache.phoenix.compile.QueryCompiler.compile(QueryCompiler.java:157)
at org.apache.phoenix.jdbc.PhoenixStatement$ExecutableSelectStatement.compilePlan(PhoenixStatement.java:420)
at org.apache.phoenix.jdbc.PhoenixStatement$ExecutableSelectStatement.compilePlan(PhoenixStatement.java:394)
at org.apache.phoenix.jdbc.PhoenixStatement$1.call(PhoenixStatement.java:280)
at org.apache.phoenix.jdbc.PhoenixStatement$1.call(PhoenixStatement.java:270)
at org.apache.phoenix.call.CallRunner.run(CallRunner.java:53)
at org.apache.phoenix.jdbc.PhoenixStatement.executeQuery(PhoenixStatement.java:269)
at org.apache.phoenix.jdbc.PhoenixStatement.execute(PhoenixStatement.java:1515)
at sqlline.Commands.execute(Commands.java:822)
at sqlline.Commands.sql(Commands.java:732)
at sqlline.SqlLine.dispatch(SqlLine.java:813)
at sqlline.SqlLine.begin(SqlLine.java:686)
at sqlline.SqlLine.start(SqlLine.java:398)
at sqlline.SqlLine.main(SqlLine.java:291)
如下图:
希望哪位兄找到了这个支持小写的解决办法,能给楼主我留言,也分享下你的解决方法!!!共同进步,358466847我的qq,也可以给我发QQ邮箱。