Przyśpieszanie odczytu zajętości dysków na Hadoop < 2.8.X
Napisał: Patryk Krawaczyński
25/03/2020 w Administracja Brak komentarzy. (artykuł nr 728, ilość słów: 269)
P
odczas raportowania zużycia blokowej pamięci masowej na klastrze Hadoop uruchamiane jest polecenie systemu Linux: du -sk /dysk/pula-bloków
. Może to powodować bardzo dużo żądań I/O oraz zwiększone obciążenie na dyskach, które posiadają bardzo wiele plików i są aktualnie utylizowane przez zadania chodzące na klastrze. Nie jest to najbardziej efektywny sposób odpytywania o zajęte miejsce szczególnie kiedy w tym czasie zasoby te powinny być przyznane na inne zadania. W wielu przypadkach może dojść do zakleszczania kiedy przetwarzanie i raportowanie jest opóźnione ze względu nałożenie się czasów wykonania tych operacji na siebie. W przypadku systemu Linux można bardzo prosto podmienić polecenie du
na df
– jednak w samym oprogramowaniu dystrybucji Hadoop bez aktualizacji do wyższej wersji nie jest to możliwe.
Dlatego na serwerach pełniących rolę datanode można podmienić polecenie du
na skrypt, który przechwyci tego rodzaju żądania i podmieni je odpowiednik polecenia df
:
#!/bin/bash if [[ $1 = "-sk" ]] && [[ $2 =~ "/data/" ]]; then mydf=$(df $2 | grep -vE "^Filesystem|tmpfs|udev|cgmfs" | awk "{ print $3 }") echo -e "$mydf\t$2" else /usr/bin/du2 "$@" fi
Zakładamy, że nasze dyski znajdują się w ścieżce /data/X
– dlatego wszystkie polecenia typu: du -sk /data/X
są obsługiwane przez skrypt i zamieniane na wynik z polecenia df
– inne są kierowane do oryginalnego programu du
, który został przesunięty pod nazwę du2
. W ten sposób nie pozbawiamy innych programów lub skryptów z korzystania z oryginalnego programu du
. Czas wykonania poleceń przy nieobciążonym dysku:
root@hadoop:~# time /usr/bin/du2 -sk /data/3 6360718780 /data/3 real 0m12.322s user 0m0.180s sys 0m2.508s root@hadoop:~# time /usr/bin/du -sk /data/3 6360973312 /data/3 real 0m0.005s user 0m0.000s sys 0m0.000s
Więcej informacji: Faster Datanodes With Less Wait IO in Hadoop