storm常见问题解答

   最近有朋友给我邮件问一些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数目。

六、Storm UI里spout统计的complete latency的具体含义是什么?为什么emit的数目会是acked的两倍?
这个事实上是storm邮件列表里的一个问题。Storm作者marz的解答:

The complete latency is the time from the spout emitting a tuple to that
tuple being acked on the spout
. So it tracks the time for the whole tuple
tree to be processed.

If you dive into the spout component in the UI, you'll see that a lot of
the emitted/transferred is on the __ack* stream. This is the spout
communicating with the ackers which take care of tracking the tuple trees.

简单地说,complete latency表示了tuple从emit到被acked经过的时间,可以认为是tuple以及该tuple的后续子孙(形成一棵树)整个处理时间。其次spout的emit和transfered还统计了spout和acker之间内部的通信信息,比如对于可靠处理的spout来说,会在emit的时候同时发送一个_ack_init给acker,记录tuple id到task id的映射,以便ack的时候能找到正确的acker task。

文章转自庄周梦蝶  ,原文发布时间 2011-12-19

时间: 2024-11-08 21:59:28

storm常见问题解答的相关文章

Imail常见问题解答

邮件主机常见问题解答 1.问:我安装IMail时全选的是它的默认设置,结果本机的FQDN(完全合格域名)成了默认的邮件主机名,我该如何修改它呢? 在IMail管理器中,选"localhost→右键→Add Host",即可进入邮件主机的配置窗口.然后选中你的机器的IP地址,将其对应的"Official Host Name"改成你需要的域名,再按"Save"保存,遇有提示一律选"Yes",最后用"Exit"退

Win8中SkyDrive应用 常见问题解答

Win8中SkyDrive应用 常见问题解答.以下是一些有关 Windows 8 和 Windows RT 的 SkyDrive 应用的常见问题解答. 我能否查看其他人与我共享的文件和文件夹? 如果他人访问 SkyDrive.com 并通过向你发送包含链接的电子邮件来共享文件或文件夹,你可以在 SkyDrive 应用中查看该文件或文件夹. 点击或单击屏幕顶部的箭头,然后选择"共享". 在对项目进行共享之后,可能需要几分钟时间它们才会出现在该应用中. 如何查看我最近打开过的 Office

win8本地安全策略常见问题解答

下面是关于win8本地安全策略的常见问题解答,大家可以参考一下. 怎么打开"Windows本地安全策略"啊?答:"搜索"键入"secpol.msc"后回车. 如何防止黑客或恶意程序暴力破解我的系统密码?答:众所周知,暴力破解Windows密码实质上是通过穷举算法来实现,尤其是密码过于简单的系统,暴力破解的方法还是比较实用的.有一点需要我们注意,这个问题的关键在于Windows是否允许远程客户端或恶意程序来进行用户名和密码的穷举,如果不允许,恶意程

Windows 7有关睡眠和休眠的常见问题解答

以下是一些有关睡眠和休眠的常见问题解答. 全部隐藏 睡眠.休眠和混合睡眠之间有什么区别? "睡眠"是一种节能状态,当您希望再次开始工作时,可使计算机快速恢复全功率工作(通常在几秒钟之内).让计算机进入睡眠状态就像暂停 DVD 播发机一样:计算机会立即停止工作,并做好继续工作的准备. "休眠"是一种主要为便携式计算机设计的电源节能状态.睡眠通常会将工作和设置保存在内存中并消耗少量的电量,而休眠则将打开的文档和程序保存到硬盘中,然后关闭计算机.在 Windows 使用的

天易成网管软件上网行为管理常见问题解答

===天易成网管软件常见问题解答(FAQ)=== 问题1:关于5种模式的说明 解答:参见论坛置顶的帖子.http://www.tyc100.com/tycbbs/showtopic-6.aspx 问题2:适用的操作系统 解答:Windows XP / Windows Vista / Windows Server 2003 / Windows 7 问题3:出现"与监控端连接失败"的提示,如何解决? 解答: 根据以下步骤检查: 1.登录时,勾选通过IP登录,IP输入127.0.0.1. 2

网管软件常见问题解答——天易成

=== 天易成网管软件常见问题解答 (FAQ)=== 问题2:适用的操作系统 解答:Windows XP / Windows Vista / Windows Server 2003 / Windows 7 问题3:出现"与监控端连接失败"的提示,如何解决? 解答: 根据以下步骤检查: 1.登录时,勾选通过IP登录,IP输入127.0.0.1. 2.如果是XP系统,点击开始菜单->控制面板->管理工具/性能和维护->服务,找到TYCNetManageService,查看

Sqlite常见问题解答教程

Sqlite常见问题解答教程 一.    SQLite 特点: SQLite是一款轻型的数据库,它的设计目标是嵌入式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了.它能够支持Windows/Linux/Unix等等主流的操作系统,同时能够跟很多程序语言相结合,比如Tcl.PHP.Java等,还有ODBC接口,同样比起Mysql.PostgreSQL这两款开源世界著名的数据库管理系统来讲,它的处理速度比他们都快.SQLite虽然很小巧,

Java线程池的几种实现方法及常见问题解答_java

工作中,经常会涉及到线程.比如有些任务,经常会交与线程去异步执行.抑或服务端程序为每个请求单独建立一个线程处理任务.线程之外的,比如我们用的数据库连接.这些创建销毁或者打开关闭的操作,非常影响系统性能.所以,"池"的用处就凸显出来了. 1. 为什么要使用线程池 在3.6.1节介绍的实现方式中,对每个客户都分配一个新的工作线程.当工作线程与客户通信结束,这个线程就被销毁.这种实现方式有以下不足之处: •服务器创建和销毁工作的开销( 包括所花费的时间和系统资源 )很大.这一项不用解释,可以

谷歌新搜索引擎Caffeine常见问题解答

导语:<PC World>网络版今天撰文,对Caffeine的一些常见问题做了解答. 以下为全文: 谷歌周一展示了"下一代架构"的网络搜索平台"Caffeine(咖啡因)",该公司表示,最新搜索引擎的速度更快.更为精确,其搜索内容也较当前的谷歌搜索更为广泛. 谷歌搜索目前在网络搜索市场占据垄断地位,网络流量监测机构Hitwise的数据表明,6月份谷歌在美国搜索市场的份额约为四分之三. 以下是关于Caffeine的一些常见问题解答: 问:Caffeine究