1. 程式人生 > >讀者來信 | 剛搭完HBase叢集,Phoenix一啟動,HBase就全崩了,是什麼原因?(已解決)

讀者來信 | 剛搭完HBase叢集,Phoenix一啟動,HBase就全崩了,是什麼原因?(已解決)

> **前言:**之前有朋友加好友與我探討一些問題,我覺得這些問題倒挺有價值的;於是就想在本公眾號開設一個問答專欄,方便技術交流與分享,專欄名就定為:**《讀者來信》**。如遇到本人能力有限難以解決的問題,我將轉發該文至我的資源圈盡力尋求大佬們出手幫助,並附上提問者微信二維碼,希望給大家提供這樣一個互幫互助解決問題的平臺。也誠摯地歡迎大家能在留言區積極探討解決方案,大膽發表自己的看法~ # 來信人:於*超 ## 小猿提問 > 剛搭完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 ``` 一般我們應用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步操作,相比老版本真的簡單了許多。所以這裡還是建議大家還是以官網的教程為主,網路教程為輔,除了能少入坑,也能學到真東西,有助於融會貫通。這也是本文著重想申明的一點,千萬不要照葫蘆畫瓢,畢竟一個相同的問題可能會有多個不同的誘因~ ![掃描二維碼關注博主公眾號](https://img2020.cnblogs.com/other/1001353/202004/1001353-20200406110808019-1069922195.png) > 轉載請註明出處!歡迎關注本人微信公眾號【HBase工作