7

storm常见问题解答

 3 years ago
source link: https://blogread.cn/it/article/4711?f=hot1
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

storm常见问题解答

浏览:2447次  出处信息
    最近有朋友给我邮件问一些storm的问题,集中解答在这里。

    一、我有一个数据文件,或者我有一个系统里面有数据,怎么导入storm做计算?

    你需要实现一个Spout,Spout负责将数据emit到storm系统里,交给bolts计算。怎么实现spout可以参考官方的kestrel spout实现:

    https://github.com/nathanmarz/storm-kestrel

    如果你的数据源不支持事务性消费,那么就无法得到storm提供的可靠处理的保证,也没必要实现ISpout接口中的ack和fail方法。

    二、Storm为了保证tuple的可靠处理,需要保存tuple信息,这会不会导致内存OOM?

    Storm为了保证tuple的可靠处理,acker会保存该节点创建的tuple id的xor值,这称为ack value,那么每ack一次,就将tuple id和ack value做异或(xor)。当所有产生的tuple都被ack的时候, ack value一定为0。这是个很简单的策略,对于每一个tuple也只要占用约20个字节的内存。对于100万tuple,也才20M左右。关于可靠处理看这个:

    https://github.com/nathanmarz/storm/wiki/Guaranteeing-message-processing

    三、Storm计算后的结果保存在哪里?可以保存在外部存储吗?

    Storm不处理计算结果的保存,这是应用代码需要负责的事情,如果数据不大,你可以简单地保存在内存里,也可以每次都更新数据库,也可以采用NoSQL存储。storm并没有像s4那样提供一个Persist API,根据时间或者容量来做存储输出。这部分事情完全交给用户。

    数据存储之后的展现,也是你需要自己处理的,storm UI只提供对topology的监控和统计。

    四、Storm怎么处理重复的tuple?

    因为Storm要保证tuple的可靠处理,当tuple处理失败或者超时的时候,spout会fail并重新发送该tuple,那么就会有tuple重复计算的问题。这个问题是很难解决的,storm也没有提供机制帮助你解决。一些可行的策略:

    (1)不处理,这也算是种策略。因为实时计算通常并不要求很高的精确度,后续的批处理计算会更正实时计算的误差。

    (2)使用第三方集中存储来过滤,比如利用mysql,memcached或者redis根据逻辑主键来去重。

    (3)使用bloom filter做过滤,简单高效。

    五、Storm的动态增删节点

    我在storm和s4里比较里谈到的动态增删节点,是指storm可以动态地添加和减少supervisor节点。对于减少节点来说,被移除的supervisor上的worker会被nimbus重新负载均衡到其他supervisor节点上。在storm 0.6.1以前的版本,增加supervisor节点不会影响现有的topology,也就是现有的topology不会重新负载均衡到新的节点上,在扩展集群的时候很不方便,需要重新提交topology。因此我在storm的邮件列表里提了这个问题,storm的开发者nathanmarz创建了一个issue 54并在0.6.1提供了rebalance命令来让正在运行的topology重新负载均衡,具体见:

    https://github.com/nathanmarz/storm/issues/54

    和0.6.1的变更:

    http://groups.google.com/group/storm-user/browse_thread/thread/24a8fce0b2e53246

    storm并不提供机制来动态调整worker和task数目。

dennis 2011-12-19 15:25 发表评论

觉得文章有用?立即:

和朋友一起 共学习 共进步!

建议继续学习:

QQ技术交流群:445447336,欢迎加入!
扫一扫订阅我的微信号:IT技术博客大学习

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK