HBase с экспортером JMX BindException

Я развернул HBase на Ambari HDP. Я пытаюсь получить метрики HBase с помощью JMX-экспортера, поэтому добавляю следующую конфигурацию в 'hbase-env':

export HBASE_OPTS="$HBASE_OPTS -javaagent:/opt/jmx_exporter/jmx_exporter_javaagent.jar=7174:/opt/jmx_exporter/hbase/hbase.yml"

Я запускаю HBase без проблем, но когда я пытаюсь получить доступ к оболочке hbase, возникает следующая ошибка:

Exception in thread "main" java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0 (Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke (Method.java:497)
at sun.instrument.InstrumentationImpl.loadClassAndStartAgent (InstrumentationImpl.java:386)
at sun.instrument.InstrumentationImpl.loadClassAndCallPremain (InstrumentationImpl.java:401)
Caused by: java.net.BindException: The address is already being used
at sun.nio.ch.Net.bind0 (Native Method)
at sun.nio.ch.Net.bind (Net.java:437)
at sun.nio.ch.Net.bind (Net.java:429)
at sun.nio.ch.ServerSocketChannelImpl.bind (ServerSocketChannelImpl.java:223)
at sun.nio.ch.ServerSocketAdaptor.bind (ServerSocketAdaptor.java:74)
at sun.net.httpserver.ServerImpl.bind (ServerImpl.java:133)
at sun.net.httpserver.HttpServerImpl.bind (HttpServerImpl.java:54)
at io.prometheus.jmx.shaded.io.prometheus.client.exporter.HTTPServer. <init> (HTTPServer.java:145)
at io.prometheus.jmx.shaded.io.prometheus.jmx.JavaAgent.premain (JavaAgent.java:49)
... 6 more
FATAL ERROR in native method: processing of -javaagent failed
Aborted

Я уже пытался изменить порт экспортера JMX, но всегда выдает исключение BindException. Если я удалю строку экспортера JMX в Hbase-env, она будет работать нормально, и я смогу получить доступ к оболочке hbase.


person Asier Gomez    schedule 10.06.2019    source источник


Ответы (2)


На основе следующей статьи: https://blog.godatadriven.com/hbase-prometheus-monitoring, я добавил следующее в / usr / bin / hbase, поэтому, если порт доступен, он экспортирует туда метрики только в первый раз.

if [ `lsof -n -i:7000 | grep LISTEN | wc -l` == "0" ]; then
  export HBASE_OPTS="$HBASE_OPTS -javaagent:/opt/jmx_exporter/jmx_exporter_javaagent.jar=7000:/opt/jmx_exporter/hbase/hbase.yml"
fi

Проблема заключалась в том, что каждый раз, когда вы пытались запустить службы HBase, возникали конфликты портов, поэтому он не удался.

person Asier Gomez    schedule 10.06.2019

То же самое и со мной. Несмотря на то, что я поместил приведенный ниже код в / bin / hbase, я все еще получаю эту ошибку:

[root @ xxx ~] # hbase shell Проверка порта 7000 - порт 7000 не используется - используется порт 7000 Использование: -javaagent: /path/to/JavaAgent.jar= [host:]: уже зарегистрирован сборщик, который предоставляет имя: jmx_exporter_build_info

для порта в {7000..8010}; делать

    if [ `lsof -n -i:$port | grep LISTEN | wc -l` == "1" ]; then
            echo "Checking port $port - port $port in use"
    else
            echo "Checking port $port - port $port not in use - using port $port"
            export HBASE_OPTS="$HBASE_OPTS -javaagent:/hdptmp/jmx_prometheus_javaagent-0.16.0.jar=$port:/hdptmp/hbase_jmx_config.yaml"
            break
    fi

сделано

person Bharat Chaudhury    schedule 13.07.2021