关于hadoop mrjob不能mkdir



我正在尝试运行一个mapreduce作业。我将输出路径设置为:/local/mypath/mr_ruslt但是得到:

SEVERE: Mkdirs failed to create: /local/mypath/mr_reuslt/_temporary

但我确信,从我的帐户,我可以做mkdir到hadoop。如果我手动执行hadoop fs-mkdir/local/mypath/mr_reuslt/_temporary,它会创建文件夹。没有其他与之相关的异常消息。我真的不认为这是权限问题。当我在mk作业中显式调用create file时,它就会被创建。有人能就这里发生的事情给我一些建议吗?抱歉,我不得不提一下,我试图从我的java代码中调用map reduce作业。我打电话给:

ToolRunner.run(new Validation(), new String[]{...,...,...});
                

来自我的Java代码。这就是问题所在吗?我想问一下,有没有什么好的方法可以从普通的java代码中调用mapreduce作业?

这是我的测试代码:

for(final ExecJob e: jobSet){
        Thread t = new Thread(new Runnable(){
            @Override
            public void run() {
                String inputPath = pathsForValidation.get(e);
                String outputPath = inputPath+validationExten;
                logger.log(LogLevel.INFO,"Should validate data in "+inputPath+", validation result in "+outputPath);
                try {
                    ToolRunner.run(new Validation(), new String[]{TransferToHadoopUtilities.hdfsPath,inputPath,outputPath});
                } catch (Exception e1) {
                    logger.log(LogLevel.ERROR,"Thread encountered exception:");
                    TransferToHadoopUtilities.logger.log(e1);
                }finally{
                    Thread.currentThread().interrupt();
                }
            }
            
        });
        t.start();
    }

我只是在Java程序中启动这段代码。不要做Hadoop jar。

但从Java应用程序开始。

Hadoop可能没有创建该输出目录的适当权限。当以Hadoop用户以外的系统用户身份运行作业时,可能会发生这种情况。

我想最简单的方法是在运行作业之前手动创建输出目录。

这很可能是因为用户Hadoop作业运行时没有足够的权限。

但是,我要么更改输出目录权限,要么以用户身份运行作业,而不是在每次运行作业之前手动执行任何操作。

这可能是因为目录已经存在。根据您试图完成的任务,您可能会给目录加上时间戳。顺便说一句,确保你也清理干净。

相关内容

  • 没有找到相关文章

最新更新