0

我在 Hadoop 2.x 的新 API 中的 DistributedCache 中遇到问题,我发现有人在解决这个问题,但它并没有解决我的问题示例

这个解决方案对我不起作用因为我在尝试检索 DistributedCache 中的数据时遇到了 NullPointerException

我的配置如下:

司机

    public int run(String[] arg) throws Exception {
        Configuration conf = this.getConf();
        Job job= new Job(conf,"job Name");
        ...
        job.addCacheFile(new URI(arg[1]);

设置

    protected void setup(Context context)
            throws IOException, InterruptedException {
        Configuration conf = context.getConfiguration();
        URI[] cacheFiles = context.getCacheFiles();
        BufferedReader dtardr = new BufferedReader(new FileReader(cacheFiles[0].toString()));

在这里,当它开始创建缓冲读取器时,它会抛出 NullPointerException,这是因为context.getCacheFiles(); 始终返回 NULL。如何解决这个问题,缓存文件存储在哪里(HDFS,或本地文件系统)

4

1 回答 1

3

如果在 Hadoop 中使用本地 JobRunner(非分布式模式,作为单个 Java 进程),则不会创建本地数据目录;getLocalCacheFiles() 或 getCacheFiles() 调用将返回一组空的结果。您能否确保以分布式或伪分布式模式运行作业。

Hadoop框架会将分布式缓存中设置的文件复制到作业中每个任务的本地工作目录。所有缓存文件都有副本,放置在每台工作机器的本地文件系统中。(它们将位于 mapred.local.dir 的子目录中。)

您能否参考此链接以了解有关 DistributedCache 的更多信息。

于 2013-12-10T18:49:59.303 回答