2012-05-09 9 views
35

Quando provo a fare funzionare il mio lavoro sto ottenendo la seguente eccezione:Hadoop java.io.IOException: mkdirs è riuscito a creare/qualche/percorso

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) 

Qualora il/qualche/percorso è hadoop.tmp. dir. Tuttavia quando rilascio il file dfs -ls cmd su/some/path posso vedere che esiste e il file dataset è presente (è stato copiato prima di pranzare il lavoro). Anche il percorso è correttamente definito nelle configurazioni di hadoop. Ogni suggerimento sarà apprezzato. Sto usando hadoop 0.21.

risposta

7

Questo è un file sul disco locale che viene creato (per decomprimere il vaso di lavoro in), non in HDFS. Verifica di avere i permessi per mkdir questa directory (provalo dalla riga di comando)

+7

sì, ho controllato e ho il permesso di mkdir, ma ho ancora il problema. – hakunami

+4

@hakunami Perché è accettata la risposta? –

+1

@NathanielFord - a quanto pare [la risposta molto più altamente promossa non ha fatto proprio il lavoro] (http://stackoverflow.com/a/11379938/1364007). Sconcertante. –

81

Ho appena incontrato questo problema eseguendo il mahout da CDH4 in modalità standalone sul mio MacBook Air.

Il problema è che un file/tmp/hadoop-xxx/xxx/LICENCE e una directory/tmp/hadoop-xxx/xxx/license vengono creati su un file system senza distinzione tra maiuscole e minuscole quando si interrompono i lavori di mahout.

sono stato in grado di risolvere questo cancellando META-INF/licenza del file jar in questo modo:

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

e poi verificate con

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

Spero che questo aiuti!

+4

Woh, grazie questo è stato anche il mio problema, solo per essere un po 'più chiaro: "mahout-examples-0.6-cdh4.0.0-job.jar" è il lavoro di mapReduce da eseguire, quindi il caso generale è: zip -d META-INF/LICENSE – JohnCastle

+0

Continuo a trovare queste soluzioni online ma non funziona per me !! Dopo aver eseguito i comandi zip e jar sopra ho ancora :: Eccezione nel thread "main" java.io.IOException: Mkdirs non è riuscito a creare e/var/folders/9y/4dzrwg8n45z7fbhmlqc7bsgc0000gn/T/hadoop-unjar5690365448328571882/licenza – alex9311

+2

@ alex9311 Ho avuto lo stesso problema del tuo e l'ho usato per risolverlo: 'zip -d examples.jar LICENSE' –

10

Mi sono imbattuto in questi problemi più volte in passato, credo che sia un problema specifico per Mac. Da quando uso Maven per costruire il mio progetto, sono stato in grado di ottenere intorno ad esso con l'aggiunta di una linea nel mio Maven pom.xml in questo modo:

<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> 
+0

questo ha funzionato per me! Grazie. – user671731

+0

Ma come lo useresti con leiningen? – user1158559

12

Il problema è OSX specifica è dovuto al fatto che di default il filesystem è impostato su senza distinzione tra maiuscole e minuscole su un Mac (case preservato ma non sensibile al maiuscolo/minuscolo, che a mio parere è molto negativo).

Un hack per aggirare questo è quello di creare un'immagine del disco .dmg con l'utilità disco che è case sensitive e montare questa immagine dove serve (cioè hadoop.tmp.dir o/tmp) con il seguente comando (come superutente):

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

Spero che sia d'aiuto.

+0

Come creare il file dmg? – hakunami

2

Verificare che lo spazio richiesto sia disponibile o meno. Questo è un problema che si verifica principalmente a causa dei problemi di spazio.

+0

questo è quello che ho appena incontrato! – kiwi

7

Nel mio caso sotto linee di codice in pom.xml nel progetto Maven ha funzionato su 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> 
+0

Assicurati di utilizzare il plugin "maven-shade-plugin", il plug-in di assembly non ha filtri nella configurazione. Può esserci un altro modo per definire i filtri nel plug-in di assembly. Ma questo funziona per me e ho controllato anche altri. – Garry

0

Nel mio caso ho appena rinominato il file "log_test.txt"

perché il sistema operativo (Ubuntu) stava tentando di generare una cartella con lo stesso nome. "log_test.txt/__ results.json"

2

Mi sono imbattuto in questo stesso problema durante la creazione di lavori MapReduce su un Mac con MacOS Sierra. Lo stesso codice funziona senza problemi su Ubuntu Linux (14.04 LTS e 16.04 LTS). La distribuzione MapReduce era 2.7.3 ed era configurata per Single Node, operazione standalone.Il problema sembra essere correlato alla copia dei file di licenza in una directory META_INF. Il mio problema è stato risolto aggiungendo un trasformatore nella configurazione del plugin Maven Shade, in particolare: ApacheLicenseResourceTransformer.

Qui è la sezione dedicata del pom.xml, che va come parte della sezione <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> 

Si noti che anche io uso il ManifestResourceTransformer per specificare la classe principale per il MapReduce lavoro.