在hadoop mapreduce应用程序中访问其他文件系统中的文件以及hdfs文件

时间:2012-11-01 19:15:22

标签: java hadoop

我知道我们可以从普通的java应用程序中调用map-reduce作业。现在,我的情况下map-reduce作业必须处理hdfs上的文件以及其他文件系统上的文件。在hadoop中我们是否可以在使用hdfs上的文件的同时从其他文件系统访问文件。这可能吗?

所以基本上我的意图是我有一个大文件,我想把它放在HDFS中用于并行计算,然后比较这个文件的块和其他一些文件(我不想把它放在HDFS中,因为他们需要一次作为全长文件访问。

2 个答案:

答案 0 :(得分:2)

应该可以像任何其他任务一样从mapper / reducer任务访问非HDFS文件系统。需要注意的一点是,如果有一个说1K映射器,并且每个都会尝试打开非HDFS文件,这可能会导致基于外部文件系统类型的瓶颈。同样适用于映射器也从数据库中提取数据。

答案 1 :(得分:1)

您可以使用distributed cache将文件分发给地图制作者,他们可以使用configure()方法打开和阅读文件(不要在map()中阅读它们,因为它会被多次打电话。)

修改

要从map reduce作业中的本地文件系统访问文件,可以在设置作业配置时将这些文件添加到分布式缓存中。

JobConf job = new JobConf();
DistributedCache.addCacheFile(new URI("/myapp/lookup.dat#lookup.dat"), job);

MapReduce框架将确保您的地图制作者可以访问这些文件。

public void configure(JobConf job) {
    // Get the cached archives/files
    Path[] localFiles = DistributedCache.getLocalCacheFiles(job);

    // open, read and store for use in the map phase.
}

并在作业完成后删除文件。