storm默认参数配置
storm默认配置参数在defaults.yaml里,默认参数配置请参考https://github.com/apache/storm/blob/master/conf/defaults.yaml
相关参数解释
Storm配置项 | 备 注 |
java.library.path | Storm本身依赖包的路径,存在多个时用冒号分隔 |
storm.local.dir | Storm使用的本地文件系统目录(必须存在并且Storm进程可读写) |
storm.ZooKeeper.servers | Storm集群对应的ZooKeeper集群的主机列表 |
storm.ZooKeeper.port | Storm集群对应的ZooKeeper集群的服务端口,ZooKeeper默认端口为2181 |
storm.ZooKeeper.root | Storm的元数据在ZooKeeper中存储的根目录 |
storm.cluster.mode | Storm运行模式,集群模式需设置为distributed(分布式的) |
storm.messaging.transport | Storm的消息传输机制,使用Netty作为消息传输时设置成backtype.storm.messaging.netty.Context |
Nimbus.host | 整个Storm集群的Nimbus节点 |
Nimbus.Supervisor.timeout.secs | Storm中每个被发射出去的消息处理的超时时间,该时间影响到消息的处理,同时在Storm UI上杀掉一个Topology时的默认时间(kill动作发出后多长时间才会真正将该Topology杀掉) |
ui.port | Storm自带UI,以HTTP服务形式支持访问,此处设置该HTTP服务的端口(非root用户端口号需要大于1024) |
ui.childopts | Storm UI进程的Java参数设置(对Java进程的约束都可以在此设置,如内存等) |
logviewer.port | 此处用于设置该Log Viewer进程的端口(Log Viewer进程也为HTTP形式,需要运行在每个Storm节点上) |
logviewer.childopts | Log Viewer进程的参数设置 |
logviewer.appender.name | Storm log4j的appender,设置的名字对应于文件storm-0.9.0.1/logback/ cluster.xml中设置的appender,cluster.xml可以控制Storm logger的级别 |
Supervisor.slots.ports | Storm的Slot,最好设置成OS核数的整数倍;同时由于Storm是基于内存的实时计算,Slot数不要大于每台物理机可运行Slot个数:(物理内存-虚拟内存)/单个Java进程最大可占用内存数 |
worker.childopts | Storm的Worker进程的Java限制,有效地设置该参数能够在Topology异常时进行原因分析: -Xms1024m -Xmx1024m -XX:+UseConcMarkSweepGC 其中:Xms为单个Java进程最小占用内存数,Xmx为最大内存数,设置HeapDumpOnOutOfMemoryError的好处是,当内存使用量超过Xmx时,Java进程将被JVM杀掉同时会生成java_pidxxx.hprof文件;使用MemoryAnalyzer分析hprof文件将能够分析出内存使用情况从而进行相应的调整、分析是否有内存溢出等情况 |
zmq.threads | Storm 0.9.0.1也支持基于ZMQ的消息传递机制,此处为对ZMQ的参数设置;建议使用默认值 |
storm.messaging.netty. | 传输的buffer大小,默认1 MB,当Spout发射的消息较大时,此处需要对应调整 |
storm.messaging.netty. storm.messaging.netty. storm.messaging.netty. | 这几个参数是关于使用Netty作为底层消息传输时的相关设置,需要重视,否则可能由于bug(https://issues.apache. org/jira/browse/STORM-187)而引起错误java.lang.IllegalArgumentException: timeout value is negative |
Topology.debug | 该参数可以在Topology中覆盖,表示该Topology是否运行于debug模式。运行于该模式时,Storm将记录Topology中收发消息等的详细信息,线上环境不建议打开 |
Topology.acker.executors | Storm通过Acker机制保证消息的不丢失,此参数用于设置每个Topology的Acker数量,由于Acker基本消耗的资源较小,强烈建议将此参数设置在较低的水平(我们的环境中设置为1),可在Topology中进行覆盖 |
Topology.max.spout.pending | 一个Spout Task中处于pending状态的最大的Tuple数量。该配置应用于单个Task,而不是整个Spout或Topology,可在Topology中进行覆盖 |
更多参数解释请参考:http://www.cnblogs.com/chengxin1982/p/4001275.html
注意
需要注意的是,Storm的配置文件为yaml文件,配置项后面必须跟一个空格才能跟配置值。
除了conf/storm.yaml配置文件之外,还有两个需要注意的配置。
(1)log4j2/cluster.xml文件,其中可以配置Storm的日志级别矩阵信息等。
(2)操作系统的配置(通过ulimit -a查看),其中有两项信息需要配置。
open files:当前用户可以打开的文件描述符数。
max user processes:当前用户可以运行的进程数,此参数太小将引起Storm的一个错误,如下所示。
java.lang.OutOfMemoryError: unable to create new native thread
at java.lang.Thread.start0(Native Method) [na:1.6.0_35]
at java.lang.Thread.start(Thread.java:640) [na:1.6.0_35]
at java.lang.UNIXProcess$1.run(UNIXProcess.java:141) ~[na:1.6.0_35]
at java.security.AccessController.doPrivileged(Native Method) ~[na:1.6.0_35]
操作系统配置信息如图3-2所示。
默认情况下,Storm启动worker进程时,JVM的最大内存是768M。
但我在使用过程中,由于会在Bolt中加载大量数据,768M内存无法满足需求,会导致内存溢出程序崩溃。
经过研究发现,可以通过在Strom的配置文件storm.yaml中设置worker的启动参数:
worker.childopts: "-Xmx2048m"
该参数会在启动时传递给JVM,然后就可以在worker中使用2048m内存了。