2012-07-21 14 views
32

Jestem nowy na rozpakowany system plików hadoop, wykonałem kompletną instalację pojedynczego węzła hadoop na mojej maszynie.Ale po tym, kiedy mam zamiar przesłać dane do hdfs daje komunikat o błędzie Permission Denied.Odmowa uprawnień na hdfs

Wiadomość z terminalu poleceniem:

[email protected]:/usr/local/hadoop$ hadoop fs -put /usr/local/input-data/ /input 
put: /usr/local/input-data (Permission denied) 

[email protected]:/usr/local/hadoop$ 

Po użyciu sudo i dodanie hduser do sudouser:

[email protected]:/usr/local/hadoop$ sudo bin/hadoop fs -put /usr/local/input-data/ /inwe 
put: org.apache.hadoop.security.AccessControlException: Permission denied: user=root, access=WRITE, inode="":hduser:supergroup:rwxr-xr-x 

[email protected]:/usr/local/hadoop$ 
+1

masz prawa dostępu do katalogu - używasz sudo? –

+0

Tak, po użyciu sudo ,,,, hduser @ ubuntu:/usr/local/hadoop $ sudo bin/hadoop fs -put/usr/local/input-data// inwe put: org.apache.hadoop.security. AccessControlException: Odmowa uprawnień: użytkownik = root, dostęp = WRITE, i-węzeł = "": hduser: supergroup: rwxr-xr-x hduser @ ubuntu:/usr/local/hadoop $ –

+0

W moim przypadku było to spowodowane tym, że próbowałem aby pobrać pliki w lokalizacji w moim systemie plików, gdzie nie mam uprawnień. – optimist

Odpowiedz

51

I rozwiązać ten problem tymczasowy wyłączając DFS permission.By dodanie poniżej kod nieruchomości do conf/HDFS-site.xml

<property> 
    <name>dfs.permissions</name> 
    <value>false</value> 
</property> 
+2

To jest pierwsza rzecz, którą ustawiłem w nowym klastrze ;-) –

+0

gdzie znajduje się folder 'conf'? –

+1

Folder conf jest konfiguracją namenodu. W moim przypadku używając hadoop zainstalowanego homebrew jednak był w /usr/local/Cellar/hadoop/2.7.3/libexec/etc/hadoop/hdfs-site.xml –

14

występują dwa oddzielne problemy tutaj:


[email protected]:/usr/local/hadoop$ hadoop fs -put /usr/local/input-data/ /input put: /usr/local/input-data (Permission denied) 

Tutaj, użytkownik hduser nie ma dostępu do lokalnego katalogu /usr/local/input-data. Oznacza to, że twoje lokalne uprawnienia są zbyt restrykcyjne. Powinieneś to zmienić.


[email protected]:/usr/local/hadoop$ sudo bin/hadoop fs -put /usr/local/input-data/ /inwe put: org.apache.hadoop.security.AccessControlException: Permission denied: user=root, access=WRITE, inode="":hduser:supergroup:rwxr-xr-x 

Tutaj użytkownik root (ponieważ używasz sudo) nie ma dostępu do katalogu HDFS /input. Jak widać: hduser:supergroup:rwxr-xr-x mówi, że tylko hduser ma prawo do zapisu. Hadoop naprawdę nie szanuje użytkownika root jako specjalnego użytkownika.


Aby rozwiązać ten problem, proponuję zmienić uprawnienia na lokalnym danych:

sudo chmod -R og+rx /usr/local/input-data/ 

Następnie spróbuj ponownie komendy put jak hduser.

+0

copyFromLocal: org.apache.hadoop.security.AccessControlException: Odmowa uprawnień: użytkownik = root, dostęp = WRITE, i-węzeł = "": hdiser: supergroup: rwxr-xr-x Po zmianie uprawnień powyżej wskazanego błędu. –

+2

nie rób 'put' jako' sudo'. Zrób to jako 'hduser'. –

42

miałem podobną sytuację i tu jest moje podejście, które jest nieco inna:

HADOOP_USER_NAME=hdfs hdfs dfs -put /root/MyHadoop/file1.txt/

Co faktycznie zrobić to czytasz lokalnego pliku zgodnie z lokalnymi uprawnieniami ale podczas umieszczania pliku na HDFS jesteś jak uwierzytelniony użytkownik hdfs. Możesz to zrobić z innym ID (uwaga na rzeczywistą konfigurację schematów autoryzacji, ale zazwyczaj nie jest to przypadek).

Zalety:

  1. uprawnienia są utrzymywane na HDFS.
  2. Nie potrzebujesz sudo.
  3. Nie potrzebujesz właściwie lokalnego użytkownika "hdfs" w ogóle.
  4. Nie musisz niczego kopiować ani zmieniać uprawnień z powodu poprzednich punktów.
4

Uruchom powłokę jako hduser (od korzenia) i uruchomić polecenie

sudo -u hduser bash 
hadoop fs -put /usr/local/input-data/ /input 

[aktualizacja] Należy również pamiętać, że użytkownik hdfs jest bardzo łatwy i posiada wszystkie R/W przywileje.

+0

Nie jest wymagane, aby uruchomić powłokę. 'sudo -u hdfs hadoop fs -chmod 777/hbase' działa również. – 030

+0

Dobra rada, założyłem, że chcesz uruchomić wiele poleceń jako hakser. –

3

mam rozwiązać ten problem za pomocą następujących kroków

su hdfs 
hadoop fs -put /usr/local/input-data/ /input 
exit 
Powiązane problemy