我有一个在本地集群上运行良好的拓扑。但是,当我尝试在生产集群上运行它时,会发生以下情况:
- 灵车停了
- 风暴UI启动
- 我用的两个工人都起来了
- Zookeper已启动
-
我用运行风暴
storm-jar myjar.jar MyClass
-
Nimbus提交拓扑
- 拓扑和工作程序显示在storm UI中
但是:
拓扑不会启动,尽管其状态为ACTIVE
拓扑的日志文件不会出现在辅助进程中
我在主管上的工作人员中有以下日志。日志:
2016-04-15 13:18:19.831 o.a.s.d.supervisor [WARN] There was a connection problem with nimbus. #error {
:cause jobs-rec-storm-nimbus
:via
[{:type java.lang.RuntimeException
:message org.apache.storm.thrift.transport.TTransportException: java.net.UnknownHostException: jobs-rec-storm-nimbus
:at [org.apache.storm.security.auth.TBackoffConnect retryNext TBackoffConnect.java 64]}
{:type org.apache.storm.thrift.transport.TTransportException
:message java.net.UnknownHostException: jobs-rec-storm-nimbus
:at [org.apache.storm.thrift.transport.TSocket open TSocket.java 226]}
{:type java.net.UnknownHostException
:message jobs-rec-storm-nimbus
:at [java.net.AbstractPlainSocketImpl connect AbstractPlainSocketImpl.java 184]}]
:trace
[[java.net.AbstractPlainSocketImpl connect AbstractPlainSocketImpl.java 184]
[java.net.SocksSocketImpl connect SocksSocketImpl.java 392]
[java.net.Socket connect Socket.java 589]
[org.apache.storm.thrift.transport.TSocket open TSocket.java 221]
[org.apache.storm.thrift.transport.TFramedTransport open TFramedTransport.java 81]
[org.apache.storm.security.auth.SimpleTransportPlugin connect SimpleTransportPlugin.java 103]
[org.apache.storm.security.auth.TBackoffConnect doConnectWithRetry TBackoffConnect.java 53]
[org.apache.storm.security.auth.ThriftClient reconnect ThriftClient.java 99]
[org.apache.storm.security.auth.ThriftClient <init> ThriftClient.java 69]
[org.apache.storm.utils.NimbusClient <init> NimbusClient.java 106]
[org.apache.storm.utils.NimbusClient getConfiguredClientAs NimbusClient.java 78]
[org.apache.storm.utils.NimbusClient getConfiguredClient NimbusClient.java 41]
[org.apache.storm.blobstore.NimbusBlobStore prepare NimbusBlobStore.java 268]
[org.apache.storm.utils.Utils getClientBlobStoreForSupervisor Utils.java 462]
[org.apache.storm.daemon.supervisor$fn__9590 invoke supervisor.clj 942]
[clojure.lang.MultiFn invoke MultiFn.java 243]
[org.apache.storm.daemon.supervisor$mk_synchronize_supervisor$this__9351$fn__9369 invoke supervisor.clj 582]
[org.apache.storm.daemon.supervisor$mk_synchronize_supervisor$this__9351 invoke supervisor.clj 581]
[org.apache.storm.event$event_manager$fn__8903 invoke event.clj 40]
[clojure.lang.AFn run AFn.java 22]
[java.lang.Thread run Thread.java 745]]}
2016-04-15 13:18:19.831 o.a.s.d.supervisor [INFO] Finished downloading code for storm id jobs-KafkaMigration-topology-3-1460740616
2016-04-15 13:18:19.850 o.a.s.d.supervisor [INFO] Missing topology storm code, so can't launch worker with assignment ...(some more numbers)
因此,我怀疑我与nimbus有连接问题,但工作程序中的属性文件是:
storm.zookeeper.servers:
- "192.168.22.209"
- "192.168.22.216"
- "192.168.22.217"
storm.local.dir: "/app/home/storm"
storm.zookeeper.root: "/storm-prod"
#
nimbus.seeds: ["192.168.120.96"]
如果我从工人那里ping到nimbus ip,它会返回OK
错误在哪里,如何修复
谢谢!
在这种情况下,Storm supervisor从Storm.yaml中配置的任何内容解析nimbus,并在第一个时间播种/host,然后使用nimbus主机名下载拓扑工件。
如果这是正确的,则DNS对于群集设置是强制性的。这远不是理想的,尤其是在像kubernetes这样的精心组织的环境中使用容器时。
我目前使用的解决方法是添加
storm.local.hostname: "<local.ip.value>"
风暴。yaml
感谢@bastien提供了风暴用户邮件列表
我遇到了类似的问题。原来我的防火墙规则阻止了监控端口。确保主管和nimbus能够相互交谈。
我发现我需要让盒子的主机名与我在/etc/hosts文件中对它们的调用相匹配
在主机文件中,我有
xxx.xxx.xxx.xxx nimbus
但盒子上的主机名不同,它从操作系统中提取了主机名
更改nimbus服务器操作系统上的主机名解决了我的问题。