我想将两个文件发送到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