web-dev-qa-db-fra.com

Hadoop Java.io.IOException: Mkdirs n'a pas pu créer/certains/chemin

Lorsque j'essaie d'exécuter mon travail, j'obtiens l'exception suivante:

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)

Où le/quelque/chemin est hadoop.tmp.dir. Cependant, lorsque j'émets le dfs -ls cmd sur/some/path, je constate qu'il existe et que le fichier de jeu de données est présent (a été copié avant le traitement du travail). De plus, le chemin est correctement défini dans les configurations hadoop. Toute suggestion sera appréciée. J'utilise hadoop 0.21.

40
alien01

Il s’agit d’un fichier présent sur le disque local en cours de création (pour décompresser votre job jar), pas dans HDFS. Vérifiez que vous avez les autorisations pour mkdir ce répertoire (essayez-le à partir de la ligne de commande)

9
Chris White

Je viens de rencontrer ce problème en exécutant mahout de CDH4 en mode autonome dans mon MacBook Air.

Le problème est qu'un fichier/tmp/hadoop-xxx/xxx/LICENSE et un répertoire/tmp/hadoop-xxx/xxx/license sont en cours de création sur un système de fichiers ne respectant pas la casse lors de la suppression des tâches mahout.

J'ai pu résoudre ce problème en supprimant META-INF/LICENSE du fichier jar comme suit:

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

et ensuite vérifié avec

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

J'espère que cela t'aides!

84
Todd Nemet

Le problème est spécifique à OSX, car le système de fichiers est configuré par défaut sur insensible à la casse sur un Mac (respectant la casse, mais ne la respecte pas, ce qui à mon avis est très mauvais).

Un hack pour contourner cela est de créer une image disque .dmg avec disk utility qui respecte la casse et de monter cette image là où vous en avez besoin (ie hadoop.tmp.dir ou/tmp) avec la commande superutilisateur):

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

J'espère que ça aide.

13
ngrislain

J'ai rencontré ce problème plusieurs fois dans le passé, je pense que c'est un problème spécifique à Mac. Depuis que j'ai utilisé Maven pour construire mon projet, j'ai pu le contourner en ajoutant une ligne dans mon fichier pav.xml Maven comme ceci:

<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>
11
RATabora

Dans mon cas, les lignes de code dans pom.xml du projet Maven fonctionnaient sous 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>
8
Garry

Vérifiez que l'espace requis est disponible ou non .. C'est un problème que vous rencontrez principalement à cause des problèmes d'espace.

2
Kumar Basapuram

J'ai rencontré le même problème lors de la création de tâches MapReduce sur un Mac avec MacOS Sierra. Le même code fonctionne sans problème sous Ubuntu Linux (14.04 LTS et 16.04 LTS). La distribution MapReduce était de 2.7.3 et était configurée pour un fonctionnement en nœud unique, autonome. Le problème semble être lié à la copie de fichiers de licence dans un répertoire META_INF. Mon problème a été résolu en ajoutant un transformateur dans la configuration du plug-in Maven Shade, plus précisément: ApacheLicenseResourceTransformer

Voici la section pertinente du fichier POM.xml, qui fait partie de la section <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>  

Notez que j’utilise aussi la variable ManifestResourceTransformer pour spécifier la classe principale du travail MapReduce. 

2
Manuel

Dans mon cas, je viens de renommer le fichier "log_test.txt"

Parce que le système d'exploitation (UBUNTU) essayait de générer un dossier avec le même nom ..__

0
Ammar Bozorgvar