Hadoop java.io.IOException: Mkdirs не удалось создать /some/path

Когда я пытаюсь запустить свою работу, я получаю следующее исключение:

Exception in thread "main" java.io.IOException: Mkdirs failed to create /some/path
    at org.apache.hadoop.util.RunJar.ensureDirectory(RunJar.java:106)
    at org.apache.hadoop.util.RunJar.main(RunJar.java:150)

Где / some / path это hadoop.tmp.dir. Однако, когда я запускаю команду dfs -ls cmd в / some / path, я вижу, что она существует и файл набора данных присутствует (был скопирован перед запуском задания). Также путь правильно определен в конфигах hadoop. Любые предложения будут оценены. Я использую hadoop 0.21.

8 ответов

Решение

Это файл на локальном диске, который создается (для распаковки вашей фляги работы), а не в HDFS. Проверьте, есть ли у вас права доступа к этому каталогу (попробуйте из командной строки)

Просто столкнулся с этой проблемой при запуске mahout с CDH4 в автономном режиме на моем MacBook Air.

Проблема заключается в том, что файл /tmp/hadoop-xxx/xxx/LICENSE и каталог /tmp/hadoop-xxx/xxx/license создаются в файловой системе без учета регистра при отмене задания Mahout.

Я смог обойти это, удалив META-INF/LICENSE из файла jar следующим образом:

zip -d mahout-examples-0.6-cdh4.0.0-job.jar META-INF/LICENSE

а затем проверил это с

jar tvf mahout-examples-0.6-cdh4.0.0-job.jar | grep -i license

Надеюсь это поможет!

Проблема специфична для OSX, это связано с тем, что по умолчанию файловая система настроена на регистр без учета регистра (сохранение с учетом регистра, но без учета регистра, что, на мой взгляд, очень плохо).

Чтобы обойти это, нужно создать образ диска.dmg с помощью дисковой утилиты, чувствительной к регистру, и смонтировать этот образ там, где он вам нужен (например, hadoop.tmp.dir или / tmp), с помощью следующей команды (в качестве суперпользователя):

sudo hdiutil attach -mountpoint /tmp <my_image>.dmg

Я надеюсь, что это помогает.

Я сталкивался с этой проблемой несколько раз в прошлом, я считаю, что это проблема, специфичная для Mac. Поскольку я использую Maven для создания своего проекта, я смог обойти его, добавив строку в свой Maven pom.xml, например так:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-shade-plugin</artifactId>
    <version>2.0</version>
    <executions>
        <execution>
            <phase>package</phase>
            <goals>
                <goal>shade</goal>
            </goals>
            <configuration>
                <transformers>
                    <transformer implementation="org.apache.maven.plugins.shade.resource.ApacheLicenseResourceTransformer">
                    </transformer>
                </transformers>
            </configuration>
        </execution>
    </executions>
</plugin>

В моем случае ниже строки кода в pom.xml в проекте Maven работали на Mac.

  <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-shade-plugin</artifactId>
    <version>2.0</version>
    <configuration>
      <shadedArtifactAttached>true</shadedArtifactAttached>
    </configuration>
    <executions>
      <execution>
        <phase>package</phase>
        <goals>
          <goal>shade</goal>
        </goals>
          <configuration>
            <filters>
              <filter>
                <artifact>*:*</artifact>
                <excludes>
                  <exclude>META-INF/*.SF</exclude>
                  <exclude>META-INF/*.DSA</exclude>
                  <exclude>META-INF/*.RSA</exclude>
                  <exclude>META-INF/LICENSE*</exclude>
                  <exclude>license/*</exclude>
                </excludes>
              </filter>
            </filters>
        </configuration>
      </execution>
    </executions>
  </plugin>

Убедитесь, что необходимое место доступно или нет. Это проблема в основном из-за космических проблем.

Я столкнулся с этой же проблемой при создании рабочих мест MapReduce на Mac с MacOS Sierra. Тот же код работает без проблем в Ubuntu Linux (14.04 LTS и 16.04 LTS). Распределение MapReduce было 2.7.3 и было настроено для отдельного узла, автономной работы. Проблема связана с копированием файлов лицензий в каталог META_INF. Моя проблема была решена путем добавления трансформатора в конфигурацию плагина Maven Shade, а именно: ApacheLicenseResourceTransformer,

Вот соответствующий раздел файла POM.xml, который является частью <build> раздел:

<plugin>                                                                                                             <groupId>org.apache.maven.plugins</groupId>                                                                      
   <artifactId>maven-shade-plugin</artifactId>                                                                      
   <version>3.0.0</version>                                                                                         
   <executions>                                                                                                     
     <execution>                                                                                                    
       <phase>package</phase>                                                                                       
       <goals>                                                                                                      
         <goal>shade</goal>                                                                                         
       </goals>                                                                                                     
       <configuration>                                                                                              
         <transformers>                                                                                             
           <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">       
             <mainClass>path.to.your.main.class.goes.here</mainClass>                                        
           </transformer>                                                                                           
           <transformer implementation="org.apache.maven.plugins.shade.resource.ApacheLicenseResourceTransformer">  
           </transformer>                                                                                           
         </transformers>                                                                                            
       </configuration>                                                                                             
     </execution>                                                                                                   
   </executions>                                                                                                    
 </plugin>  

Обратите внимание, что я также использую ManifestResourceTransformerуказать основной класс для задания MapReduce.

В моем случае я просто переименовал файл "log_test.txt"

Потому что ОС (UBUNTU) пыталась сгенерировать папку с таким же именем. "Log_test.txt/__results.json"

Другие вопросы по тегам