You use the hadoop fs –put command to write a 300 MB file using and HDFS block size of 64 MB. Just after this command has finished writing 200 MB of this file, what would another user see when trying to access this file?
a.) They would see Hadoop throw an ConcurrentFileAccessException when they try to access this file.
b.) They would see the current state of the file, up to the last bit written by the command.
c.) They would see the current of the file through the last completed block.
d.) They would see no content until the whole file written and closed.
z tego co rozumiem o poleceniu hadoop fs -put
odpowiedź jest D, jednak niektórzy twierdzą, że jest C.dostęp do pliku, który jest napisany
ktoś może zapewnić konstruktywne wyjaśnienie jednej z opcji?
Dzięki xx
To prawda, że bloki są dostępne na poziomie bloku, tzn. Można uzyskać dostęp do pojedynczego bloku, jeśli wiadomo, który blok należy szukać. Jeśli jednak metadane zawierające odwzorowanie między blokami nazw plików -> są niedostępne, dopóki nie zostaną zapisane wszystkie bloki, sam plik nie będzie widoczny dla użytkowników, ponieważ wszystkie żądania systemu plików są kierowane za pośrednictwem identyfikatora Namenode – Chaos
Oto, co zaobserwowałem, podczas kopiowania dużego pliku do HDFS, nazwa pliku jest tworzona jako "[FILENAME] _COPYING_" i podczas gdy zapis wciąż trwa, jeśli spróbujesz wykonać operację odczytu w pliku ('[FILENAME] _COPYING'), możesz nadal czytać plik do ostatniego napisanego bloku. Przetestowałem to zachowanie w klastrze Hadoop 2.4. Tak więc, z tego zachowania, przypuszczam, że NameNode aktualizuje mapę bloków, gdy tylko blok zostanie przepłukany ('hflush()') i ACK jest odesłany. Po zakończeniu zapisu pliku plik w HDFS zostanie zmieniony na "[FILENAME]". – Ashrith
@AshrithM Próbowałem wypisać plik 300 MB za pomocą polecenia -PUT i odczytać go za pomocą polecenia -CAT pod innym użytkownikiem i otrzymałem komunikat "Plik nie istnieje". Jakiego polecenia (metody) użyłeś do odczytu zapisywanego pliku? – Dennis