继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

读者来信 | 刚搭完HBase集群,Phoenix一启动,HBase就全崩了,是什么原因?(已解决)

禅克
关注TA
已关注
手记 19
粉丝 2
获赞 4

来信人:于*超

小猿提问

刚搭完HBase集群,Phoenix一启动,HBase的Region节点就全崩溃了,是什么原因?

小猿分析

报错如下:

java.sql.SQLException: ERROR 2006 (INT08): Incompatible jars detected between client and server. Ensure that phoenix.jar is put on the classpath of HBase in every region server: org.apache.hadoop.hbase.exceptions.UnknownProtocolException: No registered coprocessor service found for name MetaDataService in region SYSTEM.CATALOG,,1421861120199.56856673d5cff02b55b9ff5955485dba.
    at org.apache.hadoop.hbase.regionserver.HRegion.execService(HRegion.java:5579)
    at org.apache.hadoop.hbase.regionserver.HRegionServer.execServiceOnRegion(HRegionServer.java:3416)
    at org.apache.hadoop.hbase.regionserver.HRegionServer.execService(HRegionServer.java:3398)
    ... more
Caused by: org.apache.hadoop.hbase.exceptions.UnknownProtocolException: org.apache.hadoop.hbase.exceptions.UnknownProtocolException: No registered coprocessor service found for name MetaDataService in region SYSTEM.CATALOG,,1421861120199.56856673d5cff02b55b9ff5955485dba.
    at org.apache.hadoop.hbase.regionserver.HRegion.execService(HRegion.java:5579)
    at org.apache.hadoop.hbase.regionserver.HRegionServer.execServiceOnRegion(HRegionServer.java:3416)
    ... more
Caused by: org.apache.hadoop.hbase.ipc.RemoteWithExtrasException(org.apache.hadoop.hbase.exceptions.UnknownProtocolException): org.apache.hadoop.hbase.exceptions.UnknownProtocolException: No registered coprocessor service found for name MetaDataService in region SYSTEM.CATALOG,,1421861120199.56856673d5cff02b55b9ff5955485dba.
    at org.apache.hadoop.hbase.regionserver.HRegion.execService(HRegion.java:5579)
    at org.apache.hadoop.hbase.regionserver.HRegionServer.execServiceOnRegion(HRegionServer.java:3416)
    ... 14 more

我们首先分析一点:Phoenix启动HBase就挂,而Phoenix基于HBase协处理器做了很多工作,很明显HBase单独启动没问题,走到协处理器这一步就报错,一定不是HBase端的问题,也一定是没有设定下面的参数为False。

# hbase-site.xml
<property>
    <name>hbase.coprocessor.abortonerror</name>
    <value>false</value>
</property>

一般我们应用HBase协处理器技术,首先要将其设为False。这个是什么意思呢?意思就是当加载于HBase之上的协处理器异常时要不要abort Hbase。那肯定是不要,总不能加载了一个协处理器将整个集群搞挂了,毕竟手写协处理器代码难免有bug。

我们设置该参数后,重启HBase再启动Phoenix,这回HBase没事了,但是Phoenix依然报上面的错误,为什么呢?请看下文的小猿解答。

小猿解答

其实看到这个异常的第一眼,总感觉是Phoenix与HBase不兼容,网上的答案也大都是不兼容,又特地看了一下HBase版本,确实没有问题。导致这个问题的因素可能有很多,比如版本不兼容就是一个,这里就不兜圈子了,直接曝光下这回遇到的这个问题的导致因素是什么。

最终找到的原因是:将Phoenix压缩包下几乎所有的jar包都拷贝到了HBase/lib目录下,造成了包冲突。而官网只是要求将Phoenix-version-server.jar拷贝到HBase/lib目录下。

To install a pre-built phoenix, use these directions:

  • Download and expand the latest phoenix-[version]-bin.tar.
  • Add the phoenix-[version]-server.jar to the classpath of all HBase region server and master and remove any previous version. An easy way to do this is to copy it into the HBase lib directory (use phoenix-core-[version].jar for Phoenix 3.x)
  • Restart HBase.
  • Add the phoenix-[version]-client.jar to the classpath of any Phoenix client.

很简单的4步操作,相比老版本真的简单了许多。所以这里还是建议大家还是以官网的教程为主,网络教程为辅,除了能少入坑,也能学到真东西,有助于融会贯通。这也是本文着重想申明的一点,千万不要照葫芦画瓢,毕竟一个相同的问题可能会有多个不同的诱因~

打开App,阅读手记
1人推荐
发表评论
随时随地看视频慕课网APP