在CDH 5.7集群上升级Phoenix,原来是4.7.1,现在打算升级4.8.1。
步骤就按照官方文档上的说明,首先下载4.8.1的bin压缩包,解压后把server.jar(为了保险把core和client)放到hbase的lib目录下替换原有的4.7.1 jar包。CDH环境下是/opt/cloudera/parcels/CDH/lib/hbase/lib。
最后重启hbase。
配置文件。
将hbase的配置文件hbase-site.xml 放到phoenix/bin下,替换Phoenix原来的 配置文件。在bin目录下运行./sqlline.py master:2181,结果出现
Cluster is being concurrently upgraded from 4.7.x to 4.8.x. Please retry establishing connection. (state=INT12,code=2010)错误。
用谷歌搜了下,结果就在Phoenix的jira上有一个patch,在4.9.0上fix了,具体地址是
https://issues.apache.org/jira/browse/PHOENIX-3174
按照他上面的说明这个是4.9.0遇到的问题,在4.8.1上按照他那两个solution都没有解决。
但确定这个是小版本升级的问题。每个版本在HBase的System.Catalog里应该会留下记录。启动时检查版本不兼容。
堆栈信息:
org.apache.phoenix.query.ConnectionQueryServicesImpl$UpgradeInProgressException: Cluster is being concurrently upgraded from 4.7.x to 4.8.x. Please retry establishing connection.
at org.apache.phoenix.query.ConnectionQueryServicesImpl$13.acquireUpgradeMutex(ConnectionQueryServicesImpl.java:2782)
at org.apache.phoenix.query.ConnectionQueryServicesImpl$13.call(ConnectionQueryServicesImpl.java:2357)
at org.apache.phoenix.query.ConnectionQueryServicesImpl$13.call(ConnectionQueryServicesImpl.java:2294)
at org.apache.phoenix.util.PhoenixContextExecutor.call(PhoenixContextExecutor.java:76)
at org.apache.phoenix.query.ConnectionQueryServicesImpl.init(ConnectionQueryServicesImpl.java:2294)
at org.apache.phoenix.jdbc.PhoenixDriver.getConnectionQueryServices(PhoenixDriver.java:232)
at org.apache.phoenix.jdbc.PhoenixEmbeddedDriver.createConnection(PhoenixEmbeddedDriver.java:147)
at org.apache.phoenix.jdbc.PhoenixDriver.connect(PhoenixDriver.java:202)
at sqlline.DatabaseConnection.connect(DatabaseConnection.java:157)
at sqlline.DatabaseConnection.getConnection(DatabaseConnection.java:203)
at sqlline.Commands.connect(Commands.java:1064)
at sqlline.Commands.connect(Commands.java:996)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at sqlline.ReflectiveCommandHandler.execute(ReflectiveCommandHandler.java:36)
at sqlline.SqlLine.dispatch(SqlLine.java:803)
at sqlline.SqlLine.initArgs(SqlLine.java:588)
at sqlline.SqlLine.begin(SqlLine.java:656)
at sqlline.SqlLine.start(SqlLine.java:398)
at sqlline.SqlLine.main(SqlLine.java:292)
没有仔细研究代码。
最后下载了个4.8.0的压缩包,用4.8.0的sqlline做client运行,连接成功。