1. 程式人生 > >windows java訪問虛擬機器中的hbase

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。

解決方法

  1. 在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

  1. 修改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包版本號最好一致。