首頁 > 軟體

解決Java API不能遠端存取HBase的問題

2022-06-15 18:02:34

Java API不能遠端存取HBase

今天我在虛擬機器器裡面安裝了Hbase 1.2.4,說在windows上Java API呼叫存取下玩玩,結果始終連線不上。

現象是啟動程式後,程式出現卡死的狀態,沒報錯也不停止,大約半分鐘後才列印一堆紀錄檔出來,說連線重試了多次也連線不上,截圖如下:

這個問題糾結了我半天,一檢視發現HBase繫結的是本地IP:127.0.0.1,這當然存取不了

然後我想可以把HBase的繫結在指定IP上,去查Hbase官網,卻沒有這樣的設定項

後面百度下,發現HBase的這個問題要特殊處理

分下面三步走,即可存取

1、設定Linux的hostname

2、設定Linux的hosts,對映ip的hostname的關係

3、設定存取windows的hosts

設定Llinux的hostname和hosts,這樣HBase啟動的時候,就會自動把HBase繫結到Linux域名對應的ip上去

設定Linux的hostname

這裡設定的hostname要Linux重啟才生效,為了不重啟就生效,我們可以執行:hostname master命令,暫時設定hostname

設定Linux的hosts

對映ip的hostname的關係

設定完Linux的這兩項,啟動HBase就發現HBase繫結到了我們想暴露的ip上了

設定存取windows的hosts

路徑為:C:WindowsSystem32driversetchosts

設定完這三項Java API就可以遠端存取HBase了,切記最後設定windows的hosts也是必須的

最後附上Java程式碼範例

package priv.tuyou.HBase;
import java.io.IOException;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.HColumnDescriptor;
import org.apache.hadoop.hbase.HTableDescriptor;
import org.apache.hadoop.hbase.TableName;
import org.apache.hadoop.hbase.client.Admin;
import org.apache.hadoop.hbase.client.Connection;
import org.apache.hadoop.hbase.client.ConnectionFactory;
 
/**
 * HBase 1.2.4
 * @author:塗有
 * @date 2017年7月12日 下午2:17:44
 */
public class HBase {
	
	public static Configuration conf;
	public static Connection connection;
	public static Admin admin;
 
	public static void main(String[] args) throws IOException {
 
		conf = HBaseConfiguration.create();
		conf.set("hbase.master", "192.168.142.129:16000");
		
		connection = ConnectionFactory.createConnection(conf);
		admin = connection.getAdmin();
		
		HTableDescriptor table = new HTableDescriptor(TableName.valueOf("table1"));
		table.addFamily(new HColumnDescriptor("group1")); //建立表時至少加入一個列組
		
		if(admin.tableExists(table.getTableName())){
			admin.disableTable(table.getTableName());
			admin.deleteTable(table.getTableName());
		}
		admin.createTable(table);
	}
 
}

POM檔案,依賴HBase-client庫

	<dependencies>
		<!-- https://mvnrepository.com/artifact/org.apache.hbase/hbase-client -->
		<dependency>
		    <groupId>org.apache.hbase</groupId>
		    <artifactId>hbase-client</artifactId>
		    <version>1.2.4</version>
		</dependency>
	</dependencies>

Java API連線HBase問題

圖1-1

使用Java api連線hbase,出現了圖1-1的錯誤。

一般情況下需要先檢查虛擬中程序是否完整,然後再檢查api中的建立連線部分,看虛擬機器器IP地址和埠號是否正確,經過檢查後,發現沒有問題。

經過查閱資料後,window環境變數的使用者環境變數中需要新增HADOOP_USER_NAME的設定,具體設定如圖1-2所示,設定完成後點選確定,重啟elipese即可解決上述問題。

圖1-2

以上為個人經驗,希望能給大家一個參考,也希望大家多多支援it145.com。


IT145.com E-mail:sddin#qq.com