2012-02-05 67 views
1

我想將兩個文件發送到hadoop reducer。 我試過分佈式緩存,但是我在主要使用addCacheFile的任何東西似乎都沒有在映射器中返回給getLocalCacheFiles。多次輸入到hadoop中的映射器

現在我正在使用FileSystem來讀取文件,但我正在本地運行,因此我只能發送文件的名稱。想知道如果我在真正的hadoop系統上運行,該怎麼做。

是否有將值發送給mapper除了它正在讀取的文件?

回答

0

我也有很多與分配緩存的問題,以及發送參數。選擇工作對我來說是如下:

對於分佈式緩存使用: 對我來說是一場噩夢,以便獲得url /路徑在地圖上HDFS文件或降低,但與符號鏈接它在運行工作 ()的方法作業

DistributedCache.addCacheFile(new URI(file+"#rules.dat"), conf); 
DistributedCache.createSymlink(conf); 

,然後在地圖讀取或報頭減少 ,方法

public static FileSystem hdfs; 

之前和地圖然後在設置()方法或減少

hdfs = FileSystem.get(new Configuration()).open(new Path ("rules.dat")); 

對於參數: 發送一些值映射或減少(可能是文件名從HDFS打開):

public int run(String[] args) throws Exception { 
    Configuration conf = new Configuration(); 
    ... 
    conf.set("level", otherArgs[2]); //sets variable level from command line, it could be a filename 
    ... 
} 

然後在地圖或只是減少類:

int level = Integer.parseInt(conf.get("level")); //this is int, but you can read also strings, etc. 
+0

HDFS我想應該是FSDataInputStream,因爲你打開了文件。但我仍然沒有找到文件 - 儘管如此,我確實覺得我有點接近它。謝謝 – 2012-02-05 14:26:26

+0

應該新配置()是context.getConfiguration()? – 2012-02-05 14:28:48

+0

對於hdfs是的,你可以嘗試FSDataInputStream,你也可以嘗試像這樣訪問hdfs:// ... – Anton 2012-02-05 20:02:30

0

如果需要分佈式緩存套件 - 這是一種方法。

getLocalCacheFiles在本地模式和分佈式模式下的工作方式不同。 (它實際上不能在本地模式下工作)。

看看這個鏈接:http://developer.yahoo.com/hadoop/tutorial/module5.html 看的短語:作爲一個謹慎注意: