我在Hadoop2.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或本地文件系统)存储在哪里
如果在Hadoop中使用本地JobRunner(非分布式模式,作为单个Java进程),则不会创建本地数据目录;getLocalCacheFiles()或getCacheFiles()调用将返回一组空结果。你能确保你在分布式或伪分布式模式下运行作业吗。
Hadoop框架工作会将分布式缓存中设置的文件复制到作业中每个任务的本地工作目录中。所有缓存文件都有副本,放在每个工作机器的本地文件系统中。(它们将位于mapred.local.dir的子目录中。)
您是否可以参考此链接以了解有关DistributedCache的更多信息。