2011-09-08 21 views
8

sto ottenendo questo errore seguente il permesso, e non sono sicuro perché Hadoop sta cercando di scrivere in questa cartella particolare:problema di autorizzazione Hadoop DFS durante l'esecuzione di lavoro

hadoop jar /usr/lib/hadoop/hadoop-*-examples.jar pi 2 100000 
Number of Maps = 2 
Samples per Map = 100000 
Wrote input for Map #0 
Wrote input for Map #1 
Starting Job 
org.apache.hadoop.security.AccessControlException: org.apache.hadoop.security.AccessControlException: Permission denied: user=myuser, access=WRITE, inode="/":hdfs:supergroup:drwxr-xr-x 

Qualsiasi idea del perché si sta cercando di scrivere a la radice dei miei hdf?

Aggiornamento: Dopo aver temporaneamente impostato hdfs root (/) come autorizzazioni 777, ho visto che è stata scritta una cartella "/ tmp". Suppongo che una opzione sia quella di creare una cartella "/ tmp" con permessi aperti a tutti quelli in cui scrivere, ma sarebbe bello da un punto di vista della sicurezza se questo è scritto nella cartella dell'utente (cioè/utente/mioutente/tmp)

+0

hai iniziato Hadoop con " myuser "? –

+0

No, sto usando Cloudera, quindi hodoop è in esecuzione come servizio, presumibilmente come root –

+2

Prova a impostare i permessi su/su 777 con hadoop fs -chmod e guarda cosa scrive. –

risposta

15

sono stato in grado di ottenere questo lavoro con la seguente impostazione: (! ringraziamento speciale a Jeff sulla mailing list Hadoop per avermi aiutato a rintracciare problema)

<configuration> 
    <property> 
     <name>mapreduce.jobtracker.staging.root.dir</name> 
     <value>/user</value> 
    </property> 

    #... 

</configuration> 

riavvio del servizio JobTracker richiesto così

+0

grazie, ha avuto lo stesso problema. è un peccato questo non è il valore predefinito. –

+0

hhhm, sembra che se imposto questo, le autorizzazioni su mapred.system.dir (/ hadoop/mapred/system) devono essere più permissive –

+0

Ho la directory/mapred/system bloccata su solo l'utente mapred (mappato. system.dir =/mapred/sistema). hdfs root (/) è impostato solo per l'utente hdfs. Se hai ancora problemi, fammi sapere quali errori stai ricevendo –

0

Puoi anche creare un nuovo utente chiamato "hdfs". Abbastanza semplice soluzione ma non altrettanto pulita probabilmente.

Naturalmente questo è quando si utilizza Hue con Cloudera Hadoop Manager (CDH3)

0

, è necessario impostare le autorizzazioni per la directory di root Hadoop (/) invece di impostare il permesso per la directory radice del sistema. Anche io ero confuso, ma poi mi sono reso conto che la directory menzionata era del file system di hadoop e non del sistema.

+0

Quando dici "directory root hadoop", intendi la radice di HDFS? Ho scelto di non rendere permessi i permessi nella root HDFS in modo tale da impedire agli utenti di scrivere nella root (e forzarli in una particolare directory - la loro "home":/user/). –

+0

Questo è giusto. La configurazione nella domanda precedente sembra essere errata. Dovrebbe puntare alla directory specifica su HDFS. Nel mio caso puntava a/opt/hadoop/mapred/local/staging. Ho dato il permesso di scrittura alla directory e funzionava bene. – divinedragon

+0

Stai dicendo che l'impostazione mapreduce.jobtracker.staging.root.dir =/user non è corretta? Nota che mi sto riferendo anche a una posizione HDFS nelle mie impostazioni per questo. Inoltre, sto usando Cloudera nel caso in cui ciò faccia la differenza. –

1

1) Creare il {} mapred.system.dir/directory mapred in HDFS utilizzando il seguente comando

sudo -u hdfs hadoop fs -mkdir /hadoop/mapred/ 

2) Dare il permesso di mapred utente

sudo -u hdfs hadoop fs -chown mapred:hadoop /hadoop/mapred/ 
Problemi correlati