Я понимаю, что блочная система в HDFS — это логический раздел поверх базовой файловой системы. Но как файл извлекается, когда я запускаю команду cat
.
Допустим, у меня есть файл размером 1 ГБ. Мой размер блока HDFS
по умолчанию составляет 64 МБ.
Я выдаю следующую команду:
hadoop -fs copyFromLocal my1GBfile.db input/data/
Приведенная выше команда копирует файл my1GBfile.db
с моего локального компьютера в каталог input/data в HDFS:
.
У меня есть 16 блоков для копирования и репликации (1 ГБ / 64 МБ ~ 16).
Если у меня 8 datanodes
, у одного узла данных может не быть всех блоков для воссоздания файла.
когда я выдаю следующую команду
hadoop -fs cat input/data/my1GBfile.db | head
что происходит сейчас?
Как восстанавливается файл? Хотя блоки — это просто логические разделы, как физически хранится файл размером 1 ГБ. Он хранится в HDFS. получает ли каждый узел данных некоторую физическую часть файла. поэтому, разбив входной файл размером 1 ГБ на куски по 64 МБ, мы можем сломать что-то на уровне записи (скажем, между строками). Как это обрабатывается?
Я проверил свой узел данных и вижу blk_1073741825
, который при открытии в редакторе фактически отображает содержимое файла.
так что куски файлов, которые сделаны, не логичны, но происходит реальное partition
данных?
пожалуйста, помогите прояснить это