首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为Hadoop2配置Prometheus导出程序

为Hadoop2配置Prometheus导出程序
EN

Stack Overflow用户
提问于 2017-11-05 12:21:17
回答 3查看 2.4K关注 0票数 3

我正在尝试使用Prometheus导出程序从运行在Hadoop2实例上的ec2守护进程中获取指标:

  • hadoop namenode
  • hadoop datanode
  • 纱线资源仪
  • 纱线喷头器

我正试图将JMX导出程序作为一个java代理运行,其中包含了所有四个守护进程。为此,我在hadoop-env.shyarn-env.sh中添加了hadoop-env.sh

代码语言:javascript
复制
export HADOOP_NAMENODE_OPTS="$HADOOP_NAMENODE_OPTS -javaagent:/home/ec2-user/jmx_exporter/jmx_prometheus_javaagent-0.10.jar=9102:/home/ec2-user/jmx_exporter/prometheus_config.yml"
export HADOOP_DATANODE_OPTS="$HADOOP_DATANODE_OPTS -javaagent:/home/ec2-user/jmx_exporter/jmx_prometheus_javaagent-0.10.jar=9102:/home/ec2-user/jmx_exporter/prometheus_config.yml"
export YARN_RESOURCEMANAGER_OPTS="$YARN_RESOURCEMANAGER_OPTS -javaagent:/home/ec2-user/jmx_exporter/jmx_prometheus_javaagent-0.10.jar=9102:/home/ec2-user/jmx_exporter/prometheus_config.yml"
export YARN_NODEMANAGER_OPTS="$YARN_NODEMANAGER_OPTS -javaagent:/home/ec2-user/jmx_exporter/jmx_prometheus_javaagent-0.10.jar=9102:/home/ec2-user/jmx_exporter/prometheus_config.yml"

资源管理器度量prometheus_config.yml的示例NumAllSources如下所示:

代码语言:javascript
复制
rules:
 - pattern: Hadoop<service=ResourceManager, name=MetricsSystem, sub=Stats><>NumAllSources
   name: sources
   labels:
    app_id: "hadoop_rm"

当我使用新的信任和java_opts重新启动resourcemanager或其他守护进程时,我会得到以下异常:

代码语言:javascript
复制
Exception in thread "main" java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at sun.instrument.InstrumentationImpl.loadClassAndStartAgent(InstrumentationImpl.java:382)
at sun.instrument.InstrumentationImpl.loadClassAndCallPremain(InstrumentationImpl.java:397)
Caused by: java.lang.IllegalArgumentException: Collector already registered that provides name: jmx_scrape_duration_seconds
at io.prometheus.jmx.shaded.io.prometheus.client.CollectorRegistry.register(CollectorRegistry.java:54)
at io.prometheus.jmx.shaded.io.prometheus.client.Collector.register(Collector.java:128)

有什么建议怎么解决吗?

EN

回答 3

Stack Overflow用户

发布于 2020-01-21 09:24:20

虽然@chanhou的解决方案会起作用,但我想将我的编辑保留在hadoop-env.sh中,所以我选择了

代码语言:javascript
复制
if ! grep -q <<<"$HADOOP_NAMENODE_OPTS" jmx_prometheus_javaagent; then
        HADOOP_NAMENODE_OPTS="$HADOOP_NAMENODE_OPTS -javaagent:/home/caesarli/platform/jmx_prometheus_javaagent-0.12.0.jar=11099:/home/caesarli/platform/hadoop-2.8.4/etc/hadoop/jmx-name.yaml"
fi

HADOOP_DATANODE_OPTS也是如此。

票数 1
EN

Stack Overflow用户

发布于 2018-04-02 08:41:24

这是因为-javaagent选择在$HADOOP_OPTS中多次声明,当您调用/usr/local/hadoop/sbin/hadoop-daemon.sh start datanode时,hadoop-daemon.sh最终会调用/usr/local/hadoop/bin/hdfs启动相关服务。

在此过程中,它将多次源hadoop-config.sh,如果您在shell脚本/usr/local/hadoop/bin/hdfs中使用echo $HADOOP_OPTS,那么您将在那里找到多个-javaagent

解决方法是在/usr/local/hadoop/bin/hdfs中声明/usr/local/hadoop/bin/hdfs,以确保在HADOOP_OPTS中只出现一个-javaagent

票数 0
EN

Stack Overflow用户

发布于 2019-05-21 21:40:22

我认为这是因为您对所有注册都使用相同的端口(9102),更改端口会有帮助。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47121498

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档