windows java訪問虛擬機器中的hbase
為了演示hbase的相關操作,我在windows7中安裝了虛擬機器vmware,在虛擬中安裝了hadoop和hbase
環境
具體環境如下
windows 7
vmware 12 使用 centos 6.5
hbase 1.2.4 和 hadoop 2.5
檢視hbase-site.xml
hbase的配置如下,見hbase-site.xml
<property>
<name>hbase.zookeeper.quorum</name>
<value>bigdata</value>
</property >
這是因為我們將hostname設定為bigdata。大部分情況下,預設是localhost。
設定hostname
可以通過下面的方法來設定hostanme
$ vim /etc/sysconfig/network
NETWORKING=yes
HOSTNAME=bigdata
然後執行shell$ hostname bigdata
再執行shell$ hostname
檢視是否設定成功
設定完hostname,還需要繫結IP對映
$ vim /etc/hosts
127.0.0.1 localhost
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 bigdata # add bigdata
127.0.0.1 bigdata # add bigdata
其中::1 ,標識IPV6的地址
接著啟動 hbase
- start hdfs
- start yarn
- start zookeeper
- start hbase
在虛擬機器中,我們可以確認hbase是否啟動成功,比如檢查http://bigdata:16010檢視master狀態
在windows中檢視vmware中的hbase狀態
bind
為了固定虛擬機器的IP地址,使用NAT模式。在虛擬機器中,操作以下三個步驟即可
之後進入虛擬機器的命令列,檢視虛擬機器的ip地址,檢視結果項eth0中的inet addr我這裡是192.168.17.128
shell $ ifconfig
我們可以在windows環境中ping通 192.168.17.128。
或者通過http://192.168.17.128:16010檢視hbase-master的頁面,但是不可以直接訪問http://bigdata:16010.
接下來,可以這樣設定
然後 vim /etc/hosts
增加一行
127.0.0.1 localhost
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 bigdata # add bigdata
127.0.0.1 bigdata # add bigdata
192.168.17.128 bigdata # new add here
JAVA讀寫Hbase
程式碼模組
在windows環境中,編寫了如下程式碼,用於操作hbase
public class HBaseLoad {
public static Configuration getHBaseConfiguration() {
Configuration conf = HBaseConfiguration.create();
// conf.set("hbase.zookeeper.quorum", "192.168.17.128");
conf.set("hbase.zookeeper.quorum", "bigdata");
// conf.set("hbase.master","192.168.17.128:16010");
conf.set("zookeeper.znode.parent", "/hbase");
System.out.println("+++");
return conf;
}
public static void get(Configuration conf) throws Exception {
Connection connection = null;
connection = ConnectionFactory.createConnection(conf);
Table table = connection.getTable(TableName.valueOf("scores"));
System.out.println("-----");
Get get = new Get(Bytes.toBytes("row03106"));
get.addColumn(Bytes.toBytes("course"), Bytes.toBytes("math"));
// get.addColumn(Bytes.toBytes("profile"), Bytes.toBytes("name"));
Result result = table.get(get);
System.out.println("-----");
while (result.advance()) {
System.out.println(result.current());
}
table.close();
connection.close();
}
執行的時候,發現卡住很久,沒有任何響應。很長時間後程序會報connection fail。
解決方法
- 在windows修改hosts檔案
路徑如下: C:\Windows\System32\drivers\etc\hosts
新增:
# localhost name resolution is handled within DNS itself.
# 127.0.0.1 localhost
# ::1 localhost
127.0.0.1 sls.microsoft.com
192.168.17.128 bigdata # new add
- 修改vmware中的centos的hosts檔案
vim /etc/hosts
# 127.0.0.1 localhost
#::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 bigdata
#127.0.0.1 bigdata
192.168.17.128 bigdata localhost
參考如下
Hbase client do not able to connect with remote Hbase server
之前,在百度搜了好幾種方法,比如包括修改/etc/sysconfig/network-scripts/ifcfg-eth0,都是不必要的。要保證上述程式碼在windows中能訪問vmware中hbase的一個檢驗標誌就是。 在windows瀏覽器當中,訪問http://bigdata:16010的時候,出現下圖,即顯示hbase的地址是我們設定的hostname。
特別注意:(可能需要重啟centos中的hbase)
如果上面的修改沒有生效,上圖中的預設顯示是localhost。對比上面stackoverflow的參考文件裡邊的解釋。使用localhost的時候,hbase的訪問程式碼會卡住,並最終報錯。
我個人的情況是,經過上述的修改(windows/centos中的hosts檔案)之後,並沒有直接生效,而是重啟了vmware中的hdfs/yarn/zookeeper/hbase,然後才有了上面這張圖。
另外,要注意寫程式碼的hbase的依賴包,和vmware/centos中hbase的jar包版本號最好一致。