Home 数据分析 [转] Storm配置项详解

[转] Storm配置项详解

by zinan

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 log4jappender,设置的名字对应于文件storm-0.9.0.1/logback/ cluster.xml中设置的appendercluster.xml可以控制Storm logger的级别

Supervisor.slots.ports

StormSlot,最好设置成OS核数的整数倍;同时由于Storm是基于内存的实时计算,Slot数不要大于每台物理机可运行Slot个数:(物理内存虚拟内存)/单个Java进程最大可占用内存数

worker.childopts

StormWorker进程的Java限制,有效设置该参数能够在Topology异常时进行原因分析:

-Xms1024m -Xmx1024m -XX:+UseConcMarkSweepGC
-XX: +UseCMSInitiatingOccupancyOnly 
-XX:CMSInitiatingOccupancyFraction=70 -XX:+HeapDumpOnOutOfMemoryError

中: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_size netty

传输的buffer大小,默认1 MB,当Spout发射的消息较大时,此处需要对应调整

storm.messaging.netty.
max_retries

storm.messaging.netty.

max_wait_ms

storm.messaging.netty.

min_wait_ms

几个参数是关于使用Netty作为底层消息传输时的相关设置,需要重视,否则可能由于bughttps://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]

默认情况下,Storm启动worker进程时,JVM的最大内存是768M。但我在使用过程中,由于会在Bolt中加载大量数据,768M内存无法满足需求,会导致内存溢出程序崩溃。经过研究发现,可以通过在Strom的配置文件storm.yaml中设置worker的启动参数: worker.childopts: “-Xmx2048m”该参数会在启动时传递给JVM,然后就可以在worker中使用2048m内存了。

 

 

 

1 comment

You may also like

1 comment

test 2018年6月1日 - 上午3:35

牛牛,你这个是不是只能再xp上运行呀?

Reply

Leave a Comment