1.下载 apache-storm-1.1.1.tar.gz
http://www.apache.org/dyn/closer.lua/storm/apache-storm-1.1.1/apache-storm-1.1.1.tar.gz
2.上传到soft目录下,解压,修改名称为storm
tar zxf apache-storm-1.1.1.tar.gz
mv apache-storm-1.1.1 storm
export STORM_HOME=/opt/beh/soft/storm
export PATH=$STORM_HOME/bin:$PATH
3.cdh1、cdh2和cdh3部署storm集群,cdh1作为Nimbus节点,cdh2、cdh3作为surpervisor节点。
zookeeper集群要先部署好
4.配置storm,vi storm/conf/storm.yaml
配置完成分发storm到每个节点
## These MUST be filled in for a storm configuration
storm.zookeeper.servers:
- "cdh1"
- "cdh2"
- "cdh3"
storm.local.dir: "/data/storm"
#storm.zookeeper.port: 2181
nimbus.seeds: ["cdh1"]
ui.port: 8080(默认)
supervisor.slots.ports:
- 6700
- 6701
- 6702
- 6703
1.storm.zookeeper.servers:这是Storm集群的Zookeeper集群中的主机列表。
2.如果您的Zookeeper集群使用的端口与默认端口(2181)不同,您应该设置storm.zookeeper.port。
3.storm.local.dir:Nimbus和Supervisor守护进程需要本地磁盘上的一个目录来存储少量的状态(比如jar,confs等等)。 您应该在每台机器上创建该目录(mkdir /home/storm),给予适当的权限,然后使用此配置填写目录位置。 例如:
storm.local.dir: "/home/storm"
4.nimbus.seeds:工作节点(worker nodes)需要知道哪些机器是主机的候选者,以便下载拓扑结构的jar和conf。 例如:
nimbus.seeds: ["192.168.10.101"]
5.supervisor.slots.ports:对于每个工作机器,使用此配置可以配置在该机器上运行的worker数量。 每个worker使用单个端口接收消息,并且此设置定义哪些端口是打开使用的。 如果你在这里定义了五个端口,那么Storm将会分配多达五个worker在这台机器上运行。 如果你定义了三个端口,Storm最多只能运行三个端口。 默认情况下,此设置被配置为在端口6700,6701,6702和6703上运行4个worker。例如:
supervisor.slots.ports:
- 6700
- 6701
- 6702
- 6703
6.Storm提供了一种机制,管理员可以通过配置该机制管理定期运行的脚本,以确定节点是否健康。 管理员可以通过在位于storm.health.check.dir中的脚本中执行任何选择检查来确定节点是否处于健康状态。如果脚本检测到节点处于不健康的状态,则必须以字符串ERROR打印一行到标准输出。 supervisor将定期在健康检查目录中运行脚本并检查输出。 如果脚本的输出包含字符串ERROR,如上所述,supervisor将关闭所有workers并退出。
如果supervisor在监督下运行,则可以调用“/ bin / storm node-health-check”来确定是否应该启动supervisor或者该节点是否不健康。
运行状况检查目录位置可以配置为:
storm.health.check.dir: "healthchecks"
脚本必须具有执行权限。 允许任何给定的健康检查脚本在被标记为失败之前运行的时间由于超时而失败,可以使用以下方法进行配置:
storm.health.check.timeout.ms: 5000
ok,保存退出,配置就算完成了。
配置外部库和环境变量(可选)
如果您需要外部库或自定义插件的支持,可以将这些jar放入extlib /和extlib-daemon /目录中。 请注意,extlib-daemon /目录存储了仅由守护进程(Nimbus,Supervisor,DRPC,UI,Logviewer)使用的jar,例如HDFS和定制调度库。 因此,用户可以配置两个环境变量STORM_EXT_CLASSPATH和STORM_EXT_CLASSPATH_DAEMON,以包含外部类路径和仅守护进程的外部类路径。
启动守护进程
最后一步是启动所有的Storm守护进程。 在监督下运行这些守护进程是非常重要的。 Storm是一个快速失败(fail-fast)系统,意味着只要遇到意外错误,进程就会停止。 Storm的设计可以在任何时候安全停止,并在重新启动过程时正确恢复。 这就是为什么Storm在进程中不保持状态 - 如果Nimbus或Supervisors重新启动,运行的拓扑结构不受影响。 以下是如何运行Storm守护进程:
Nimbus:在Storm主控节点上运行命令bin/storm nimbus &,启动Nimbus后台程序,并放到后台执行。
Supervisor:在Storm各个工作节点上运行命令bin/storm supervisor &。启动Supervisor后台程序,并放到后台执行。 Supervisor守护进程负责启动和停止该机器上的工作进程。
UI: 在Storm主控节点上运行命令bin/storm ui &,启动UI后台程序,并放到后台执行。运行Storm UI(一个您可以从浏览器访问的网站,该网站可以对集群和拓扑进行诊断)。 可以通过浏览您的Web浏览器访问UI:http:// {ui host}:8080。
通过命令jps可以看到相应的进程已经启动起来了。
storm常用命令
通过执行命令storm就可以列出storm的所有命令列表了。
jar命令负责把拓扑提交到集群,并执行它,通过StormSubmitter执行主类。
storm jar path-to-topology-jar class-with-the-main arg1 arg2 argN
path-to-topology-jar是拓扑jar文件的全路径,它包含拓扑代码和依赖的库。 class-with-the-main是包含main方法的类,这个类将由StormSubmitter执行,其余的参数作为main方法的参数。
停用拓扑:
storm deactivte topology-name
启动一个停用的拓扑:
storm activate topology-name
杀死一个拓扑:
storm kill topology-name
再平衡拓扑(再平衡使你重分配集群任务。这是个很强大的命令。比如,你向一个运行中的集群增加了节点。再平衡命令将会停用拓扑,然后在相应超时时间之后重分配工人,并重启拓扑。):
storm rebalance topology-name
expected ‘’, but found BlockMappingStart in ‘reader’, line 13, column 1:nimbus.host:
具体错误信息如下:
/bin/java
Exception in thread "main" java.lang.ExceptionInInitializerError
at backtype.storm.command.config_value.main(config_value.java:40)
Caused by: expected '' , but found BlockMappingStart
in 'reader', line 13, column 1:
nimbus.host: "10.10.10.10"
^
at shade.storm.org.yaml.snakeyaml.parser.ParserImpl$ParseDocumentStart.produce(ParserImpl.java:225)
at shade.storm.org.yaml.snakeyaml.parser.ParserImpl.peekEvent(ParserImpl.java:158)
at shade.storm.org.yaml.snakeyaml.parser.ParserImpl.checkEvent(ParserImpl.java:143)
at shade.storm.org.yaml.snakeyaml.composer.Composer.getSingleNode(Composer.java:108)
at shade.storm.org.yaml.snakeyaml.constructor.BaseConstructor.getSingleData(BaseConstructor.java:120)
at shade.storm.org.yaml.snakeyaml.Yaml.loadFromReader(Yaml.java:481)
at shade.storm.org.yaml.snakeyaml.Yaml.load(Yaml.java:424)
at com.alibaba.jstorm.utils.LoadConf.findAndReadYaml(LoadConf.java:58)
at backtype.storm.utils.Utils.readStormConfig(Utils.java:457)
at backtype.storm.utils.Utils.(Utils.java:112)
... 1 more
Failed to get config java.library.path
None
16:51:02,904 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Could NOT find resource [logback.groovy]
16:51:02,904 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Could NOT find resource [logback-test.xml]
16:51:02,905 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Found resource [logback.xml] at [file:/usr/local/jstorm-2.2.1/conf/logback.xml]
16:51:03,050 |-INFO in ch.qos.logback.classic.joran.action.ConfigurationAction - debug attribute not set
16:51:03,112 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - About to instantiate appender of type [ch.qos.logback.core.ConsoleAppender]
16:51:03,129 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - Naming appender as [console]
16:51:03,179 |-INFO in ch.qos.logback.core.joran.action.NestedComplexPropertyIA - Assuming default type [ch.qos.logback.classic.encoder.PatternLayoutEncoder] for [encoder] property
16:51:03,304 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - About to instantiate appender of type [ch.qos.logback.core.rolling.RollingFileAppender]
16:51:03,309 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - Naming appender as [file]
16:51:03,319 |-ERROR in ch.qos.logback.core.joran.spi.Interpreter@13:19 - no applicable action for [Encoding], current ElementPath is [[configuration][appender][Encoding]]
16:51:03,368 |-INFO in c.q.l.core.rolling.TimeBasedRollingPolicy - No compression will be used
16:51:03,371 |-INFO in c.q.l.core.rolling.TimeBasedRollingPolicy - Will use the pattern /home/kafka-jstorm-logs/kafka-jstorm-%d{yyyy-MM-dd}.log for the active file
16:51:03,377 |-INFO in ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP@7006c658 - The date pattern is 'yyyy-MM-dd' from file name pattern '/home/kafka-jstorm-logs/kafka-jstorm-%d{yyyy-MM-dd}.log'.
16:51:03,377 |-INFO in ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP@7006c658 - Roll-over at midnight.
16:51:03,384 |-INFO in ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP@7006c658 - Setting initial period to Thu Apr 27 15:50:57 CST 2017
16:51:03,399 |-WARN in ch.qos.logback.core.rolling.RollingFileAppender[file] - This appender no longer admits a layout as a sub-component, set an encoder instead.
16:51:03,399 |-WARN in ch.qos.logback.core.rolling.RollingFileAppender[file] - To ensure compatibility, wrapping your layout in LayoutWrappingEncoder.
16:51:03,399 |-WARN in ch.qos.logback.core.rolling.RollingFileAppender[file] - See also http://logback.qos.ch/codes.html#layoutInsteadOfEncoder for details
16:51:03,402 |-INFO in ch.qos.logback.core.rolling.RollingFileAppender[file] - Active log file name: /home/kafka-jstorm-logs/kafka-jstorm.log
16:51:03,402 |-INFO in ch.qos.logback.core.rolling.RollingFileAppender[file] - File property is set to [/home/kafka-jstorm-logs/kafka-jstorm.log]
16:51:03,404 |-INFO in ch.qos.logback.classic.joran.action.LevelAction - ROOT level set to ERROR
16:51:03,404 |-INFO in ch.qos.logback.classic.joran.action.LevelAction - ROOT level set to WARN
16:51:03,404 |-INFO in ch.qos.logback.core.joran.action.AppenderRefAction - Attaching appender named [file] to Logger[ROOT]
16:51:03,405 |-INFO in ch.qos.logback.core.joran.action.AppenderRefAction - Attaching appender named [console] to Logger[ROOT]
16:51:03,405 |-INFO in ch.qos.logback.classic.joran.action.ConfigurationAction - End of configuration.
16:51:03,407 |-INFO in ch.qos.logback.classic.joran.JoranConfigurator@34033bd0 - Registering current configuration as safe fallback point
cannot concatenate 'str' and 'NoneType' objects
Syntax: [jstorm jar topology-jar-path class ...]
Runs the main method of class with the specified arguments.
The jstorm jars and configs in $JSTORM_CONF_DIR/storm.yaml are put on the classpath.
The process is configured so that StormSubmitter
(https://github.com/alibaba/jstorm/wiki/JStorm-Chinese-Documentation)
will upload the jar at topology-jar-path when the topology is submitted.
http://www.cnblogs.com/blackze/p/5906476.html
解决方案:
查看报警信息标识是在nimbus的n上,经试验原来是这几个配置名称前需要加空格。即:
空格nimbus.host: "10.10.10.10"
空格storm.zookeeper.port: 2181
空格storm.local.dir: "date/storm-2.2.1/data"
空格supervisor.slots.ports:
大家配置storm.yaml时一定要注意了。