標籤:

jstorm中用CuratorFramework訪問zookeeper出現的奇怪情況?

最近公司打算上jstorm,於是想自己搭建個jstorm,然後蛋疼的事情就發生了(菜鳥上手真的是各種曲折啊).

1,先上詭異的日誌截圖

看日誌的意思是,supervisor下載代碼ok了,但是同步的時候出現問題.

然後我看到他要訪問7627這個埠,我就很納悶,這個埠從哪裡來的.

2,於是滾去翻源碼了,測試代碼如下:

public class ZookeeperTest {

@SuppressWarnings("unchecked")

public static void main(String[] args) {

Map& storm_conf = Utils.readStormConfig();

storm_conf.put(Config.STORM_ZOOKEEPER_SERVERS, Arrays.asList("101.226.254.65","101.226.254.73","101.231.74.36"));

storm_conf.put(Config.STORM_ZOOKEEPER_PORT,2181);

String root = String.valueOf(storm_conf

.get(Config.STORM_ZOOKEEPER_ROOT));

String zkMasterDir = root + "/nimbus_master";

CuratorFramework zkobj = null;

zkobj = Utils.newCurator(storm_conf,

(List&) storm_conf.get(Config.STORM_ZOOKEEPER_SERVERS),

storm_conf.get(Config.STORM_ZOOKEEPER_PORT), zkMasterDir);

zkobj.start();

try {

String masterHost = new String(zkobj.getData().forPath("/"));

System.out.println(masterHost);

} catch (Exception e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

}

發現他的輸出確實是localhost:7627,但是我用zkCli.sh查看了一下,貌似沒有這個字元串啊.

跪求大神耐心解答.


我來回答吧。

先說問題的根本原因是什麼:

(1) 原因是, 題主的nimbus機器 主機名設置不正確(/etc/hosts或網卡配置設置有問題, 運行hostname就會發現), nimbus啟動後,必須將自己的機器名註冊到zk中,但題主的nimbus獲取主機名失敗,因此註冊到ZK 的hostname是localhost, 當supervisor連接nimbus時,拿到的是"localhost", 因此不可能成功連接nimbus

解決辦法:

(1) 樓主用的版本不是0.9.6.3, 用的是低版本jstorm, 如果用0.9.6.3 , 應該不會有這個問題,自0.9.6.3 後, 底層所有的通信使用IP 進行通信, 然後在web ui上進行展示hostname

(2)重新配置機器的hostname, 請baidu 搜索如何設置機器 hostname, 這裡不做詳細介紹


推薦閱讀:

豌豆實驗室的Codis(分散式Redis)與自己用Zookeeper+Redis組網,有什麼區別?
Zookeeper 和 Chubby 有哪些不同點?
Zookeeper vs Chubby
zookeeper與keepalived的高可用區別?
zookeeper在dubbo到底起了什麼作用,dubno如何解決了阿里的高並發問題?

TAG:ZooKeeper |