職位畫像中phoenix連結HBase異常之版本不匹配

joytoy發表於2021-09-09

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查詢
  • 最佳化主鍵來均勻分佈寫壓力

接下來就分享下我遇到的問題的表象,以及問題產生的原因,以及解決辦法:

按照教程的引導:

  1. 下載安裝包,並解壓
  2. 複製hbase-site.xml、core-site.xml、hdfs-site.xml
  3. 啟動HBase叢集
  4. 開啟連結,報了一堆錯誤,然後看似是開啟了互動模式,然後嘗試查表命令,顯然還是不能用的

[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.14

[Phoenix官網]列出的軟體包如下:
圖片描述
顯然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

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/4650/viewspace-2797268/,如需轉載,請註明出處,否則將追究法律責任。

相關文章