1

我正在使用 hadoop DistributedCache,但我遇到了一些麻烦。我的 hadoop 处于伪分布式模式。

从这里我们可以看到在伪分布式模式下我们使用 DistributedCache.getLocalCache(xx) 来检索缓存文件。

首先,我将文件放入 DistributedCache:

DistributedCache.addCacheFile(new Path(
"hdfs://localhost:8022/user/administrator/myfile").toUri(),
            job.getConfiguration());

然后在映射器设置()中检索,但DistributedCache.getLocalCache返回null。我可以通过查看我的缓存文件

System.out.println("Cache: "+context.getConfiguration().get("mapred.cache.files"));

它打印出来:

hdfs://localhost:8022/user/administrator/myfile

这是我的伪代码:

public static class JoinMapper{
     @Override
protected void setup(Context context){
        Path[] cacheFiles = DistributedCache.getLocalCacheFiles(context
                .getConfiguration());
    System.out.println("Cache 
             :"+context.getConfiguration().get("mapred.cache.files"));
      Path cacheFile;
      if (cacheFiles != null) {}
    }
}

xx....

public static void main(String[] args){
             Job job = new Job(conf, "Join Test");
        DistributedCache.addCacheFile(new Path("hdfs://localhost:8022/user/administrator/myfile").toUri(),
            job.getConfiguration());}

抱歉排版不佳。请任何人帮助....

顺便说一句,我可以使用 uris

URI[] uris = DistributedCache.getCacheFiles(context .getConfiguration());

uri 返回:hdfs://localhost:8022/user/administrator/myfile

当我尝试从 uri 中读取时,出现文件未找到异常的错误。

4

1 回答 1

-1

分布式缓存会将您的文件从 HDFS 复制到所有 TaskTracker 的本地文件系统。你如何阅读文件?如果文件在 HDFS 中,则必须获取 HDFS 文件系统,否则它将使用默认值(可能是本地文件系统)。因此,要读取 HDFS 中的文件,请尝试:

FileSystem fs = FileSystem.get(new Path("hdfs://localhost:8022/user/administrator/myfile").toUri(), new Configuration());
Path path = new Path (url);
BufferedReader br = new BufferedReader(new InputStreamReader(fs.open(path)));
于 2015-09-02T20:46:29.633 回答