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

