2013-10-17 10 views
7

Próbuję uruchomić przykład WordCount w Hadoop po wykonaniu niektórych samouczki online. Jednak nie jest dla mnie jasne, skąd plik zostanie skopiowany z naszego lokalnego systemu plików do HDFS, gdy wykonamy następujące polecenie.Co to jest lokalizacja HDFS w Hadoop?

hadoop fs -copyFromLocal /host/tut/python-tutorial.pdf /usr/local/myhadoop-tmp/ 

Po wykonaniu następującego polecenia, nie widzę mojego Pythona-tutorial.pdf wymienionych tutaj na HDFS.

hadoop fs -ls 

To mnie myli. Podałem już katalog "myhadoop-tmp" w pliku core-site.xml. Myślałem, że ten katalog stanie się katalogiem HDFS do przechowywania wszystkich plików wejściowych.

core-site.xml 
============= 
<property> 
    <name>hadoop.tmp.dir</name> 
    <value>/usr/local/myhadoop-tmp</value> 
    <description>A base for other temporary directories.</description> 
</property> 

Jeśli tak nie jest, to gdzie znajduje się HDFS na moim komputerze? Jaka konfiguracja określa katalog HDFS i dokąd zmierza plik wejściowy podczas kopiowania go z lokalnego systemu plików do HDFS?

+0

Czy wypróbowałeś 'hadoop fs -ls/usr/local/myhadoop-tmp /'? – cabad

+0

Cool. To działało dla mnie. Teraz widzę mój plik. Dzięki za wskazówki. – user2325154

+0

Cóż, moja odpowiedź odpowiada na twoje pytanie, więc powinieneś to zaakceptować. – cabad

Odpowiedz

6

Ustawiono to we właściwości dfs.datanode.data.dir, która domyślnie przyjmuje wartość file://${hadoop.tmp.dir}/dfs/data (szczegóły: here).

Jednak w twoim przypadku problem polega na tym, że nie używasz pełnej ścieżki w ramach HDFS. Zamiast tego wykonaj następujące czynności:

hadoop fs -ls /usr/local/myhadoop-tmp/ 

Pamiętaj, że wydajesz się również mylić ścieżkę w HDFS ze ścieżką w lokalnym systemie plików. W ramach HDFS Twój plik znajduje się pod numerem /usr/local/myhadoop-tmp/. W lokalnym systemie (i przy ustawieniu konfiguracji) jest on pod numerem /usr/local/myhadoop-tmp/dfs/data/; tam jest struktura katalogów i konwencja nazewnictwa określona przez HDFS, która jest niezależna od dowolnej ścieżki w HDFS, którą zdecydujesz się użyć. Ponadto nie będzie mieć tej samej nazwy, ponieważ jest podzielony na bloki i każdy blok ma przypisany unikalny identyfikator; nazwa bloku jest podobna do blk_1073741826.

Podsumowując: lokalna ścieżka używana przez datanodę NIE jest taka sama jak ścieżek używanych w HDFS. Możesz przejść do katalogu lokalnego, szukając plików, ale nie powinieneś tego robić, ponieważ możesz zepsuć zarządzanie metadanymi HDFS. Wystarczy użyć narzędzi wiersza poleceń hadoop, aby kopiować/przenosić/odczytywać pliki w HDFS, używając dowolnej ścieżki logicznej (w HDFS), której chcesz użyć. Ścieżki w HDFS nie muszą być powiązane z ścieżkami, z których korzystałeś w lokalnej pamięci masowej Datanode (nie ma powodu ani korzyści z tego).

+0

Widzę teraz plik, jednak został zapisany bezpośrednio pod katalogiem/usr/local/myhadoop-tmp, a nie pod/usr/local/myhadoop-tmp/dfs/data. Nie rozumiem dlaczego. Oto co widzę: -rw-r - r-- 1 supergrupa chandeln 9322974 2013-10-17 17:06 /usr/local/myhadoop-tmp/python-tutorial.pdf – user2325154

+0

Czy to oznacza, że ​​nie widzę plik w moim lokalnym systemie plików, jeśli przejdę do katalogu/usr/local/myhadoop-tmp/dfs/data/i wykonam polecenie ls -l? – user2325154

+0

@ user2325154 Dodałem bardziej szczegółowe wyjaśnienie. – cabad