Storm 配置、命令(提交 Topology 到集群)

一、Storm 目录结构(主要目录)


bin - 启动 Storm 的可执行程序

conf - 配置文件目录

logs - 日志目录

data - Nimbus 和 Supervisor 存储临时文件


二、将 Topology 提交到 Storm 集群


1. 先将单词计数的示例打包成 jar 上传到 Storm 目录下的 data 目录内


Storm 配置、命令(提交 Topology 到集群)_第1张图片


2. 确认上传成功


3. 将Topology 提交到集群中

命令:storm jar WordCountTopology.jar topology.WordCountTopology wordcount-topology

Storm 配置、命令(提交 Topology 到集群)_第2张图片


4. 查看 Storm UI 界面检查是否上传成功

Storm 配置、命令(提交 Topology 到集群)_第3张图片


三、Storm 命令


命令格式:storm [command] [arguments]



守护进程命令


Nimbus

用法:storm nimbus &

作用:启动 nimbus 守护进程


Supervisor

用户:storm Supervisor &

作用:启动 Supervisor 守护进程


UI

用法:storm ui &

作用:启动UI界面的守护进程,提供了一个可访问的 web UI界面,用来监控 Storm 集群


DRPC

用法:storm drpc &

作用:启动DRPC服务守护进程



管理命令

用来发布和管理集群中的 Topology,在 Storm 的主节点执行。


Jar

用法:storm jar [ topology_jar ]  [ topology_class ] [ topology_name) ] 

作用:向集群提交 Topology,上传 Topology 的 jar 文件到 Nimbus 以分发到整个集群。同时指定 Topology 的 main 方法类的全路径,Topology 的 main 方法需要调用 StormSubmitter.submitTopology() 方法。同时为 Topology 提供集群内唯一的名称,如果集群中一个同名的 Topology,jar 命令会执行失败。提交后 Storm 集群会激活并且开始运行 Topology 。


Kill

用法:storm kill [ topology_name [ - w wait_time ] ]

作用:使用 Topology 的名称关闭已经部署的 Topology。Storm 在 topology.message.timeout.secs 的时间后使 Topology 的 Spout 取消激活,这样已经发射的 Tuple 就可以执行完毕。然后停止 Worker 进行,并且尝试清理所有的状态信息。可以使用 -w 参数设置延时关闭时间,覆盖 topology.message.timeout.secs 参数。


Deactivate

用法:storm deactivate [ topology_name ] 

作用:停止特定的 Topology 的 Spout 发射 Tuple。Topology 可以在 UI 上进行取消激活的操作。


Activate

用法:storm activate [ topology_name ]

作用:重新恢复特定 Topology 的 Spout 发射 Tuple。Topology 可以在 UI 上进行重新激活操作。


Rebalance

用法:storm rebalance [ topology_name ] [-w wait_time] [-n worker_count] [ -e component_name = executer_count ]

作用:rebalance 命令指示 Storm 在集群的 Worker 之间重新平均分派任务,不需要关闭或者重新提交现有的 Topology 。例如:一个新的 Supervisor 节点添加到一个集群中,就需要执行这个命令,因为现有的 Topology 是不会将任务分配到新节点的 Worker 上的。

rebalance 命令还可以使用 -n 和 -e 参数来修改为 Topology 分配的 Worker 以及每个 Task 分配的 executor 的个数。

当执行 rebalance 命令时,Storm 会先取消激活 Topology,等待配置的时间使剩余的 Tuple 完成处理,然后在 Supervisor 节点中重新分配 Worker ,然后 Storm 会将 Topology 回复到之前的激活状态。

实例:storm rebalance wordcount-topology -w 15 -n 5 -e sentence-spout=4 -e split-bolt=8

等待 15 秒后重新平衡名字为wordcount-topology的Topology

设置 5 个 Worker

设置 4 个 sentence-spout 线程

设置 8 个 split-bolt 线程


Remoteconfvalue

用法:storm remoteconfvalue conf-name

作用:查看远程集群中的配置参数值。使用这个命令只能看到整个集群的公共配置,不可以查看单独的 Topology 配置。



本地调试/开发命令


REPL

用法:storm repl

作用:使用 Storm 的本地 classpath 打开一个 Clojure REPL会话


Classpath

用法:storm classpath

作用:打印 Storm client 使用的 classpath 值


Localconfvalue

使用:storm localconfvalue conf_name

作用:在整合 storm.yaml 和 Storm 内置默认值后的配置中查找特定配置项的值


四、Storm 配置


必须的配置

storm.zookeeper.servers

配置 Zookeeper 集群的主机名称。如果 Zookeeper 和 Storm 安装在同一台机器上,可以使用 localhost。

nimbus.host

指定 Storm 集群中 nimbus 的节点,Worker 需要从这个配置知道集群的主节点在哪,用来下载 Topology 的 jar 包和配置选项。

supervisor.slots.ports

控制每个 Supervisor 节点运行多少个 Worker 进程。

storm.local.dir

Nimbus 和 Supervisor 守护进程都会存储一些短暂的状态信息,比如 JAR 包和 Worker 需要的配置文件。这个配置决定将信息储存在哪(这个目录必须已经存在,并且启动用户必须有足够的权限,可以读写这个目录)。



全部的配置

# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements.  See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership.  The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License.  You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.


########### These all have default values as shown
########### Additional configuration goes into storm.yaml

java.library.path: "/usr/local/lib:/opt/local/lib:/usr/lib"

### storm.* configs are general configurations
# the local dir is where jars are kept
storm.local.dir: "storm-local"
storm.zookeeper.servers:
    - "localhost"
storm.zookeeper.port: 2181
storm.zookeeper.root: "/storm"
storm.zookeeper.session.timeout: 20000
storm.zookeeper.connection.timeout: 15000
storm.zookeeper.retry.times: 5
storm.zookeeper.retry.interval: 1000
storm.zookeeper.retry.intervalceiling.millis: 30000
storm.cluster.mode: "distributed" # can be distributed or local
storm.local.mode.zmq: false
storm.thrift.transport: "backtype.storm.security.auth.SimpleTransportPlugin"
storm.messaging.transport: "backtype.storm.messaging.netty.Context"

### nimbus.* configs are for the master
nimbus.host: "localhost"
nimbus.thrift.port: 6627
nimbus.thrift.max_buffer_size: 1048576
nimbus.childopts: "-Xmx1024m"
nimbus.task.timeout.secs: 30
nimbus.supervisor.timeout.secs: 60
nimbus.monitor.freq.secs: 10
nimbus.cleanup.inbox.freq.secs: 600
nimbus.inbox.jar.expiration.secs: 3600
nimbus.task.launch.secs: 120
nimbus.reassign: true
nimbus.file.copy.expiration.secs: 600
nimbus.topology.validator: "backtype.storm.nimbus.DefaultTopologyValidator"

### ui.* configs are for the master
ui.port: 8080
ui.childopts: "-Xmx768m"

logviewer.port: 8000
logviewer.childopts: "-Xmx128m"
logviewer.appender.name: "A1"


drpc.port: 3772
drpc.worker.threads: 64
drpc.queue.size: 128
drpc.invocations.port: 3773
drpc.request.timeout.secs: 600
drpc.childopts: "-Xmx768m"

transactional.zookeeper.root: "/transactional"
transactional.zookeeper.servers: null
transactional.zookeeper.port: null

### supervisor.* configs are for node supervisors
# Define the amount of workers that can be run on this machine. Each worker is assigned a port to use for communication
supervisor.slots.ports:
    - 6700
    - 6701
    - 6702
    - 6703
supervisor.childopts: "-Xmx256m"
#how long supervisor will wait to ensure that a worker process is started
supervisor.worker.start.timeout.secs: 120
#how long between heartbeats until supervisor considers that worker dead and tries to restart it
supervisor.worker.timeout.secs: 30
#how frequently the supervisor checks on the status of the processes it's monitoring and restarts if necessary
supervisor.monitor.frequency.secs: 3
#how frequently the supervisor heartbeats to the cluster state (for nimbus)
supervisor.heartbeat.frequency.secs: 5
supervisor.enable: true

### worker.* configs are for task workers
worker.childopts: "-Xmx768m"
worker.heartbeat.frequency.secs: 1

task.heartbeat.frequency.secs: 3
task.refresh.poll.secs: 10

zmq.threads: 1
zmq.linger.millis: 5000
zmq.hwm: 0


storm.messaging.netty.server_worker_threads: 1
storm.messaging.netty.client_worker_threads: 1
storm.messaging.netty.buffer_size: 5242880 #5MB buffer
storm.messaging.netty.max_retries: 30
storm.messaging.netty.max_wait_ms: 1000
storm.messaging.netty.min_wait_ms: 100

### topology.* configs are for specific executing storms
topology.enable.message.timeouts: true
topology.debug: false
topology.optimize: true
topology.workers: 1
topology.acker.executors: null
topology.tasks: null
# maximum amount of time a message has to complete before it's considered failed
topology.message.timeout.secs: 30
topology.skip.missing.kryo.registrations: false
topology.max.task.parallelism: null
topology.max.spout.pending: null
topology.state.synchronization.timeout.secs: 60
topology.stats.sample.rate: 0.05
topology.builtin.metrics.bucket.size.secs: 60
topology.fall.back.on.java.serialization: true
topology.worker.childopts: null
topology.executor.receive.buffer.size: 1024 #batched
topology.executor.send.buffer.size: 1024 #individual messages
topology.receiver.buffer.size: 8 # setting it too high causes a lot of problems (heartbeat thread gets starved, throughput plummets)
topology.transfer.buffer.size: 1024 # batched
topology.tick.tuple.freq.secs: null
topology.worker.shared.thread.pool.size: 4
topology.disruptor.wait.strategy: "com.lmax.disruptor.BlockingWaitStrategy"
topology.spout.wait.strategy: "backtype.storm.spout.SleepSpoutWaitStrategy"
topology.sleep.spout.wait.strategy.time.ms: 1
topology.error.throttle.interval.secs: 10
topology.max.error.report.per.interval: 5
topology.kryo.factory: "backtype.storm.serialization.DefaultKryoFactory"
topology.tuple.serializer: "backtype.storm.serialization.types.ListDelegateSerializer"
topology.trident.batch.emit.interval.millis: 500

dev.zookeeper.path: "/tmp/dev-storm-zookeeper"


五、监督模式(待实践)


使用监督模式启动 Storm 的守护进程,好处是程序如果有异常失败,服务就可以重启。

参考 upstart


六、自动化框架(待实践)


参考 Pupper




你可能感兴趣的:(Storm)