Что подразумевается под "HDFS не хватает произвольного доступа для чтения и записи"?

Любая файловая система должна предоставлять API для доступа к своим файлам и каталогам и т.д.

Итак, что подразумевается под "HDFS не хватает произвольного доступа для чтения и записи"?

Итак, мы должны использовать HBase.

Ответ 1

Размер блока HDFS по умолчанию составляет 128 МБ. Таким образом, вы не можете прочитать одну строку здесь, одну строку там. Вы всегда читаете и пишете блоки размером 128 МБ. Это хорошо, когда вы хотите обработать весь файл. Но это делает HDFS непригодной для некоторых приложений, например, где вы хотите использовать индекс для поиска небольших записей.

HBase, с другой стороны, отлично подходит для этого. Если вы хотите прочитать небольшую запись, вы будете читать только эту небольшую запись.

HBase использует HDFS в качестве резервного хранилища. Так как же обеспечить эффективный доступ на основе записей?

HBase загружает таблицы из HDFS в память или на локальный диск, поэтому большинство операций чтения не идет в HDFS. Мутации сначала сохраняются в журнале только для добавления. Когда журнал становится большим, он встраивается в таблицу "addendum". Когда таблиц дополнений слишком много, все они уплотняются в совершенно новую первичную таблицу. Для чтения сначала обращаются к журналу, затем к таблицам дополнений и, наконец, к основной таблице. Эта система означает, что мы пишем полный блок HDFS только тогда, когда у нас есть полный блок изменений HDFS.

Более подробное описание этого подхода содержится в официальном документе.

Ответ 2

В типичной базе данных, где данные хранятся в таблицах в формате RDBMS, вы можете читать или записывать любую запись из любой таблицы, не зная, что находится в других записях. Это называется случайным написанием/чтением.

Но в HDFS данные хранятся в формате файла (как правило), а не в табличном формате. Так что, если вы читаете/пишете, это не так просто, как в RDBMS.