2015-10-15 75 views
1

當我嘗試部署我的拓撲結構捆綁作爲脂肪罐子到遠程集羣的ClassNotFoundException。罐子可以成功地部署,但部署的時候,我看到在工人日誌以下錯誤:它說,如下圖所示阿帕奇風暴:部署罐子remoteCluster

enter image description here

,我提交到已經聚集罐子也找不到JpaRepository類包含這個類,但。我從羣集複製的罐子,看到它的內容,這裏是我所看到的

enter image description here

會很感激,如果ü的任何人有NY知道爲什麼是這樣的失敗,因爲我沒有任何線索,如何進行進一步對此。我已經在class上部署了jar,但仍然說classNotFound:((。在本地集羣上一切正常)

另一件事: - 我上傳的Jar是68MB(稍重一點)。任何與此??

+0

你通過'風暴jar'命令提交'彈簧數據的JPA-1.6.4.RELEASE.jar'?作爲一個除了構建一個fat jar之外,還可以手動將依賴項jar複製到'STORM_HOME/lib'中(當然在你的每臺機器上)。你可能需要重新啓動集羣才能讓Storm拿起罐子。 –

+0

我沒有提交使用風暴jar命令...我從我的Eclipse提交使用Nimbus Client:=> Map storm_conf = Utils.readStormConfig(); storm_conf.put(Config.NIMBUS_HOST,「130.211.244.139」); 字符串罐子= 「/Users/agarg/Documents/notificationRepo/apache-storm/build/libs/apache-storm-SNAPSHOT-ns.r134-boot.jar」; NimbusClient nimbus = new NimbusClient(storm_conf,「130.211.244.139」,6627); String uploadedJarLocation = StormSubmitter.submitJar(storm_conf,jar); –

+0

另外,我只有一個單節點集羣儀式現在... –

回答

2

如果你通過Eclipse提交你應該爲以下內容:

public static void main(String[] args) { 
    TopologyBuilder b = new TopologyBuilder(); 
    // build your topology 
    b.setSpout(...); 
    b.setBolt(...); 

    Config c = new Config(); 
    c.put(Config.NIMBUS_HOST, "130.211.244.139"); 
    // not sure you you use 6627; 6123 is default port; if you change the port, just use 6627 of course 
    c.put(Config.NIMBUS_THRIFT_PORT, new Integer(6123)); 

    StormSubmitter.submitTopology("myTopolgyName", conf, b.createTopology()); 
} 

此外,你需要指定JVM參數-Dstorm.jar=/Users/agarg/Documents/notificationRepo/apache-storm/build/libs/apache-storm-SN‌​APSHOT-ns.r134-boot.jar

如果你想避免包括傳遞。依賴關係你也可以將它們手動複製到Storm的lib文件夾中。當然,你需要把它們複製到所有的機器上。您還可能需要重新啓動羣集。你可以複製儘可能多的罐子到lib文件夾 - Storm將「拾取」所有這些文件夾。

此外,如果生成一個脂肪罐子,從屬罐子不能嵌套到遙遠的罐(即,取決於罐的所提取的內容必須被包括在遠罐)。例如,您的依賴jar dep.jar包含文件DClass.class;因此,你的fat jar不能包含「dep.jar」(既不在頂層也不在「lib」文件夾中),但所有Spout和Bolt類旁邊必須包含「DClass.class」(即「DClass.class」罐子內的頂層文件夾。當然,你還需要尊重的封裝結構,也就是說,如果「dep.jar」包含文件dpackage.DClass2(文件夾「dpackage」,即「DClass2.class」)遠的jar必須包含包含「DClass2.class」目錄「dpackage」(在罐子內的頂級文件夾)。

+0

感謝馬蒂亞斯..所以現在我手動部署罐子裏,它似乎是工作(我每次現在越來越不同ClassNotFoundException的:))..However,這是很不理想solution..Ideally,我想一個胖jar爲我做的工作,在所有節點上重複相同的操作是一項繁瑣而痛苦的任務。所以,這樣設計的風暴還是可以修復的bug? –

+0

您可以構建一個遠程jar,並在其中包含所有依賴項以避免手動將依賴jar複製到'lib'文件夾。在你的例子中,所有的依賴必須包含在'apache-storm-SN APSHOT-ns.r134-boot.jar'中。你只需要確保fat jar不包含依賴項作爲'jar'文件 - Storm不能處理嵌套的jar文件。 –

+0

其實,我couldnot明白你的意思在這裏...我相信我在做..The脂肪罐子有所有的依賴作爲單獨的lib文件夾罐子一樣的東西。讓我給我的apache-storm-SN APSHOT-ns.r134-boot.jar附上一張圖片來詳細說明。可能那時我會明白你的意思 –