У меня есть установка Hbase (v 0.94.19 с Hadoop 1.2.1) с одной главной машиной и двумя региональными серверами. Каждый региональный сервер имеет кучу 16 ГБ (кэш 6,4 ГБ, хранилище памяти 4,0 ГБ) и 1,6 ТБ (2 X 800 ГБ) дискового пространства SSD. Есть только одна таблица с одним семейством столбцов, которая предварительно разбита на 128 областей (00 - ff). Ключ - это 32-байтовая шестнадцатеричная строка, а значения в среднем составляют 800-900 байтов. Скорость обновления составляет от 3 до 5 тысяч элементов в секунду, из которых около 20% - новые записи. Коэффициент репликации Hadoop установлен равным 2. Остальные конфигурации Hadoop и Hbase используются по умолчанию.
Я запустил тест чтения (на самом деле это не тест, а мой собственный код) на этой настройке, которая считывает случайные (но действительные) записи через интерфейс Java Hbase. Я получаю в среднем 30-40 мс на чтение, что, на мой взгляд, необычно. Кроме того, это время чтения увеличивается по мере увеличения количества файлов хранилища в каждом регионе и снова уменьшается после того, как я выполняю серьезное сжатие. Индекс местоположения блока Hbase всегда сообщается как 0 обоими региональными серверами даже сразу после серьезного сжатия.
Мои вопросы: - Видит ли кто-нибудь очевидные ошибки, которые я здесь делаю? Помогает ли увеличение количества дисков на каждом региональном сервере (например, если я перейду на 4 X 400 ГБ) снизить задержку чтения? Есть ли какие-либо оптимизации SSD (например, избыточное выделение ресурсов), которые могут помочь? Наконец, что может привести к тому, что индекс локальности блока всегда будет равен 0?
Пожалуйста, спросите меня, если вам нужна дополнительная информация. Спасибо.