2014-11-06 28 views
1

我正在爲Hadoop創建一個應用程序,該應用程序應該運行在不同供應商提供的所有Hadoop發行版上,如:Cloudera,MapR,Hortonworks,Pivotal等。我的應用程序將部署在WebLogic,JBoss等應用程序服務器上,也可以部署在tomcat上。 所以我在這裏的問題是: - 假設所有這些供應商的某些版本使用相同的底層Hadoop版本Hadoop 2.0,那麼我應該使用這些供應商提供的JAR文件還是使用Apache hadoop提供的JAR文件?使用Apache Hadoop JAR文件或供應商特定?

我的意思是有相同的類作爲Apache的Hadoop的,但有他們在他們喜歡blablaCDH5.2blabla.jar名的JAR文件,所以我應該使用這一個或一個來自Apache的?因此,我可以爲Hadoop 2.0構建單一版本並將其用於所有供應商。可以做到這一點,或者我必須爲所有供應商發行版構建不同風格的應用程序。

在此先感謝

+1

從我的經驗來實現你將不得不爲每個單獨的分佈建設。你不能指望某些類和功能在所有不同的罐子裏都是一樣的。 – itzhaki 2014-11-06 09:26:08

+0

好的,謝謝@itzhaki .. – Harinder 2014-11-06 11:07:01

回答

1

這取決於你是如何深入到Hadoop的API螺紋。

如果你的應用程序只提交作業到羣集,則很可能與香草庫OK,只要你堅持一個特定版本。如果你正在做先進的東西並使用hadoop內部,可能有必要包含供應商特定的內容。

+0

我明白了,所以與供應商特定的更安全。因爲我可能會使用某些功能,供應商可能會根據他們的要求進行更改。 – Harinder 2014-12-26 13:04:09

+0

如果你不難生產出不同風味的應用程序,那麼這是更安全的方法。另外請注意,供應商從不添加他們自己的更改hadoop代碼(至少我從來沒有聽說過這種情況發生),但只是從新版本移植補丁才能實現新功能。 – miljanm 2014-12-26 13:10:36

+0

你可以給我一個例子,當你說使用hadoop內部結構 – Harinder 2014-12-26 13:24:56

0

丹尼斯,你可以使用Apache的Hadoop的提供罐子,因爲所有的人都被修改Apache的Hadoop的形式構建應用程序。這些所有發行版具有相同的基線結構,因此使用Apache hadoop提供的jar不會產生任何問題。 實際上,我爲您提供了鏈接,它們使用的是Apache Hadoop本身提供的jar。 This the required link.

+1

這不提供問題的答案。要批評或要求作者澄清,在他們的帖子下留下評論 - 你總是可以評論你自己的帖子,一旦你有足夠的[聲譽](http://stackoverflow.com/help/whats-reputation),你會能夠[評論任何帖子](http://stackoverflow.com/help/privileges/comment)。 – 2014-12-24 21:21:09

+0

感謝您的建議。但我從我的經驗中得知。請糾正我在哪裏我錯了 – phoenix 2014-12-25 06:23:58

2

的一種方法,它可以根據你的版本控制略有不同,構建系統,將有使用來自不同分佈的依賴單獨構建腳本。

當測試用例失敗對於一個給定的分佈,你可以擁有該分配,或者可能不太理想的一個分支/叉,有一個特定的構建,做一些預構建的魔法爲分佈。

這樣,你應該能夠同時能夠跟蹤和處理所出現的供應商/版本具體分佈前進的問題保持一致的樹幹。使用git和大多數構建系統(例如gradle,maven或ant)這絕對是可能的。

2

您可以創建一個墊片層,允許您的應用程序使用任何hadoop發行版運行。由於大多數發行版都有不同的hadoop版本,因此處理此問題非常困難。因此,大多數供應商現在都在創建墊片圖層可工作與任何的hadoop distribution.Shim層現在已經在許多應用,如Pentaho的,蜂房,山等