Если во время чтения имеется более одного HFile, HBase проверит, существует ли данная строка. Если он там, HBase будет читать эту строку из всех HFiles (а также из memstore), чтобы клиент всегда получал последние данные. Извините, я не совсем понял block filters
вещь. Не могли бы вы указать мне источник, в котором вы читали об этом? Это поможет мне в предоставлении вам полного ответа. (Вы имеете в виду Bloom Filter?)
Назначение метаблока - хранить большой объем данных. Метаблоки используются HFile для хранения BloomFilter, а строковый ключ связан с каждым обменом метало. Метаблоки хранятся в памяти до тех пор, пока не вызывается HFile.close().
Индекс написан для метаблоков, чтобы читать быстрее. Эти индексы содержат n записей (где n - количество блоков) с информацией о блоке (смещение блока, размер и первый ключ). И в конце в HFile записывается трейлер с фиксированным файлом. Он содержит смещения и подсчеты для всех индексов HFile, версии HFile, Compression Codec и т. Д. Теперь, когда начинается чтение, сначала вызывается HFile.loadFileInfo()
, а файлы Trailers, которые были написаны ранее, загружаются в память вместе со всеми индексами. Он позволяет эффективно запрашивать ключи. Затем с помощью HFileScanner
клиент ищет указанный ключ и перебирает его для чтения данных.
Я хотел бы указать вам на ссылки, которые помогли понять эти вещи. Надеюсь, вы найдете их полезными.
Link 1: Apache HBase I/O – HFile (Cloudera)
Link 2: HBase I/O: HFile (th30z)
Link 3: Scanning in HBase
НТН
жаль, что это была опечатка :) – Maverick
Большое спасибо, это помогло много понимания Hfiles. Нужно еще немного объяснений на пути чтения. Например, если у нас есть 5 Hfiles и 2 Hfiles содержат ключ, который мы ищем ... И скажем, для этого ключа, некоторое значение присутствует и в memstore, с этим вы можете объяснить , как будет поток? будет ли цветной фильтр, присутствующий в 5 HFiles, загружаться в память? – Maverick
Добро пожаловать в ma'am :) .. Позвольте мне попробовать .. Если у вас есть 5 HFiles, тогда в обычном сценарии все 5 файлов будут сканироваться параллельным 5-позиционным способом, чтобы получить эту конкретную строку, что подразумевает, что вы делаете 5 дисков. Но если у вас есть BF, вы будете читать диски только для файлов, которые могут содержать эту конкретную строку i.e 5-2 в этом случае. BF будут загружены для всех открытых HFiles. Это звучит нормально? Или мне нужно его доработать? – Tariq