Apache Spark是否适用于大量小型,快速计算和一些大型非交互式计算?

Jan*_*ski 12 architecture cloud platform cluster-computing apache-spark

我正在评估Apache Spark,看它是否是满足以下要求的好平台:

  • 云计算环境.
  • 商品硬件.
  • 分布式数据库(例如HBase),可能有几PB的数据.
  • 需要快速完成的大量同步小计算(在几秒钟内).小意味着1-100 MB的数据.
  • 一些不需要快速完成的大型计算(小时很好).大意味着10-1000 GB的数据.
  • 很少,非常大的计算不需要快速完成(天很好).非常大意味着10-100 TB的数据.
  • 所有计算都是相互独立的.
  • 某些计算的实时数据流传入.
  • 涉及机器学习.

阅读了一些关于Spark的内容,我发现了以下优点:

  • 在商品硬件和HBase/Cassandra上运行良好.
  • MLlib用于机器学习.
  • Spark Streaming用于实时数据.
  • 虽然MapReduce似乎并不是必需的,但也许它可以加快速度,并且如果将来需求变得更紧,我们会让它们适应.

这些是我仍然存在的主要问题:

  • 它可以非常快速地进行小型计算吗?
  • 它会对大量同时进行的小型计算进行负载平衡吗?

我也想知道我是不是一般都没有尝试将Spark用于不是专门设计的目的,而不是使用主要优点:MapReduce和内存中的RDD.如果是这样,我也欢迎提出替代方案的建议.非常感谢!

Dan*_*bos 7

小计算速度快

我们确实在交互式设置中使用Spark,作为Web界面的后端.亚秒级延迟是可能的,但并不容易.一些技巧:

  • SparkContext在启动时创建.需要几秒钟才能建立连接并让执行者在工作人员上启动.
  • 你提到了许多同步计算.而不是每个用户拥有自己SparkContext和自己的执行器集,只有每个人都可以共享的一个.在我们的例子中,多个用户可以同时使用Web界面,但只有一个Web服务器.
  • 在内存缓存的RDD上运行.序列化可能太慢了,所以使用默认缓存,而不是Tachyon.如果无法避免序列化,请使用Kryo.它比库存Java序列化更快.
  • RDD.sample自由使用.无偏见的样本通常足以进行交互式探索.

负载均衡

负载均衡操作是一个很好的问题.我们也必须解决这个问题,但还没有完成.在默认设置中,所有内容都以先进先出的方式处理.每个操作都会获得集群的全部资源,下一个操作必须等待.如果每个操作都很快,这很好,但如果不是,那该怎么办?

另一种公平调度程序可能解决了这个问题,但我还没有尝试过.

Spark还可以将调度卸载到YARN或Mesos,但我没有这方面的经验.我怀疑他们是否符合您的延迟要求.