2012-02-06 15 views
7

Załóżmy, że używasz domyślnego rozmiaru bloku (128 MB), a plik ma 130 MB; więc za pomocą jednego pełnego rozmiaru bloku i jednego bloku z 2 MB. Następnie do pliku musi być dołączone 20 MB (całkowita powinna być teraz 150 MB). Co się dzieje?Jak działa HDFS z dołączaniem?

Czy HDFS faktycznie zmienia rozmiar ostatniego bloku z 2 MB na 22 MB? Lub utwórz nowy blok?

W jaki sposób dołączanie do pliku w HDFS rozwiązuje problem spójności? Czy istnieje ryzyko utraty danych?

Czy HDFS utworzy trzeci blok, w którym znajduje się 20 + 2 MB, i usuń blok z 2 MB. Jeśli tak, w jaki sposób działa to równolegle?

Odpowiedz

3

Według latest design document w Jira issuementioned before, znajdujemy następujące odpowiedzi na zapytanie:

  1. HDFS będzie dołączyć do ostatniego bloku, nie utworzyć nowy blok i skopiować dane z stary ostatni blok. Nie jest to trudne, ponieważ HDFS po prostu używa normalnego systemu plików, aby zapisać te pliki bloków jako zwykłe pliki. Normalne systemy plików mają mechanizmy dołączania nowych danych. Oczywiście, jeśli wypełnisz ostatni blok, utworzysz nowy blok.
  2. Tylko jeden pojedynczy zapis lub dołączenie do dowolnego pliku jest dozwolone w tym samym czasie w HDFS, więc nie ma współbieżności do obsługi. Jest to zarządzane przez namenode. Musisz zamknąć plik, jeśli chcesz, aby ktoś inny zaczął go zapisywać.
  3. Jeśli ostatni blok w pliku nie jest replikowany, dołączenie się nie powiedzie. Dodatek jest zapisany w pojedynczej replice, która przesyła ją do replik, podobnie jak w przypadku zwykłego zapisu. Wydaje mi się, że nie ma dodatkowego ryzyka związanego z transmisją danych w porównaniu do normalnego zapisu.
+0

Czy możesz dołączyć do zamkniętego pliku? – David

+0

jeśli wywołasz append na pliku, który otwierasz. nie możesz wywołać append na otwartym pliku. następnie, gdy wywołasz append i otrzymasz strumień wyjściowy, możesz zacząć składowanie swoich bajtów na końcu pliku. – EthanP

+0

Jeśli dobrze pamiętam, kiedy wprowadzono tę funkcję, musiałbyś zostawić nowo utworzony plik otwarty, aby móc go "dołączyć" (nie jest to prawdziwy dodatek). Czy mówisz, że teraz HDFS pozwala 1) stworzyć plik 2) Zamknij go 3) Otwórz ponownie 4) Dołącz do niego dane? – David

1

System plików rozproszonych Hadoop obsługuje pliki, w tym przypadku powinien dodać 20 MB do drugiego bloku w twoim przykładzie (ten z początkowo 2 MB). W ten sposób otrzymasz dwa bloki, jeden z 128 MB i jeden z 22 MB.

This jest odniesieniem do dokumentów dołączanych java dla HDFS.

+4

Rozumiem, że ścieżka pozostaje taka sama. Ale ponieważ bloki są jednokrotne, wyobrażam sobie, że HDFS utworzyłby trzeci blok, w którym umieściłoby się 20 + 2 MB, i usunąłby blok z 2 MB. Ale jak to działa równolegle? – David

3

Oto bardzo obszerny design document o dołączeniu i zawiera problemy z współbieżnością.

Bieżący HDFS docs podaje link do tego dokumentu, więc możemy założyć, że jest on najnowszy. (Data dokumentu to 2009)

I powiązane issue.