Возможная проблема с памятью сбой Hbase Thrift Server

Я использую Cloudera CDH4 с Hbase и Hbase Thrift Server. Несколько раз в день сбой Thrift Server.

В /var/log/hbase/hbase-hbase-thrift-myserver.out есть это:

#
# java.lang.OutOfMemoryError: Java heap space
# -XX:OnOutOfMemoryError="kill -9 %p"
#   Executing /bin/sh -c "kill -9 8151"...

В /var/log/hbase/hbase-hbase-thrift-myserver.log в конце файла нет сообщений об ошибках. Существует только много сообщений DEBUG, в которых говорится, что один из узлов кэширует определенный файл.

Я не могу найти какие-либо параметры конфигурации для Hbase Thrift Server. В / etc / нет очевидных файлов. Просто / etc / hbase / conf и его файлы Hbase.

Есть идеи по отладке?

3 ответа

Решение

Используя /etc/hbase/conf/hbase-env.sh, я увеличил размер кучи, и это решило проблему сбоев.

# The maximum amount of heap to use, in MB. Default is 1000.
export HBASE_HEAPSIZE=8000

Спасибо Harsh J в списке рассылки CDH Users за помощь в выяснении. Как он указал, мое отсутствие сообщений журнала указывает на kill -9 вероятно имеет место:

В самом деле, если в обработчике хвоста журнала отсутствует сообщение обработчика завершения, возможно, что kill -9 передан процессу через обработчик OOM.

У нас была точно такая же проблема с нашей настройкой HBase Thrift, и в итоге мы использовали сторожевой скрипт, который перезапускает Thrift, если он не работает.

Вы сильно бьете по серверу HBase несколько раз в день? Это может привести к этому. В любом случае, Thrift, похоже, занимает (или теряет) много памяти каждый раз, когда он используется, поэтому вам нужен сторожевой скрипт.

Если сторожевой скрипт слишком тяжелый, вы можете использовать простое задание cron для перезапуска Thrift через частые промежутки времени, чтобы убедиться в его работоспособности.

Следующий cron перезапускает Thrift каждые два часа.

0 */2 * * * hbase-daemon.sh restart thrift

Увеличение размера кучи не всегда может быть решением.

Согласно этому блогу Cloudera,

Комиссионный сервер может получать недопустимые данные. Я бы предложил включить Framed транспорт и компактный протокол.

есть ловушка, если вы включаете эти протоколы на сервере, клиент должен использовать тот же протокол.

Другие вопросы по тегам