hadoop
Co to jest HDFS?
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
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
whdfs-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 dla750000
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 /