Про хадуп мрёб не может mkdir - PullRequest
0 голосов
/ 15 марта 2012

Я пытаюсь запустить задание mapreduce. Я устанавливаю выходной путь как: / local / mypath / mr_reuslt Но получаю:

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

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

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

из моего кода Java.Это проблема?Могу я спросить, есть ли какой-нибудь хороший способ, которым мы можем вызвать задание 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-приложение.Спасибо!

Ответы [ 3 ]

0 голосов
/ 15 марта 2012

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

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

0 голосов
/ 06 декабря 2012

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

0 голосов
/ 15 марта 2012

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

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

...