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

如何将-javagent/path/to/newrelic.jar参数传递给运行HiveMetaStore服务器的JVM,java,hadoop,hive,newrelic,Java,Hadoop,Hive,Newrelic,我尝试让Newrelic java代理在docker容器中运行,以监视在docker容器中运行的HiveMetaStore服务器 为了在JVM启动期间启动Newrelic代理,我必须将javaagent/path/to/Newrelic.jar标志传递给JVM 我试过: hive --service metastore -javaagent /path/to/newrelic.jar 此操作失败,HiveMetaStore服务器代码中出现“Unrecognized Option”,根本不

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

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

我试过:

hive --service metastore  -javaagent  /path/to/newrelic.jar 
此操作失败,HiveMetaStore服务器代码中出现“Unrecognized Option”,根本不应该出现这种情况

配置单元脚本调用bin/ext/metastore.sh脚本,该脚本反过来调用

exec $HADOOP jar $JAR $CLASS "$@" 
所以我尝试修补这个调用:

exec $HADOOP -javaagent /path/to/newrelic.jar jar  $JAR $CLASS "$@" 
这也失败了

然后,我深入研究了hadoop脚本。最后,libexec//hadoop\u functions.sh中的函数hadoop\u java\u exec调用:

exec "${JAVA}" "-Dproc_${command}" ${HADOOP_OPTS} "${class}" "$@"
所以我修补了这个代码:

exec "${JAVA}" "-javaagent /path/to/newrelic.jar" "-Dproc_${command}" ${HADOOP_OPTS} "${class}" "$@"
这又失败了

最后但并非最不重要的一点是,我认识到可以通过HADOOP_OPTS(在libexec/HADOOP_functions.sh中)传递java属性:

但是我不知道如何使用这种机制将-javaagent:/path/传递到/newrelic.jar

有没有人曾经尝试过这一点,并且能够提供帮助

如果这是一个愚蠢的问题,我道歉。谢谢你,尤特

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”,但至少代理现在似乎正在运行。

Hi,你能这样试试看它是否有效吗exec$HADOOP jar$jar$CLASS-javaagent/path/to/newrelic.jar“$@”discussion.newrelic.com社区会更好地回答这个问题吗?帕瓦兹,我尝试了你的建议。看起来,-javaagent参数传递Hadoop代码,然后在HiveMetaStore代码中结束,并显示以下错误消息:
unrecogned选项:-javaagent:/opt/newrelic-agent-5.10.0/newrelic.jar
不应该将agrument传递给HiveMetaStore代码,而是传递给JVM以启动newrelic代理。Salman,我刚刚将问题发布到discussion.newrelic.com社区。谢谢你的指点。
/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