Hadoop 2.x中的DistributedCache

时间:2013-12-10 15:08:47

标签: java hadoop mapreduce distributed-cache

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

此解决方案不适用于我因为我在尝试检索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或本地文件系统)

1 个答案:

答案 0 :(得分:3)

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

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

您是否可以参考此link以了解有关DistributedCache的更多信息。