有什么区别以及如何在分布式队列和分布式计算平台之间进行选择?

时间:2015-03-18 02:56:44

标签: hadoop mapreduce apache-spark distributed distributed-computing

有很多文件需要实时处理两台计算机,我想将它们分发到两台计算机上,这些任务需要尽快完成(意味着实时处理),我在考虑低于计划:

(1)像Gearman

这样的分布式队列

(2)像hadoop / spark / storm / s4等分布式计算平台

我有两个问题

(1)(1)和(2)之间的优缺点是什么?

(2)如何选择(2),hadoop?spark?storm?s4?或其他?

谢谢!

也许我没有清楚地描述这个问题。在大多数情况下,有1000-3000个文件具有相同的格式,这些文件是独立的,您不需要关心他们的顺序,一个文件的大小可能是几十到几百KB,将来,文件的数量和单个文件的大小会上升。我编写了一个程序,它可以处理文件并获取数据,然后将数据存储在mongodb中。现在只有两台计算机,我只想要一个可以快速处理这些文件的解决方案(尽快)并且易于扩展和维护

分布式队列很容易在我的情况下使用bur可能难以扩展和维护,hadoop / spark在两台计算机中“大”但容易扩展和维护,这更好,我很困惑。

2 个答案:

答案 0 :(得分:1)

这很大程度上取决于你处理的性质#34;。这里适用的一些维度是:

  1. 记录是否彼此独立,或者您需要某种形式的聚合?即:你需要一些数据一起去吗?比如,来自单个用户帐户的所有交易。
  2. 您是否处理CPU绑定?记忆力?文件系统绑定了吗?
  3. 什么会坚持下去?你将如何坚持下去?
  4. 每当您看到新数据时,是否需要重新计算任何旧数据?
  5. 你可以丢弃数据吗?
  6. 数据是否有点有序?
  7. 预期负荷是多少?
  8. 一个好的解决方案将取决于这些的答案(可能还有其他我忘记了)。例如:

    1. 如果计算很简单,但存储和检索是主要问题,那么您应该查看分布式数据库而不是任何一个选择。
    2. 通过将事物记录到像HDFS这样的分布式文件系统中然后使用Spark运行批量计算(应该通常比普通的hadoop更好),可能是最好的服务。
    3. 可能没有,您可以在收到数据时使用Spark Streaming进行处理。
    4. 如果订单和一致性很重要,那么发布/订阅体系结构可能会更好,特别是如果您的负载可能超过两台服务器可以处理的负载,但是您的工作人员可以赶上高峰和慢速工作时间
    5. 等。那么答案是"你如何选择?"通过仔细查看特定问题的约束条件,估算系统的负载需求并选择更符合这些问题的解决方案"。所有这些解决方案和框架都支配着其他解决方案和框架,这就是为什么他们都活着并且都在踢。选择权取决于您愿意/能够做出的权衡。

      希望它有所帮助。

答案 1 :(得分:0)

首先,dannyhow是对的 - 这不是实时处理的内容。有一本很棒的书http://www.manning.com/marz/说了很多关于lambda archtecture的书。

您提到的两种方式完全不同,并且与单词#34; task"的定义相关联。例如,Spark将为你完成一项完整的工作并将其划分为" tasks",但是一项任务的结果对你来说没用,你还需要等待整个工作完成。您可以创建处理同一数据集的小作业,并使用spark的缓存来加快速度。但是后来你从分销中获得了很多好处(如果必须一个接一个地运行)。

文件大吗?彼此之间是否有某种联系?如果是的话,我会选择Spark。如果不是,则分布式队列。