如何配置多节点 Apache Storm 集群

How to configure multi-node Apache Storm cluster

我正在跟随 http://jayatiatblogs.blogspot.com/2011/11/storm-installation.html & http://zookeeper.apache.org/doc/r3.3.3/zookeeperAdmin.html#sc_zkMulitServerSetup 在 AWS EC2 的 Ubuntu 14.04 LTS 中设置 Apache Storm 集群。

我的主节点是10.0.0.185。 我的从属节点是 10.0.0.79、10.0.0.124 和 10.0.0.84,其 zookeeper-data 中的 myid 分别为 1、2 和 3。我设置了一个由所有 3 个从属节点组成的 Apache Zookeeper 集合。

下面是我的 zoo.cfg 我的 从属 节点:

tickTime=2000
initLimit=10
syncLimit=5

dataDir=/home/ubuntu/zookeeper-data
clientPort=2181

server.1=10.0.0.79:2888:3888
server.2=10.0.0.124:2888:3888
server.3=10.0.0.84:2888:3888

autopurge.snapRetainCount=3
autopurge.purgeInterval=1

下面是我的 storm.yaml 我的 从属 节点:

########### These MUST be filled in for a storm configuration
 storm.zookeeper.server:
     - "10.0.0.79"
     - "10.0.0.124"
     - "10.0.0.84"
#     - "localhost"
 storm.zookeeper.port: 2181

# nimbus.host: "localhost"
 nimbus.host: "10.0.0.185"

 storm.local.dir: "/home/ubuntu/storm/data"
 java.library.path: "/usr/lib/jvm/java-7-oracle"

 supervisor.slots.ports:
     - 6700
     - 6701
     - 6702
     - 6703
     - 6704
#
# worker.childopts: "-Xmx768m"
# nimbus.childopts: "-Xmx512m"
# supervisor.childopts: "-Xmx256m"
#
# ##### These may optionally be filled in:
#
## List of custom serializations
# topology.kryo.register:
#     - org.mycompany.MyType
#     - org.mycompany.MyType2: org.mycompany.MyType2Serializer
#
## List of custom kryo decorators
# topology.kryo.decorators:
#     - org.mycompany.MyDecorator
#
## Locations of the drpc servers
# drpc.servers:
#     - "server1"
#     - "server2"

## Metrics Consumers
# topology.metrics.consumer.register:
#   - class: "backtype.storm.metric.LoggingMetricsConsumer"
#     parallelism.hint: 1
#   - class: "org.mycompany.MyMetricsConsumer"
#     parallelism.hint: 1
#     argument:
#       - endpoint: "metrics-collector.mycompany.org"

下面是我的 master 节点的 storm.yaml:

########### These MUST be filled in for a storm configuration
 storm.zookeeper.servers:
     - "10.0.0.79"
     - "10.0.0.124"
     - "10.0.0.84"
#     - "localhost"
#
 storm.zookeeper.port: 2181

 nimbus.host: "10.0.0.185"
# nimbus.thrift.port: 6627
# nimbus.task.launch.secs: 240

# supervisor.worker.start.timeout.secs: 240
# supervisor.worker.timeout.secs: 240

 ui.port: 8772

#  nimbus.childopts: "‐Xmx1024m ‐Djava.net.preferIPv4Stack=true"

#  ui.childopts: "‐Xmx768m ‐Djava.net.preferIPv4Stack=true"
#  supervisor.childopts: "‐Djava.net.preferIPv4Stack=true"
#  worker.childopts: "‐Xmx768m ‐Djava.net.preferIPv4Stack=true"

 storm.local.dir: "/home/ubuntu/storm/data"

 java.library.path: "/usr/lib/jvm/java-7-oracle"

# supervisor.slots.ports:
#     - 6700
#     - 6701
#     - 6702
#     - 6703
#     - 6704

# worker.childopts: "-Xmx768m"
# nimbus.childopts: "-Xmx512m"
# supervisor.childopts: "-Xmx256m"

# ##### These may optionally be filled in:
#
## List of custom serializations
# topology.kryo.register:
#     - org.mycompany.MyType
#     - org.mycompany.MyType2: org.mycompany.MyType2Serializer
#
## List of custom kryo decorators
# topology.kryo.decorators:
#     - org.mycompany.MyDecorator
#
## Locations of the drpc servers
# drpc.servers:
#     - "server1"
#     - "server2"

## Metrics Consumers
# topology.metrics.consumer.register:
#   - class: "backtype.storm.metric.LoggingMetricsConsumer"
#     parallelism.hint: 1
#   - class: "org.mycompany.MyMetricsConsumer"
#     parallelism.hint: 1
#     argument:
#       - endpoint: "metrics-collector.mycompany.org"

我在我的所有从节点中启动我的 zookeeper,然后在我的主节点中启动我的 storm nimbus,然后在我所有的从节点中启动 storm supervisor。但是,当我在我的 Storm UI 中查看时,集群摘要中只有 1 个总计 5 个槽位的主管,主管摘要中只有 1 个主管信息,这是为什么呢?

如果我在这种情况下提交拓扑,实际有多少个从节点在工作?

为什么不是3个supervisor一共15个slot?

我应该怎么做才能拥有 3 个主管?

我在slave节点check in supervisor.log时,原因如下:

2015-05-29T09:21:24.185+0000 b.s.d.supervisor [INFO] 5019754f-cae1-4000-beb4-fa0
16bd1a43d still hasn't started

您是指 Nimbus 为主节点吗?

一般情况下,Zookeeper集群应该先启动,然后是nimbus,然后是supervisors。 Zookeeper 和 Nimbus 应该始终可用,以便 Storm 集群正常运行。

您应该检查主管日志以检查故障。 Nimbus 主机和 Zookeeper 机器应该可以从 Supervisor 机器访问。

你做的很完美,也很有效。

你唯一应该改变的是你的 storm.dir。它在从属节点和主节点中是相同的,只是在 nimbus 和主管节点中更改 storm.dir 路径中的路径(不要使用相同的本地路径)。当您使用相同的本地路径时,nimbus 和 supervisor 共享相同的 id。他们开始发挥作用,但您看不到 8 个插槽,他们只显示 4 个插槽作为工人。

更改 (storm.local.dir:/home/ubuntu/storm/data) 并且不要在 supervisor 和 nimbus 中使用相同的路径。