有很多文件需要在两台计算机上实时处理,我想把它们分发到两台计算机上,这些任务需要尽快完成(即实时处理),我在考虑下面的计划:
(1)类似Gearman的分布式队列
(2)分布式计算平台,如hadoop/spark/storm/s4等
我有两个问题
(1) (1)和(2)的优势和劣势是什么?
(2)如何选择(2),hadoop?spark?storm?S4?还是其他?
谢谢!
也许我没有清楚地描述这个问题。在大多数情况下,有1000-3000个相同格式的文件,这些文件是独立的,你不需要关心它们的顺序,一个文件的大小可能是几十到几百KB,并且在未来,文件的数量和大小将会增加。我已经写了一个程序,它可以处理文件并提取数据,然后将数据存储在mongodb中。现在只有两台计算机,我只想要一个解决方案,可以处理这些文件与程序快速(尽快),并易于扩展和维护
分布式队列在我的例子中很容易使用,但可能很难扩展和维护,hadoop/spark在两台计算机中太“大”了,但很容易扩展和维护,这更好,我很困惑。
发布于 2015-03-18 21:40:48
这在很大程度上取决于你的“处理”的性质。这里适用的一些维度包括:
data somewhat ordered?
expected?
一个好的解决方案将取决于这些问题的答案(可能还有我忘记的其他问题)。例如:
运行批处理计算(通常应该比普通的
等等。那么“你是如何选择的?”是“通过仔细查看特定问题的约束,估计系统的负载需求,并选择更好地匹配这些需求的解决方案”。所有这些解决方案和框架都主导着其他解决方案和框架,这就是为什么它们都是有活力的。选择完全取决于你愿意/能够做出的权衡。
希望能有所帮助。
发布于 2015-03-18 17:31:31
首先,dannyhow是对的--这不是实时处理的内容。有一本很棒的书http://www.manning.com/marz/,它讲了很多关于lambda架构的内容。
你提到的两种方式服务于完全不同的目的,并与“任务”一词的定义相联系。例如,Spark会把你为他得到的整个工作分成“任务”,但一个任务的结果对你来说是无用的,你仍然需要等待整个工作完成。您可以创建处理同一数据集的小型作业,并使用spark的缓存来加快速度。但是,您不会从分发中获得太多好处(如果它们必须一个接一个地运行)。
文件大吗?它们之间有某种程度的联系吗?如果是的话,我会选择Spark。如果否,则为分布式队列。
https://stackoverflow.com/questions/29113383
复制相似问题