2013-07-24 10 views
5

W Hadoop, jeśli zlikwiduję węzeł, Hadoop dokona redystrybucji plików w klastrze, aby były poprawnie replikowane. Czy dane zostaną usunięte z węzła bez użycia pamięci?Czy wycofanie węzła usuwa dane z tego węzła?

Próbuję zrównoważyć dane na dyskach w danym węźle. Planuję to zrobić przez rozłączenie węzła, a następnie ponowne wykorzystanie węzła. Czy muszę usunąć dane z tego węzła po zakończeniu rozłączania, czy wystarczy go po prostu odzyskać (usunąć z pliku wykluczeń i uruchomić hadoop dfsadmin -refreshNodes)?

AKTUALIZACJA: Udało mi się rozdzielić węzeł, usunąć wszystkie dane z tego węzła, a następnie polecić go ponownie.

+0

Masz wiele dysków zamontowanych na węźle? –

+0

Tak. Węzeł ma 6 dysków. – schmmd

Odpowiedz

1

AFAIK, dane nie są usuwane z węzła DataNode podczas likwidacji. Dalsze zapisy dotyczące tego DataNode nie będą jednak możliwe. Po zlikwidowaniu DataNode repliki przechowywane przez ten węzeł DataNode są oznaczane jako repliki "wycofane", które nadal kwalifikują się do odczytu.

Ale dlaczego chcesz wykonać ten cykl wycofania/przywrócenia? Dlaczego po prostu nie określisz wszystkich dysków jako wartości rozdzielanej przecinkami do właściwości dfs.data.dir w pliku hdfs-site.xml i zrestartujesz Demon DataNode. Uruchom system równoważenia po ponownym uruchomieniu.

+0

Równoważnik balansuje pomiędzy węzłami, a nie na dyskach w węźle.Jeśli węzeł ma 4 dyski i te dyski się zapełniają, to dodawane są dwa dodatkowe dyski, będą problemy z miejscem na dysku, ponieważ dane są niezbalansowane. Zobacz https://issues.apache.org/jira/browse/HDFS-1312. – schmmd

+0

Tak. Nie będzie. Zakładałem, że masz wszystkie dyski podłączone do węzła, ponieważ nie określiłeś tego w pytaniu. Tak czy inaczej, możesz to zrobić zgodnie z sugestią @JtheRocker. – Tariq

0

Aktualnie Hadoop nie obsługuje tego automatycznie. Ale mogą to być sztuczki hakerskie automatycznie.

Wyłączenie z eksploatacji, a następnie replikacja, będzie moim zdaniem powolna, a następnie ręczne przenoszenie bloków na różnych dyskach.

Możesz zrobić to ręcznie równoważenia mimo całej dysków, coś takiego -

.Take dół HDFS lub tylko datanode jesteś kierowania.

. Użyj polecenia UNIX mv, aby przenieść poszczególne bloki i pary meta z jednego katalogu do drugiego na hoście. Na przykład. przenosi pary plików danych blk i plików blk.meta na dyski na tym samym hoście.

.Restart HDFS lub datanode

Reference link for the procedure

Uzupełnienie:. Trzeba pewnie poruszać się parami blk_ * i BLK _ * meta plików do iz z katalogu każdego dysku z danymi z katalogu . Na przykład. Pliki para - blk_3340211089776584759 i blk_3340211089776584759_1158.meta

Jeśli nie chcesz tego zrobić ręcznie, prawdopodobnie można napisać skrypt niestandardowy wykryć ile jest zajęty w DFS/aktualny katalogu każdy z dysków dane i odpowiednio je wyrównaj, np. przenieś pary blk_ * i blk _ *. meta z jednego do drugiego.

+0

Jestem tego świadomy. Byłoby miło mieć więcej szczegółów o tym podfolderze, który przenosi pliki blk. – schmmd

+0

Napisałem program scala, aby zrobić to tydzień temu, ale rozładowanie i rekomodowanie wydaje się bezpieczniejsze: https://github.com/schmmd/hadoop-balancer – schmmd

+0

@schmmd, będę wyglądać. Dzięki, w międzyczasie zrobiłem trochę edycji! Znajdźmy sposób na rozwiązanie tego problemu. :) –