首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Apache Storm拓扑上的Sigar UnsatisfiedLinkError

Apache Storm拓扑上的Sigar UnsatisfiedLinkError
EN

Stack Overflow用户
提问于 2019-03-13 23:37:25
回答 1查看 135关注 0票数 0

我要在配置为单个本地群集的计算机上部署Storm拓扑。我已经将conf/storm.yaml配置为使用storm.scheduler: "org.apache.storm.scheduler.resource.ResourceAwareScheduler"。拓扑部署成功。但是,我从Sigar库收到一个错误,指出无法获取进程ID以在我的拓扑上使用CPUMetric。下面是我用来获取指标的拓扑配置:

代码语言:javascript
复制
config.registerMetricsConsumer(LoggingMetricsConsumer.class);
Map<String, String> workerMetrics = new HashMap<String, String>();
workerMetrics.put("CPU", "org.apache.storm.metrics.sigar.CPUMetric");
config.put(Config.TOPOLOGY_WORKER_METRICS, workerMetrics);

我已经将sigar-1.6.4.jarstorm-metrics-1.2.2.jar库复制到apache-storm/lib文件夹。下面是错误:

代码语言:javascript
复制
2019-03-13 16:24:45.920 o.a.s.util Thread-10-__system-executor[-1 -1] [ERROR] Async loop died!
java.lang.UnsatisfiedLinkError: org.hyperic.sigar.Sigar.getPid()J
    at org.hyperic.sigar.Sigar.getPid(Native Method) ~[sigar-1.6.4.jar:?]
    at org.apache.storm.metrics.sigar.CPUMetric.<init>(CPUMetric.java:38) ~[storm-metrics-1.2.2.jar:1.2.2]
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) ~[?:1.8.0_191]
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) ~[?:1.8.0_191]
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) ~[?:1.8.0_191]
    at java.lang.reflect.Constructor.newInstance(Constructor.java:423) ~[?:1.8.0_191]
    at java.lang.Class.newInstance(Class.java:442) ~[?:1.8.0_191]
    at org.apache.storm.utils.Utils.newInstanceImpl(Utils.java:198) ~[storm-core-1.2.2.jar:1.2.2]
    at org.apache.storm.utils.Utils.newInstance(Utils.java:192) ~[storm-core-1.2.2.jar:1.2.2]
    at org.apache.storm.utils.Utils.newInstance(Utils.java:185) ~[storm-core-1.2.2.jar:1.2.2]
    at org.apache.storm.metric.SystemBolt.registerMetrics(SystemBolt.java:150) ~[storm-core-1.2.2.jar:1.2.2]
    at org.apache.storm.metric.SystemBolt.prepare(SystemBolt.java:143) ~[storm-core-1.2.2.jar:1.2.2]
    at org.apache.storm.daemon.executor$fn__10795$fn__10808.invoke(executor.clj:803) ~[storm-core-1.2.2.jar:1.2.2]
    at org.apache.storm.util$async_loop$fn__553.invoke(util.clj:482) [storm-core-1.2.2.jar:1.2.2]
    at clojure.lang.AFn.run(AFn.java:22) [clojure-1.7.0.jar:?]
    at java.lang.Thread.run(Thread.java:748) [?:1.8.0_191]
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-03-14 00:34:45

由于某种原因,Sigar的原生部分不在worker的类路径中。本机文件可以在resources目录中的storm-metrics.jar中找到。

为什么要手动将storm-metrics复制到storm/lib?确保拓扑依赖关系存在的最简单方法是使用maven-shade-plugin制作一个胖jar。看看storm-starter是如何在https://github.com/apache/storm/blob/master/examples/storm-starter/pom.xml#L153上做到这一点的。

我将检查工作进程的日志,以验证storm-metrics.jar文件是否在工作进程的类路径上。worker在启动时很早就打印其类路径,supervisor也是如此。

您提到您在单个本地集群上运行。我不确定您是指Storm的单节点安装,还是您正在使用LocalCluster (或等效的storm local命令)。如果您的意思是使用LocalCluster,您将需要添加风暴指标作为拓扑项目的依赖项。

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

https://stackoverflow.com/questions/55145773

复制
相关文章

相似问题

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