Как передать параметр -javagent /path/to/newrelic.jar в JVM, на которой работает сервер HiveMetaStore - PullRequest
2 голосов
/ 20 марта 2020

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

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

Я пытался:

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

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

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

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

Поэтому я попытался пропатчить этот вызов:

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

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

Затем я посмотрел глубже на сценарий oop. Наконец, функция hadoop_java_exe c в libexec // hadoop_functions. sh вызывает:

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

Поэтому я пропатчил этот код:

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

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

И последнее, но не менее важное: я понял, что можно передать java свойства через HAD OOP _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 с помощью этого механизма.

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

Приношу свои извинения, если это глупый вопрос. Спасибо заранее, Ute

1 Ответ

0 голосов
/ 23 марта 2020
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", но, по крайней мере, агент сейчас работает.

...