Как передать параметр -javagent /path/to/newrelic.jar в JVM, на котором запущен сервер HiveMetaStore

Я пытаюсь запустить java-агент Newrelic в док-контейнере для мониторинга сервера HiveMetaStore, работающего в док-контейнере.

Чтобы запустить агент Newrelic во время запуска JVM, я должен передать JVM флаг-javaagent /path/to/newrelic.jar.

Я попытался:

hive --service metastore  -javaagent  /path/to/newrelic.jar 

Это не удалось с «неопознанным параметром» в коде сервера HiveMetaStore, где он вообще не должен был оказаться.

Сценарий куста вызывает сценарий bin/ext/metastore.sh, который, в свою очередь, вызывает

exec $HADOOP jar $JAR $CLASS "$@" 

Итак, я попытался исправить этот вызов:

exec $HADOOP -javaagent /path/to/newrelic.jar jar  $JAR $CLASS "$@" 

Это тоже не удалось.

Затем я более внимательно изучил сценарий Hadoop. Наконец, вызывается функция hadoop_java_exec в libexec//hadoop_functions.sh:

exec "${JAVA}" "-Dproc_${command}" ${HADOOP_OPTS} "${class}" "$@"

Итак, я исправил этот код:

exec "${JAVA}" "-javaagent /path/to/newrelic.jar" "-Dproc_${command}" ${HADOOP_OPTS} "${class}" "$@"

Это снова не удалось.

И последнее, но не менее важное: я понял, что можно передавать свойства Java через HADOOP _OPTS (в libexec/hadoop_functions.sh):

   function hadoop_finalize_hadoop_opts                        
    {                                               
     hadoop_translate_cygwin_path HADOOP_LOG_DIR
     hadoop_add_param HADOOP_OPTS hadoop.log.dir "-Dhadoop.log.dir=${HADOOP_LOG_DIR}"
     hadoop_add_param HADOOP_OPTS hadoop.log.file "-Dhadoop.log.file=${HADOOP_LOGFILE}"
     …
    }

Но я не мог понять, как передать -javaagent:/path/to/newrelic.jar, используя этот механизм.

Есть ли кто-нибудь, кто пробовал это раньше и может помочь с этим?

Мои извинения, если это глупый вопрос. Заранее спасибо, Уте


person Ute Schürfeld    schedule 20.03.2020    source источник
comment
Привет, не могли бы вы попробовать так и посмотреть, работает ли это exec $HADOOP jar $JAR $CLASS -javaagent /path/to/newrelic.jar $@   -  person Parvaz Bhaskar    schedule 20.03.2020
comment
сообщество обсудить.newrelic.com будет лучше подготовлено, чтобы ответить на этот вопрос   -  person Salman    schedule 23.03.2020
comment
Привет, Парваз, я попробовал то, что ты предлагаешь. Похоже, аргумент -javaagent передает код Hadoop, а затем оказывается в коде HiveMetaStore со следующим сообщением об ошибке: Unrecognized option: -javaagent:/opt/newrelic-agent-5.10.0/newrelic.jar   -  person Ute Schürfeld    schedule 23.03.2020
comment
Предполагается, что аргумент передается не в код HiveMetaStore, а в JVM для запуска агента NewRelic.   -  person Ute Schürfeld    schedule 23.03.2020
comment
Салман, я только что разместил вопрос в сообществе обсуждение.newrelic.com. Спасибо за указатель.   -  person Ute Schürfeld    schedule 23.03.2020
comment
Теперь я добавил hadoop_add _param HADOOP_OPTS java.javaagent -javaagent:${NEWRELIC_AGENT_HOME}\/newrelic.jar к вышеупомянутому файлу libexec/Hadoop_functions.sh. Таким образом, агент запустился :-)   -  person Ute Schürfeld    schedule 23.03.2020


Ответы (1)


function hadoop_finalize_hadoop_opts                        
    {                                               
     hadoop_translate_cygwin_path HADOOP_LOG_DIR
     hadoop_add_param HADOOP_OPTS hadoop.log.dir "-Dhadoop.log.dir=${HADOOP_LOG_DIR}"
     hadoop_add_param HADOOP_OPTS hadoop.log.file "-Dhadoop.log.file=${HADOOP_LOGFILE}"
     …
     hadoop_add _param HADOOP_OPTS java.javaagent -javaagent:${NEWRELIC_AGENT_HOME}\/newrelic.jar
    }

Добавление последнего оператора для запуска агента. Я вижу в контейнере:

/usr/lib/jvm/default-jvm/bin/java -Dproc_jar -Dproc_metastore , … , NullAppender - javaagent:/opt/newrelic-agent-5.10.0/newrelic.jar   org.apache.hadoop.util.RunJar /opt/apache-hive-3.1.2-bin/lib/hive-metastore-3.1.2.jar org.apache.hadoop.hive.metastore.HiveMetaStore

Я еще не понимаю "NullAppender", но, по крайней мере, агент теперь работает.

person Ute Schürfeld    schedule 23.03.2020