Szukaj…


Uwagi

Dobre wyjaśnienie systemu plików HDFS i jego działania.

Składnia powinna zawierać polecenia, które mogą być używane w HDFS.

HDFS - rozproszony system plików Hadoop

Hadoop Distributed File System (HDFS) to oparty na Javie system plików, który zapewnia skalowalne i niezawodne przechowywanie danych, które jest przeznaczone do obsługi dużych klastrów serwerów towarowych. HDFS, MapReduce i YARN stanowią rdzeń Apache ™ Hadoop®.

HDFS został zaprojektowany tak, aby był wysoce odporny na uszkodzenia, co osiąga się poprzez zapisanie wielu kopii (domyślnie 3) danego bloku danych w wielu węzłach.

Znajdowanie plików w HDFS

Aby znaleźć plik w systemie plików Hadoop Distributed:

hdfs dfs -ls -R / | grep [search_term]

W powyższym poleceniu

-ls służy do wyświetlania plików na liście

-R służy do rekurencji (iteracja przez podkatalogi)

/ oznacza z katalogu głównego

| aby przesłać dane wyjściowe pierwszego polecenia do drugiego

polecenie grep aby wyodrębnić pasujące ciągi

[search_term] nazwa pliku do wyszukania na liście wszystkich plików w systemie plików hadoop.

Alternatywnie można użyć poniższego polecenia find i zastosować również niektóre wyrażenia:

hadoop fs -find / -name test -print

Znajduje wszystkie pliki, które pasują do określonego wyrażenia i stosuje wobec nich wybrane akcje. Jeśli nie podano ścieżki, domyślnie jest to bieżący katalog roboczy. Jeśli nie podano żadnego wyrażenia, domyślnie jest to -print.

Rozpoznawane są następujące wyrażenia podstawowe:

  • name pattern
  • iname pattern

Ocenia się jako prawda, jeśli basename pliku pasuje do wzorca przy użyciu standardowego globowania systemu plików. Jeśli użyto opcji -iname, dopasowanie nie uwzględnia wielkości liter.

  • print
  • print0Always

Ocenia się jako prawda. Powoduje zapisanie bieżącej nazwy ścieżki na standardowe wyjście. Jeśli -print0 wyrażenia -print0 jest znak NULL ASCII.

Rozpoznawane są następujące operatory:

expression -a expression
expression -and expression
expression expression

Blokuje i dzieli HDFS

  1. Rozmiar bloku i bloki w HDFS : HDFS ma pojęcie przechowywania danych w blokach za każdym razem, gdy plik jest ładowany. Bloki to fizyczne partycje danych w HDFS (lub w innym systemie plików, jeśli o to chodzi).

    Za każdym razem, gdy plik jest ładowany do HDFS, jest on fizycznie dzielony (tak, plik jest dzielony) na różne części zwane blokami. Liczba bloków zależy od wartości dfs.block.size w hdfs-site.xml

    Idealnie rozmiar bloku jest ustawiony na dużą wartość, taką jak 64/128/256 MB (w porównaniu do 4KB w normalnym FS). Domyślna wartość rozmiaru bloku w większości dystrybucji Hadoop 2.x wynosi 128 MB. Powodem większego rozmiaru bloku jest to, że Hadoop jest zaprojektowany do obsługi danych PetaBytes z każdym plikiem od kilkuset MegaBajtów do rzędu TeraBytes.

    Powiedzmy na przykład, że masz plik o rozmiarze 1024 MB. jeśli twój rozmiar bloku to 128 MB, otrzymasz 8 bloków po 128 MB każdy. Oznacza to, że twój namenode będzie musiał przechowywać metadane 8 x 3 = 24 plików (3 to czynnik replikacji).

    Rozważ ten sam scenariusz z wielkością bloku 4 KB. Spowoduje to, że 1GB / 4KB = 250000 bloków, a to będzie wymagać, aby nazwa-węzeł zapisał metadane dla 750000 bloków tylko dla pliku 1GB. Ponieważ wszystkie te informacje związane z metadanymi są przechowywane w pamięci, preferowany jest większy rozmiar bloku, aby zaoszczędzić trochę dodatkowego obciążenia w węźle NameNode.

    Teraz znowu rozmiar bloku nie jest ustawiony na ekstremalnie wysoką wartość, taką jak 1 GB itp., Ponieważ idealnie, dla każdego bloku danych uruchamiany jest 1 program odwzorowujący. Jeśli więc ustawisz rozmiar bloku na 1 GB, możesz stracić równoległość, co może skutkować wolniejszą przepustowością.

2.) Rozmiar podzielony w HDFS : Podziały w przetwarzaniu Hadoop to logiczne fragmenty danych. Gdy pliki są podzielone na bloki, hadoop nie szanuje żadnych plików bundund. Po prostu dzieli dane w zależności od rozmiaru bloku. Powiedz, że jeśli masz plik 400 MB, z 4 liniami, a każda linia ma 100 MB danych, otrzymasz 3 bloki 128 MB x 3 i 16 MB x 1 . Ale kiedy obliczane są podziały wejściowe podczas wyszukiwania danych, należy pamiętać o granicach plików / rekordów, w tym przypadku będziemy mieli 4 podziały wejściowe po 100 MB każdy, jeśli używasz, powiedzmy, NLineInputFormat .

Rozmiar podziału można również ustawić dla zadania za pomocą właściwości mapreduce.input.fileinputformat.split.maxsize

Bardzo dobre wyjaśnienie bloków vs podziałów można znaleźć w tej odpowiedzi SO /



Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow