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!