那些storm的坑坑

标签: storm | 发表时间:2014-10-24 17:01 | 作者:BlackWing
出处:http://www.iteye.com
转载请声明出处:http://blackwing.iteye.com/blog/2147633

在使用storm的过程中,感觉它还是不如hadoop那么成熟。当然,它的流式处理能力挺让人眼前一亮,以前做的个性化推荐都是离线计算,现在总算把实时部分也加上了。

总结一下storm使用的些心得:
1.尽量把大量数据处理行为分拆成多个处理component。
2.storm不擅长保存状态,一般需要借助如redis这些外部存储比较方便实现逻辑。
3.其实跟1有点类似,不用在component(例如spout或者bolt)中保存大量数据,因为很容易撑爆内存,导致worker被kill掉。

下面是我遇到的一些坑:
1. 出现错误:GC overhead limit exceeded
http://www.slideshare.net/miguno/apache-storm-09-basic-training-verisign
这里的117页看到:
“OOM: GC overhead limit exceeded” exception, then typically your upstream spouts/bolts are outpacing your downstream bolts.

意思是说,上游的spout或者boltemit的数据速度超过下游bolt的处理速度。因此导致很多emit出去的tuple被缓存起来,积累到一定程度后就会撑爆内存。

PS:看不到原ppt的可以到附件下载。

2. 需要在component间传输的类,外部类如果对内部类有引用,则内部类也要实现串行化
public Class A implements Serializable  {
B tmp = new B();
Class B{
....
}
}


如果A要被emit出去,则B也有串行化,不然下一个接收bolt会包tmp变量为null错误。
public Class A implements Serializable  {
B tmp = new B();
Class B implements Serializable{
....
}
}


3. spout、bolt中初始化尽量放到prepare()中进行
public class ReadLogsFromFileEmitSetSpout extends BaseRichSpout {

	Configuration conf = new Configuration();
......

}

这个spout在初始化时就会报错:java.io.NotSerializableException
原因是supervisor先实例化这个spout,再传输到具体的worker机器后,跟着调用其prepare()方法来初始化spout,那么如果在spout声明变量时就初始化变量,而该变量是不能串行化的,则会报错。以下是来自google的原文解释:
The supervisor instantiates the bolts, sends them to the workers, and then calls prepare() on all of them. Therefore, anything that isn't serializable that is instantiated before prepare() causes this process to fail.








已有 0 人发表留言,猛击->> 这里<<-参与讨论


ITeye推荐



相关 [storm] 推荐:

storm简介

- - 搜索技术博客-淘宝
伴随着信息科技日新月异的发展,信息呈现出爆发式的膨胀,人们获取信息的途径也更加多样、更加便捷,同时对于信息的时效性要求也越来越高. 举个搜索场景中的例子,当一个卖家发布了一条宝贝信息时,他希望的当然是这个宝贝马上就可以被卖家搜索出来、点击、购买啦,相反,如果这个宝贝要等到第二天或者更久才可以被搜出来,估计这个大哥就要骂娘了.

Storm Trident 学习

- - 小火箭
Storm支持的三种语义:. 至少一次语义的Topology写法. 参考资料: Storm消息的可靠性保障 Storm提供了Acker的机制来保证数据至少被处理一次,是由编程人员决定是否使用这一特性,要使用这一特性需要:. 在Spout emit时添加一个MsgID,那么ack和fail方法将会被调用当Tuple被正确地处理了或发生了错误.

Storm实战之WordCount

- - 编程语言 - ITeye博客
 在全面介绍Storm之前,我们先通过一个简单的Demo让大家整体感受一下什么是Storm. 本地模式(Local Mode): 即Topology(相当于一个任务,后续会详细讲解)  运行在本地机器的单一JVM上,这个模式主要用来开发、调试. 远程模式(Remote Mode):在这个模式,我们把我们的Topology提交到集群,在这个模式中,Storm的所有组件都是线程安全的,因为它们都会运行在不同的Jvm或物理机器上,这个模式就是正式的生产模式.

storm常见问题解答

- - BlogJava-庄周梦蝶
    最近有朋友给我邮件问一些storm的问题,集中解答在这里. 一、我有一个数据文件,或者我有一个系统里面有数据,怎么导入storm做计算. 你需要实现一个Spout,Spout负责将数据emit到storm系统里,交给bolts计算. 怎么实现spout可以参考官方的kestrel spout实现:.

Storm 实时性分析

- - CSDN博客架构设计推荐文章
都说Storm是一个实时流处理系统,但Storm的实时性体现在什么方面呢. 首先有一个前提:这里的实时性和我们通常所说的实时系统(芯片+汇编或C编写的实时处理软件)的实时性肯定是没法比的,也不是同一个概念. 这里的实时性应该是一个相对的实时性(相对于Hadoop之类 ). 总结一下,Storm的实时性可能主要体现在:.

那些storm的坑坑

- - 开源软件 - ITeye博客
转载请声明出处:http://blackwing.iteye.com/blog/2147633. 在使用storm的过程中,感觉它还是不如hadoop那么成熟. 当然,它的流式处理能力挺让人眼前一亮,以前做的个性化推荐都是离线计算,现在总算把实时部分也加上了. 总结一下storm使用的些心得:. 1.尽量把大量数据处理行为分拆成多个处理component.

storm准实时应用

- - CSDN博客推荐文章
1 应用背景: 需要实时统计用户的登陆数,在线人数,活跃时间,下载等指标的数据,或者清洗后移到hdfs上.         1) 客户端产生数据---.         2) kafka-生产者实时采集数据(保留7天)-----.         3) storm实时消费数据,处理数据.         4)把实时数据统计结果缓存到memcached 中.

Storm核心概念剖析

- - 互联网 - ITeye博客
最近团队中有分析的场景,用到了JStorm来做数据的实时分析,于是花时间对于一些概念做了了解. 这个的话出来应该有几年时间了,阿里巴巴也重写了一套JStorm,核心的类名都是服用的Storm的,他是一套实时数据处理系统,容错行好,然后足够稳定,目前很多数据实时分析的场景,选择Storm的越来越多了.

Kafka+Storm+HDFS整合实践

- -
原文地址: http://shiyanjun.cn/archives/934.html. 在基于Hadoop平台的很多应用场景中,我们需要对数据进行离线和实时分析,离线分析可以很容易地借助于Hive来实现统计分析,但是对于实时的 需求Hive就不合适了. 实时应用场景可以使用Storm,它是一个实时处理系统,它为实时处理类应用提供了一个计算模型,可以很容易地进行编程处理.

storm高并发UV统计

- - 企业架构 - ITeye博客
统计高并发UV可行的方案(类似WordCount的计算去重word总数):. bolt1通过fieldGrouping 进行多线程局部汇总,下一级blot2进行单线程保存session_id和count数到Map且进行遍历,可以得到:. Pv、UV、访问深度(按每个session_id 的浏览数).