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

nimxete2  于 2021-05-31  发布在  Hadoop
关注(0)|答案(1)|浏览(381)

我尝试让newrelicjava代理在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\u functions.sh中)传递java属性:

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/传递到/newrelic.jar。
有没有人曾经尝试过这种方法,并且能帮上忙?
如果这是个愚蠢的问题,我道歉。谢谢你,尤特

fcy6dtqo

fcy6dtqo1#

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

相关问题