2013-08-28 8 views
22

Skonstruowałem środowisko Hadoop z jednym węzłem na CentOS przy użyciu repozytorium Cloudera CDH. Gdy chcę skopiować plik lokalny do HDFS użyłem komendy:komenda hadoop fs -put

sudo -u hdfs hadoop fs -put /root/MyHadoop/file1.txt/

Ale wynik depresji mnie:

put: '/root/MyHadoop/file1.txt': No such file or directory 

Jestem pewien, że ten plik nie istnieje.

Proszę, pomóżcie mi, dzięki!

Odpowiedz

22

Jako użytkownik hdfs, czy masz prawa dostępu do /root/ (w lokalnym hdd) ?. Zwykle nie. Musisz skopiować file1.txt do miejsca, w którym użytkownik ma prawa do odczytu.

Spróbuj:

cp /root/MyHadoop/file1.txt /tmp 
chown hdfs:hdfs /tmp/file1.txt 
sudo -u hdfs hadoop fs -put /tmp/file1.txt/

--- edit:

Spójrz na the cleaner roman-nikitchenko's answer bellow.

+0

Dzięki, ale starałem się przenieść ten plik do innego miejsca, należy wpisać następującą komendę: {sudo - u hdfs hadoop fs -put /home/skfeng/Downloads/hadoop-book-master/test-data/ch1/file1.txt /} nadal nie działa i ma takie same wyniki: {put: '/ home/skfeng /Downloads/hadoop-book-master/test-data/ch1/file1.txt ': Brak takiego pliku lub katalogu } – skfeng

+1

A czy użytkownik 'hdfs' ma prawa dostępu do domu użytkownika' skfeng'? –

+0

Zaktualizowana odpowiedź. Wypróbuj listę poleceń i skrzyżuj palce. –

16

miałem taką samą sytuację i tu jest moje rozwiązanie:

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

Zalety:

  1. Nie trzeba sudo.
  2. Nie potrzebujesz właściwie lokalnego użytkownika "hdfs" w ogóle.
  3. Nie musisz niczego kopiować ani zmieniać uprawnień z powodu poprzednich punktów.
+2

Podoba mi się to rozwiązanie, ale zawsze zapominam, jaka jest nazwa zmiennej środowiskowej: P +1 –

4

próby utworzenia dir w HDFS przez usig: $ hadoop fs -mkdir your_dir a następnie umieścić go w nim $ hadoop fs -put -put /root/MyHadoop/file1.txt your_dir