Вы не упомянули, какую IDE вы используете, но вот как я получил настройки для IntelliJ.
Добавить параметр IntelliJ Run / Debug
Выберите Run / Debug -> Add newконфигурация (+ знак) -> Удаленный -> введите имя хоста, на котором работает регион-сервер (оставьте его на localhost, если вы запускаете HBase локально).В моем случае имя хоста skdevhad6.dev.dszn.cz
.
Настройка сервера региона
Далее отредактируйте hbase-env.sh
файл и найдите значение окружения HBASE_OPTS
.Вы должны добавить туда:
-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=0.0.0.0:5005
Это гарантирует, что JDB будет прослушивать все интерфейсы (0.0.0.0
) на порту 5005
, используя транспортный протокол JDB.
Это какHBASE_OPTS
может выглядеть следующим образом:
export HBASE_OPTS="-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=0.0.0.0:5005 -XX:+UseG1GC -XX:MaxGCPauseMillis=50 -XX:-ResizePLAB -XX:ParallelGCThreads=24 -XX:-OmitStackTraceInFastThrow -XX:+ParallelRefProcEnabled"
Предпочтительно, если у вас есть несколько серверов региона HBase, примените к ним также эти настройки, чтобы вы могли выбрать регион, который вы хотите отладить позже (просто добавьте еще одинНастройки удаленной отладки в IntelliJ для этого).
Теперь перезапустите все серверы региона, к которым вы применили обновленную версию HBASE_OPTS
.Если перезапуск прошел успешно, запустите сеанс удаленной отладки с IntelliJ.
Если вы видите что-то подобное, это означает, что отладчик подключен, и вы можете установить точку останова в любом месте.
Продолжайте и попробуйте :) HF!
Устранение неполадок
Если установка не удалась и вы можете 't подключитесь к удаленной JDB, убедитесь, что сервер региона действительно прослушивает порт, указанный вами для всех интерфейсов, используя:
$ ss -tunlp | grep 5005 # where 5005 is the port it should listen to
tcp LISTEN 0 1 *:5005 *:* users:(("java",pid=28364,fd=5))
Если это так, проверьте брандмауэр сервера:
$ iptables -L
Если входящий трафик на порт ограничен, значит, вы обнаружили проблему.