如何将-javagent /path/to/newrelic.jar参数传递给运行HiveMetaStore服务器的JVM

问题描述 投票:2回答:1

我尝试让Newrelic Java代理在Docker容器中运行,以监视在Docker容器中运行的HiveMetaStore服务器。

为了在JVM启动期间启动Newrelic代理,我必须将javaagent /path/to/newrelic.jar标志传递给JVM。

我尝试过:

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脚本。最后,libexec // hadoop_functions.sh中的hadoop_java_exec函数调用:

exec“ $ {JAVA}”“ -Dproc _ $ {command}” $ {HADOOP_OPTS}“ $ {class}”“ $ @”

所以我修补了此代码:

exec“ $ {JAVA}”“ -javaagent /path/to/newrelic.jar”“ -Dproc _ $ {command}” $ {HADOOP_OPTS}“ $ {class}”“ $ @”

再次失败。

最后但并非最不重要的一点是,我认识到可以通过HADOOP _OPTS传递java属性(在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

java hadoop hive newrelic
1个回答
0
投票
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”,但至少该代理似乎正在运行。

© www.soinside.com 2019 - 2024. All rights reserved.