我在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();返回总是空的。如何解决这个问题,缓存文件存储在哪里(hdfs或本地文件系统)
1条答案
按热度按时间nafvub8i1#
如果在hadoop中使用本地jobrunner(非分布式模式,作为单个java进程),则不会创建本地数据目录;getlocalcachefiles()或getcachefiles()调用将返回一组空的结果。是否可以确保在分布式或伪分布式模式下运行作业。
hadoop框架将分布式缓存中设置的文件复制到作业中每个任务的本地工作目录。所有缓存文件都有副本,放在每个工作机的本地文件系统中(它们将位于mapred.local.dir的子目录中。)
您可以参考此链接了解有关distributedcache的更多信息。