2011-12-14 12 views
3

У меня около 2500 таблиц, участвующих в расчете. В моей среде dev у меня очень мало данных в этих таблицах, 10 - 10 000 строк с большинством таблиц в нижнем конце этого диапазона. Мой расчет будет сканировать все эти таблицы много раз. Хотя весь набор данных поместился бы в память, легко доступ к нему через HBase невероятно медленный, с огромным количеством активности диска.Могу ли я улучшить производительность HBase, уменьшив размер блока hdfs?

Как вы думаете, это поможет уменьшить размер блока hdfs? Мое рассуждение состоит в том, что если каждая таблица находится в своем собственном блоке, тогда огромное количество памяти будет потрачено впустую, не допуская, чтобы весь набор данных находился в ОЗУ. Значительно уменьшенный размер блока позволит системе удерживать большинство, если не все данные в ОЗУ. В настоящее время размер блока составляет 64 МБ.

Окончательная система будет использоваться в более крупном кластере с гораздо большим объемом памяти и узлами, это просто для ускорения моей среды разработки.

ответ

5

HBase магазин свои данные в HFiles (которые, в свою очередь, хранящейся внутри Hadoop файлов) Вот отрывок from the doc:

Минимальный размер блока. Мы рекомендуем установить минимальный размер блока между 8 КБ и 1 МБ для общего использования. Предпочтительным размером блока является , если файлы предназначены в первую очередь для последовательного доступа. Тем не менее, это приведет к к неэффективному случайному доступу (потому что есть больше данных до ). Меньшие блоки хороши для произвольного доступа, но для хранения индекса блока требуется еще , и может быть медленнее создавать (потому что мы должны сбросить поток компрессора в конце каждого блока данных , что приводит к тому, что блок ввода/O). Кроме того, из-за внутреннего кэширования в кодексе сжатия минимальный размер блока будет составлять около 20 КБ-30 КБ.

независимо от размера блока, вы можете захотеть установить, чтобы семейства столбцов были в памяти истинными, что заставляет hbase поддерживать их в кеше.

Наконец вы ситуация кажется более подходящим для кэша как Redis/кэше, чем Hbase, но, может быть, у меня нет достаточного контекста

+0

Фантастический! Спасибо за ответ. В конечном итоге таблицы будут значительно больше, миллионы + строки и должны быть сохранены. Может ли redis/memcache использоваться в этом сценарии? – user1098798

+0

см. Https://groups.google.com/group/redis-db/browse_thread/thread/474c07cd77ae1266 для ограничений размера Redis. Я не знаю достаточно о ваших требованиях. поэтому другие связанные технологии, которые вы, возможно, захотите рассмотреть, включают в себя решения для grid-сетей, такие как Gridgain, Hazelcast, Gigaspaces или Infinispan. –

+0

Имейте в виду, что размер блока HDFS и размер блока HBase - это разные вещи. –

0

Мой сценарий У меня есть размер ключа значение пары 100 байт и Мне нужно выполнить случайные чтения по этим данным. Должен ли я увеличить или уменьшить размер блока для случайной производительности чтения в кластере?

0

если ваш размер блока слишком мал, вам нужно больше памяти для хранения индексов блоков. если размер блока слишком велик, то HBase должен сканировать больше строк, чтобы обнаружить найденный ключ в блоке HBase или нет. Если ваша пара KV составляет 100 байт, то 640 KVs вписываются в блок, который является хорошим значением.

Смежные вопросы