2014-03-25 28 views
2

我在本地節點CentOS上運行Hadoop 2.2.0.2.0.6.0-101。打包和部署Hadoop MapReduce作業的正確方法?

當我在Eclipse項目中包含從/usr/lib/hadoop/usr/lib/hive作爲依賴關係的必需jar時,My MapReduce作業在Eclipse中編譯。找到必需的罐子是一個真正的追求!而grep是我這項工作的唯一工具,像grep -ri -l "FacebookService" /usr/lib/hadoop

雖然我在嘗試在編譯它的同一本地節點上運行我的應用程序時遇到了異常。我放棄嘗試尋找必要的罐子 - 在一個例外被修復之後出現一個新的瓶子。

現在,從/usr/lib/hadoop/usr/lib/hive加入罐後有固定的約10例外我有一個真正的好一個:

java.io.IOException: Cannot initialize Cluster. Please check your configuration for mapreduce.framework.name and the correspond server addresses.

有趣的部分:當我添加所有罐子從這些目錄我的程序運行!

最後一個解決方案在我的情況下不起作用,因爲我需要創建自足的包來在另一個分佈式Hadoop安裝上運行我的應用程序。

部署Hadoop MapReduce作業的正確方法是什麼? 我應該如何設置Hadoop CLASSPATH以在任何節點上運行MapReduce作業?

+0

使用maven構建並擁有來自Jackson的JSON庫的依賴關係。 Jar在我們的集羣上部署得很好。你確定你的設置配置正確嗎? – Vishal

回答

0

重申Vishal的建議:使用Maven進行依賴關係管理。對於MR項目(簡單的)典型的Maven的pom.xml看起來是這樣的:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 
<modelVersion>4.0.0</modelVersion> 
<groupId>com.test</groupId> 
<artifactId>hadoop.test</artifactId> 
<version>0.0.1-SNAPSHOT</version> 
<dependencies> 
    <dependency> 
     <groupId>org.apache.hadoop</groupId> 
     <artifactId>hadoop-client</artifactId> 
     <version>2.0.0-cdh4.2.0</version> 
     <scope>provided</scope> 
    </dependency> 
</dependencies> 

那美女:Hadoop的客戶端封裝了所有的依賴關係。

來到運行生成jar文件的問題:

你可以有2種情況:

  1. 的M/C你想運行在羣集即Hadoop的一部分安裝和配置。在這種情況下,命令「hadoop jar <>」應該包含所有hadoop相關的依賴關係。你將不得不添加你的依賴瓶子。

  2. 該m/c沒有安裝hadoop。在這種情況下,您可以使用maven通過檢查有效的POM來獲取罐子的列表。

希望很清楚。