Могу ли я улучшить производительность HBase, уменьшив размер блока hdfs? - PullRequest
3 голосов
/ 15 декабря 2011

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

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

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

Ответы [ 3 ]

5 голосов
/ 15 декабря 2011

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

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

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

Наконец, ваша ситуация кажется более подходящей для кеша вроде redis / memcache, чем для Hbase, но, возможно, у меня недостаточно контекста

0 голосов
/ 04 августа 2014

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

0 голосов
/ 03 августа 2014

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...