转载请声明出处: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.
分享到:
相关推荐
其中,分布式计算技术包括MapReduce、Storm、Spark等,而数据采集则涵盖Open API、Crawler等工具。数据平台架构通过这样的多层次设计,实现数据处理的高效和稳定。 在Hadoop系统平台架构方面,卢亿雷详细介绍了其...
在技术栈的搭配方面,Kafka可以与Flume、Storm、Spark、Hadoop、HBase、Elasticsearch(ES)、Solr等进行搭配使用,形成一个大数据处理的完整生态。在生产者(Producer)和消费者(Consumer)端,Kafka支持多种编程...
该平台架构采用了 k8s 作为底层容器编排系统,支持 Storm、Spark 等多种数据处理引擎,实现了实时、离线、机器学习资源共享。该平台架构还具备了秒级弹性扩缩容、自动关闭问题节点、跨机房容灾等特性。 Flink on k8...
经过非常多的坑,一个个的排除编写了这个CDH的安装文档
java查看sun包源码 Please visit Title: sensor数据的实时采集,传输...遇到一些问题都是前人踩过的坑,一步一步都能找到解决的方法。另外我会在写一些文章总结总结。 1. 架构 传感器数据采集依赖硬件平台的MQTT Publi
重构过程中,酷狗也遇到了一些挑战和问题,比如技术选型、系统集成、数据质量保证、实时性需求等,这些问题被称为“踩过的坑”。在文档中,虽然没有详细描述这些问题的具体情况,但我们可以理解在大数据架构的实施...
在稳定性建设方面,G7遇到了如HBase请求超时、长时间Region In Transition (RIT)等问题,通过基础监控、表监控和填过的坑(如限流协处理器的优化,如FixedIntervalRateLimiter和AverageIntervalRateLimiter等),...
阶段七:Storm实时开发 阶段⼋:Spark⽣态体系 阶段九:ElasticSearch 阶段⼗:Docker容器引擎 阶段⼗⼀:机器学习 阶段⼗⼆:超⼤集群调优 阶段⼗三:⼤数据项⽬实战 总结下上⾯的课程内容,⼤数据开发需要学java、...
首先,卢亿雷介绍了AdMaster作为一家数据公司,使用了包括Hadoop、HBase、MapReduce、Pig、Hive、Spark、Storm、ElasticSearch和Pinot在内的大数据技术。这些技术的应用不仅限于数据存储、计算,还包括了数据的处理...