我想將兩個文件發送到hadoop reducer。 我試過分佈式緩存,但是我在主要使用addCacheFile的任何東西似乎都沒有在映射器中返回給getLocalCacheFiles。多次輸入到hadoop中的映射器
現在我正在使用FileSystem來讀取文件,但我正在本地運行,因此我只能發送文件的名稱。想知道如果我在真正的hadoop系統上運行,該怎麼做。
是否有將值發送給mapper除了它正在讀取的文件?
我想將兩個文件發送到hadoop reducer。 我試過分佈式緩存,但是我在主要使用addCacheFile的任何東西似乎都沒有在映射器中返回給getLocalCacheFiles。多次輸入到hadoop中的映射器
現在我正在使用FileSystem來讀取文件,但我正在本地運行,因此我只能發送文件的名稱。想知道如果我在真正的hadoop系統上運行,該怎麼做。
是否有將值發送給mapper除了它正在讀取的文件?
我也有很多與分配緩存的問題,以及發送參數。選擇工作對我來說是如下:
對於分佈式緩存使用: 對我來說是一場噩夢,以便獲得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.
如果需要分佈式緩存套件 - 這是一種方法。
getLocalCacheFiles在本地模式和分佈式模式下的工作方式不同。 (它實際上不能在本地模式下工作)。
看看這個鏈接:http://developer.yahoo.com/hadoop/tutorial/module5.html 看的短語:作爲一個謹慎注意:
HDFS我想應該是FSDataInputStream,因爲你打開了文件。但我仍然沒有找到文件 - 儘管如此,我確實覺得我有點接近它。謝謝 – 2012-02-05 14:26:26
應該新配置()是context.getConfiguration()? – 2012-02-05 14:28:48
對於hdfs是的,你可以嘗試FSDataInputStream,你也可以嘗試像這樣訪問hdfs:// ... – Anton 2012-02-05 20:02:30