HBase - 解決HBase Client無法連接遠程HBase Server問題


1,問題描述

(1)在遠程服務器上搭建了個HBase 服務,並且在服務器上使用 hbase shell 命令行工具可以成功進行建表、插入數據、查詢數據等操作。
(2)但是發現在項目中使用 HBase Client 能夠成功與 Zookeeper 連接,卻無法與 HBase Server 連接,錯誤信息如下:

2,問題原因

(1)HBase 啟動之后會將 Master 的信息存儲在 Zookeeper 的 /hbase/master 中,然后 HBase Client 連接到 Zookeeper 后首先會從 Zookeeper 中獲取 Master 的 IP 和端口信息,然后才和 Master 建立連接。
(2)但是 /hbase/master 存儲的可能是一個別名(例如 localhost 或者其他),如果客戶端拿到 localhost 或者其他沒有記錄在 hosts 的別名,那么客戶端將會無法連接到 HBase Server。
(3)從上面截圖可以看到,訪問的別名確實是 hostname=localhost,那么自然無法連接成功。通過 HBase 的 Web UI 也可以看到 Server 確實是 localhost:

3,解決辦法

(1)首先登錄服務器,執行如下命令將主機名字改成 master(改成其他也行,只要不是 localhost)

hostnamectl set-hostname master

(2)接着執行如下命令編輯 /etc/hosts 文件:

vim /etc/hosts

(3)將 127.0.0.1 的別名設置為 master:或者自己外網ip 對應master

(4)保存退出后重啟服務器,可以看到主機名已經變成 master 了:

 (5)通過 HBase 的 Web UI 也可以看到 ServerName 也變成了 master: 

 

(6)服務器設置完畢后,本機客戶端的 hosts 文件加上也要加上 HBase 服務器對應的 hosts,這樣客戶端就可以連上 HBase 服務了:
C:\Windows\System32\drivers\etc   
81.68.xx.xx master   此處為外網ip
 

注意如果一直連不上可以注釋掉linux上外網對應 master的映射 

127.0.0.1 localhost.localdomain localhost
127.0.0.1 localhost4.localdomain4 localhost4
#81.68.xx.xx master

#::1 VM-16-6-centos VM-16-6-centos
::1 localhost.localdomain localhost
::1 localhost6.localdomain6 localhost6

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM