Я использую HBase для хранения данных временных рядов. Используя предложение в книге O'Reilly HBase, я использую ключ строки, который является меткой времени с помощью соленого префикса. Чтобы запросить эти данные, я создаю несколько потоков, которые осуществляют проверку по диапазону временных меток, при этом каждый поток обрабатывает конкретный префикс. Затем результаты помещаются в параллельный хэш-файл.Многопоточное сканирование HBase действительно медленное
Неисправность возникает, когда потоки выполняют проверку. Запрос, который обычно занимает приблизительно 5600 мс, когда он выполняется последовательно, занимает от 40000 до 80000 мс, когда генерируется 6 нитей (соответствует 6 солям/регионам серверов).
Я попытался использовать HTablePools, чтобы обойти то, что, как я думал, было проблемой, когда HTable не был потокобезопасным, но это не приводило к повышению производительности.
, в частности, я заметил значительное замедляются, когда я ударил эту часть моего кода:
for(Result res : rowScanner){
//add Result To HashMap
Через протоколирования я заметил, что каждый раз через условную петли я испытал задержки многих секунд. Эти задержки не возникают, если я принудительно запускаю потоки.
Я предполагаю, что существует некоторая проблема с блокировкой ресурсов, но я просто не вижу ее.
Я также заметил, что я использую OpenJDK, а не Oracle JDK, который поставляется вместе с моим программным пакетом HBase (Cloudera). Я не уверен, что это может быть проблемой, но я слышал, что могут возникнуть проблемы с проблемами потоковой передачи между разными JDK. – shadonar
Я новичок в HBase, но каковы настройки Xms/Xmx для JVM сервера HBase? Возможно, HBase вынуждена работать во многих прогонах GC, которые замедляют работу. – Behrang
Я понял, что моя установка HBase хранит эти данные только на одном сервере региона. По-видимому, размер блока слишком велик для количества данных, которые у меня были в HBase. Я изменил размер блока и поместил больше данных, чтобы убедиться, что есть несколько региональных серверов и множество данных.Это привело к тому, что потоки возвращались быстрее, чем предыдущие последовательные прогоны, но это не было связано с некоторым количеством числа потоков. Он вернулся с 6 потоками, примерно в 3400 мс. Благодарю вас за помощь. Это были отличные предложения, и я продолжу использовать их для увеличения своей производительности. – shadonar