Phoenix简介
Phoenix是一个基于HBase的开源SQL引擎,能够应用规范的JDBC API代替HBase客户端API来创立表,插入数据,查问你的HBase数据,它是齐全应用Java编写,作为HBase内嵌的JDBC驱动应用。
Phoenix查问引擎会将SQL查问转换为一个或多个HBase扫描,并编排执行以生成规范的JDBC后果集。
间接应用HBase API、协同处理器与自定义过滤器,对于简略查问来说,其性能量级是毫秒,对于百万级别的行数来说,其性能量级是秒。
Phoenix性能如此优良有上面几方面因素:
- 编译你的SQL查问转为原生HBase的scan语句
- 检测scan语句最佳的开始和完结的key
- 精心编排你的scan语句让他们并行执行
- 推送你的WHERE子句的谓词到服务端过滤器解决
- 执行聚合查问通过服务端钩子(称为协同处理器)
- 实现了二级索引来晋升非主键字段查问的性能
- 统计相干数据来进步并行化程度,并帮忙抉择最佳优化计划
- 跳过扫描过滤器来优化IN,LIKE,OR查问
- 优化主键来均匀分布写压力
接下来就分享下我遇到的问题的表象,以及问题产生的起因,以及解决办法:
依照教程的疏导:
- 下载安装包,并解压
- 拷贝hbase-site.xml、core-site.xml、hdfs-site.xml
- 启动HBase集群
开启链接,报了一堆谬误,而后看似是开启了交互模式,而后尝试查表命令,显然还是不能用的
[root@linux123 bin]# ./sqlline.py linux123:2181
Setting property: [incremental, false]
Setting property: [isolation, TRANSACTION_READ_COMMITTED]
issuing: !connect jdbc:phoenix:linux123:2181 none none org.apache.phoenix.jdbc.PhoenixDriver
Connecting to jdbc:phoenix:linux123:2181
21/08/19 21:17:31 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
21/08/19 21:17:35 WARN ipc.CoprocessorRpcChannel: Call failed on IOException
org.apache.hadoop.hbase.DoNotRetryIOException: org.apache.hadoop.hbase.DoNotRetryIOException: SYSTEM.CATALOG: org.apache.hadoop.hbase.client.Scan.setRaw(Z)V
at org.apache.phoenix.util.ServerUtil.createIOException(ServerUtil.java:120)... 13 more
Caused by: java.lang.NoSuchMethodError: org.apache.hadoop.hbase.client.Scan.setRaw(Z)V
at org.apache.phoenix.coprocessor.MetaDataEndpointImpl.buildDeletedTable(MetaDataEndpointImpl.java:1230)... 13 more
Error: ERROR 2006 (INT08): Incompatible jars detected between client and server. Ensure that phoenix-[version]-server.jar is put on the classpath of HBase in every region server: org.apache.hadoop.hbase.DoNotRetryIOException: SYSTEM.CATALOG: org.apache.hadoop.hbase.client.Scan.setRaw(Z)V
at org.apache.phoenix.util.ServerUtil.createIOException(ServerUtil.java:120)... 13 more
sqlline version 1.2.0
0: jdbc:phoenix:linux123:2181>
搜寻结尾的正告关键字,的确找到了大量的同学分享相干的教训贴,次要分两类:
Unable to load native-hadoop library
DoNotRetryIOException: SYSTEM.CATALOG
通过重复检查和尝试,都没有解决我的问题原来前面大段的红色报错,才是问题的要害
Incompatible jars detected between client and server. Ensure that phoenix-[version]-server.jar is put on the classpath of HBase in every region server
以我肤浅的单词储备:问题的起因应该是jar包版本跟HBase不匹配,猛然想到,本人的集群环境很可能跟教程上的版本号不统一
经查看,的确发现问题的要害:
教程中是用CDH搭建的集群,软件包天然选用phoenix--cdh.jar
而我本人的环境,无论是HDFS,或是ZK以及HBase都是一一扩大上来的,而版本号,并没有什么偏好
hadoop-2.9.2
hbase-1.3.1
zookeeper-3.4.14Phoenix官网列出的软件包如下:
显然apache-phoenix-4.14.3-HBase-1.3的版本更适宜我的环境,果决替换重搞
再次替换jar包、重试链接,果然连贯胜利,妥了[root@linux123 bin]# ./sqlline.py linux123:2181
Setting property: [incremental, false]
Setting property: [isolation, TRANSACTION_READ_COMMITTED]
issuing: !connect jdbc:phoenix:linux123:2181 none none org.apache.phoenix.jdbc.PhoenixDriver
Connecting to jdbc:phoenix:linux123:2181
21/08/20 18:15:05 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
Connected to: Phoenix (version 4.14)
Driver: PhoenixEmbeddedDriver (version 4.14)
Autocommit status: true
Transaction isolation: TRANSACTION_READ_COMMITTED
Building list of tables and columns for tab-completion (set fastconnect to true to skip)...
133/133 (100%) Done
Done
sqlline version 1.2.0
The End
produced by yaong !