Storm基础篇六-命令行客户端

876 阅读8分钟

命令行客户端

本文主要介绍 storm 命令行客户端所有可能使用的命令。至于如何构建一个远程 storm 集群,可参考Setting up development environment 或参考前面所写 blog。 有关在这些命令中使用外部库的详细信息,请参阅 Classpath handling

Storm 支持的命令包括:

    jar、localsql、kill、activate、deactivate、rebalance、repl、classpath
    server_classpath、localconfvalue、remoteconfvalue、nimbus、supervisor
    ui、drpc、drpc-client、blobstore、dev-zookeeper、get-errors、heartbeats
    kill_workers、list、logviewer、monitor、node-health-check、pacemaker
    set_log_level、shell、upload-credentials、version、admin、help 等

jar

语法: storm jar topology-jar-path class ... 使用指定参数运行 main 方法。Storm 所需要的 jar 包和配置信息都在类路径(classpath)中。这个运行过程已经配置好了,这样 StormSubmitter 就可以在提交拓扑的时候将 topology-jar-path中的 jar 包上传到集群中。

当你想要发送其他不包括在应用程序中jar包时,你可以通过 --jars 接逗号隔开的字符串来传递它们。例如:可以通过 --jars "your-local-jar.jar,your-local-jar2.jar" 加载你本地的 your-local-jar.jar 和 your-local-jar2.jar jar包。并且当你想要传递 maven 组件及其传递依赖项时,你可以通过 --artifacts 接逗号分隔的字符串参数传递。你还可以排除一些依赖项,就如你在maven pom中操作一般。 请在组件后面添加带有'^'分隔字符串的来排除组件依赖。例如:--artifacts "redis.clients:jedis:2.9.0,org.apache.kafka:kafka_2.10:0.8.2.2^org.slf4j:slf4j-log4j12" 将加载 jedis 和 kafka 组件及其所有的传递依赖项,但 kafka 的 slf4j-log4j12 除外。

当你需要冲 maven 仓库添加组件时,您可以使用逗号分隔字符串将远程存储库传递到——artifactreposories选项。你可以通过 --artifactRepositories 接逗号分隔的字符串来传递远程仓库。仓库的格式为"^"。'^'作为分隔符,URL允许使用不同的字符。例如: --artifactRepositories "jboss-repository^http://repository.jboss.com/maven2,HDPRepo^http://repo.hortonworks.com/content/groups/public/" 将在依赖中添加 jboss 和 HDP。

这两个选项的完整实例如下: ./bin/storm jar example/storm-starter/storm-starter-topologies-*.jar org.apache.storm.starter.RollingTopWords blobstore-remote2 remote --jars "./external/storm-redis/storm-redis-1.1.0.jar,./external/storm-kafka-client/storm-kafka-client-1.1.0.jar" --artifacts "redis.clients:jedis:2.9.0,org.apache.kafka:kafka-clients:1.0.0^org.slf4j:slf4j-api" --artifactRepositories "jboss-repository^http://repository.jboss.com/maven2,HDPRepo^http://repo.hortonworks.com/content/groups/public/"

当你传递 jars 或 组件时,StormSubmitter 会在拓扑提交时加载它们,并且将它们加载到运行类的的类路径中,也包括该拓扑的 workers。

local

语法: storm local topology-jar-path class ...

local命令的作用类似于 storm jar,只不过它不是将拓扑提交给集群,而是以本地模式运行集群。这意味着storm守护进程的嵌入式版本将在与拓扑相同的进程中运行30秒,然后自动关闭。因此,你的拓扑的类路径将被扩展,以包含运行这些进程所需的所有东西。

sql

语法: storm sql sql-file topology-name

将SQL语句编译成Trident拓扑并提交给Storm。

--jars--artifacts--artifactRepositories选项同样适用于 sql 命令。请参考 “help jar” 来看如何使用--jars--artifacts--artifactRepositories选项。通常情况下都需要传递这些选项,因为需要为你的 sql 设置数据源,且一般情况下,数据源是外部存储。

kill

语法:storm kill topology-name [-w wait-time-secs]

通过 topology-name 来杀死拓扑。Storm 将首先在拓扑的消息超时期间关闭拓扑的spouts,以所有当前正在处理的消息完成处理。Storm 将shutdown workers 并且清理它们的状态。你可以使用-w来略过Storm在关闭和关闭之间的等待时间。

activate

语法: storm activate topology-name

激活运行指定拓扑的所有 spout。

deactivate

语法: storm deactivate topology-name

停止指定拓扑的所有 spout 的运行。

rebalance

语法: storm rebalance topology-name [-w wait-time-secs] [-n new-num-workers] [-e component=parallelism]*

某些情况下,你可能需要对你的运行中的拓扑进行一些扩展。例如,假如你有10个节点,每个节点上有4个worker,现你需要往集群中添加10个节点,你可能希望让 Storm 为正在运行的拓扑分散 worker,以便每个节点运行2个 worker。一种实现方式是杀死正在运行的拓扑并重新提交。但 storm 提供了 “rebalance” 命令可以以更简单的命令来达到此目的。
Rebalance 首先会在拓扑的消息超时期间(可通过-w参数配置)注销拓扑,然后均匀的将 worker 分配至集群中。然后拓扑将回到它此前的激活状态(也就是说之前处于注销状态的拓扑仍然会保持注销状态,而处于激活状态的拓扑则会返回激活状态)。
rebalance 命令还可以用来改变正在运行的拓扑的并行性。使用 -n 和 -e 来分别更改 worker 数量或组件中 executor 的数量。

classpath

语法: storm classpath

打印客户端执行命令时使用的类路径环境变量。

server_classpath

语法: storm server_classpath

打印 storm 相关进程使用的类路径。

localconfvalue

语法:storm localconfvalue conf-name

打印出本地 Storm 配置中 conf-name 属性的值。这里的本地配置指的是 ~/.storm/storm.yaml和 defaults.yaml 两个配置文件综合之后的配置信息。

remoteconfvalue

语法:storm remoteconfvalue conf-name

打印出集群配置中 conf-name 属性的值。这里的集群配置是指 $STORM-PATH/conf/storm.yamldefaults.yaml 两个配置文件综合之后的配置信息。该命令必须在一个集群机器上执行。

nimbus

语法: storm nimbus

开启 nimbus 进程。此条命令应当在 daemontools 或者 monit 这样的工具监控下执行。详情见 Setting up a Storm cluster 或参考前文

supervisor

语法:storm supervisor

开启 supervisor 进程。此条命令应当在 daemontools 或者 monit 这样的工具监控下执行。详情见 Setting up a Storm cluster 或参考前文

ui

语法: storm ui

开启 UI 进程。UI为 Storm 集群提供了一个web界面,用来显示运行拓扑的详细统计信息。此条命令应当在 daemontools 或者 monit 这样的工具监控下执行。详情见 Setting up a Storm cluster 或参考前文

dev-zookeeper

语法: storm dev-zookeeper

开启一个新的 zookeeper 服务,通过"dev.zookeeper.path"指定 zookeeper本地目录,"storm.zookeeper.port"指定端口。这只用于开发/测试,启动的Zookeeper实例没有配置为在生产中使用。

get-errors

语法:storm get-errors topology-name

从运行中的拓扑获取最新的错误。返回的结果包含由 component-name 和 component-error 组成的键值对。结果以 json 格式返回。

heartbeats

语法:storm heartbeats [cmd]

list PATH - 列出当前集群状态PATH路径下的心跳节点。 get PATH - 获取PATH下的心跳数据。

kill_workers

语法:storm kill_workers

停止当前 supervisor 下的 workers。该命令应该在 supervisor 节点上运行。如果集群以安全模式运行,那么用户需要在节点上拥有管理权限,才能成功地杀死所有 worker。

list

语法: storm list

列出运行拓扑及其状态。

logviewer

语法:storm logviewer

启动日志查看进程。它提供一个 web界面来查看 storm 的日志文件。该命令应该在 daemontools 或 monitor 等工具的监督下运行。

monitor

语法:storm monitor topology-name [-i interval-secs] [-m component-id] [-s stream-id] [-w [emitted | transferred]]

交互式监控拓扑的吞吐量。可指定poll-interval, component-id, stream-id, watch-item[emitted | transferred]等参数,默认情况下,poll-interval 为4s; 所有组件id均会展示; stream-id is 'default'; watch-item is 'emitted';

node-health-check

语法:storm node-health-check

对本地 supervisor 执行运行健康状况检查。

pacemaker

语法:storm pacemaker

启动 Pacemaker 进程。该命令应该在 daemontools 或 monitor 等工具的监督下运行。

set_log_level

语法:storm set_log_level -l [logger name]=[log level][:optional timeout] -r [logger name] topology-name

动态地修改拓扑日志级别。
其中日志级别为:ALL、TRACE、DEBUG、INFO、WARN、ERROR、FATAL、OFF,timeout为整数秒。
例如:
./bin/storm set_log_level -l ROOT=DEBUG:30 topology-name
将该 topology-name 的日志记录级别设置为DEBUG,持续30秒

./bin/storm set_log_level -l com.myapp=WARN topology-name
将 topology-name此拓扑下的com.app日志级别设置为WARN

./bin/storm set_log_level -l com.myapp=WARN -l com.myOtherLogger=ERROR:123 topology-name
将 topology-name 该拓扑下的 com.myapp 日志级别设为 WARN,而 com.myOtherLogger 设为 ERROR 123秒

./bin/storm set_log_level -r com.myOtherLogger topology-name
清除设置,重新设置到原来级别

shell

语法:storm shell resourcesdir command args

构建jar和上传到 nimbus 使用非 JVM 语言。 例如: storm shell resources/ python topology.py arg1 arg2

version

语法:storm version

打印 Storm 的版本号。

admin

语法:storm admin <cmd> [options]

storm admin 命令提供了几个操作的访问权限,这些操作可以帮助管理员调试或修复集群。

remove_corrupt_topologies:该命令应当运行在 nimbus 节点上,以启动 nimbus 进程的用户执行。它将直接去zookeeper + blobstore 查找由于缺少 blobs 而奔溃的拓扑。它会杀死这些拓扑。

zk_cli [options] - 这个命令将启动一个 zookeeper 客户端登录进 storm zookeeper 实例。该命令应在 nimbus 服务器上运行。

  • -s --server <connection string>: 设置使用的 connection string,默认为 storm connection string.
  • -t --time-out <timeout>: 设置使用的超时时间, 默认为 storm zookeeper 的超时时间。
  • -w --write: 允许写, 默认为 read only。
  • -n --no-root: 不要在默认连接字符串中包含storm root。
  • -j --jaas <jaas_file>: 包含ZK进行身份验证时应该使用的jaas文件,默认通过java.security.auth.login.config配置。 creds <topology_id> - 打印拓扑的凭据密钥。

help

语法:storm help [command]

打印帮助信息或可用命令列表。

该博客仅为初学者自我学习的记录,粗浅之言,如有不对之处,恳请指正。

参考资料

Storm Document -> Command Line Client