2012-03-15 3 views
0

Я пытаюсь запустить MapReduce job.I установить выходной путь как:/местные/mypath/mr_reuslt Но получить:О Hadoop mrjob не MKDIR

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

Но я уверен, что с моего счета я могу сделать mkdir до hadoop. Если я вручную делаю hadoop fs -mkdir/local/mypath/mr_reuslt/_temporary, он создает папки. Других сообщений об исключениях, связанных с ним, нет. Я действительно не думаю, что это проблема разрешения. Когда я явно вызываю файл create в задаче mk, он создается. Может ли кто-нибудь, пожалуйста, дать мне некоторое представление о том, что здесь происходит? Извините, я должен упомянуть, что я пытался вызвать работу по сокращению карты из своего java-кода. я называю:

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

из моего кода Java. Это проблема? Могу ли я спросить, есть ли какой-либо хороший способ, которым мы можем invokde mapreduce работать с нормальным кодом Java?

Вот мой тестовый код:

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. Спасибо!

+0

какой пользователь + группа hasop работает под? –

+0

Я не в группе adm, но у меня очень высокое разрешение на мою учетную запись, чтобы сделать любой каталог или удалить any.Thank you :) –

+0

У вас могут быть достаточные разрешения, но пользователь, который работает Hadoop, может не –

ответ

0

Возможно, что Hadoop не имеет соответствующих разрешений для создания этого выходного каталога. Это может произойти при выполнении задания в качестве системного пользователя, отличного от пользователя Hadoop.

Я думаю, что простой выход - создать каталог вывода вручную перед запуском задания.

+0

Я попытался создать вывод вручную, он все еще терпит неудачу при создании _temporary. –

+0

можете ли вы разместить свой код? – Chaos

+0

уверен, спасибо, я собираюсь отредактировать свое сообщение:) ~ –

0

Скорее всего, это связано с тем, что задание пользователя Hadoop работает, так как оно не имеет достаточного разрешения.

Тем не менее, я бы либо получил разрешения на выходные каталоги, либо выполнил задание как ваш пользователь, а не выполнял что-либо вручную перед каждым запуском задания.

0

Возможно, это потому, что каталог уже существует. В зависимости от того, что вы пытаетесь выполнить, возможно, отметьте каталог. Кстати, убедитесь, что вы также очищаете.

Смежные вопросы