hadoop中Mapper的多个输入



我正在尝试将两个文件发送到hadoop reducer。我尝试了DistributedCache,但我在main中使用addCacheFile放置的任何内容似乎都无法通过映射器中的getLocalCacheFiles返回。

现在我正在使用FileSystem读取文件,但我在本地运行,所以我可以只发送文件名。想知道如果我在一个真正的hadoop系统上运行,该怎么做。

除了正在读取的文件之外,是否还有向映射程序发送值的方法?

我在分发缓存和发送参数方面也遇到了很多问题。对我有效的选项如下:

对于分布式缓存使用:对我来说,在Map或Reduce中获得HDFS上文件的url/路径是一场噩梦,但使用symlink它起了作用作业的in run()方法

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

然后在Map或Reduce中读取在标头中,在方法之前

public static FileSystem hdfs;

然后在Map或Reduce 的setup()方法中

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

对于参数:将一些值发送到Map或Reduce(可以是从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
    ...
}

然后在Map或Reduce类中:

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查找短语:作为警告:

相关内容

  • 没有找到相关文章

最新更新