海量数据的内存处理引擎有什么好处?

What is the benefit of the in-memory processing engines with a huge amount of data?

如果数据集适合内存,Spark 表现最佳,如果数据集不适合,它将使用磁盘,因此它与 hadoop 一样快。 假设我正在处理 Tera/Peta 字节的数据。有一个小集群。显然,没有办法将其放入内存中。 我的观察是,在大数据时代,如果不是更多的话,大多数数据集都是千兆字节。

内存处理引擎的好处是什么?

我发现 Spark 相对于 Hadoop 的 MapReduce 的优势不仅仅是 in-memory computation engine 甚至来自磁盘的输入。据我所知,至少有两个重大进步:

  1. Spark DAG execution engine 优于 MapReduce two phase execution
  2. Thread level parallel execution 超过 Process level parallel execution

详细一点:

  1. 对于一个复杂的执行计划,Spark 的 DAGScheduler 会在 shuffle 边缘将你的计划分成多个阶段,但你不需要像在 Hadoop 中那样添加虚拟映射阶段,因此,消除了不必要的 reduce 物化输出到 HDFS,然后作为地图输入读回。
  2. Hadoop 的 MapReduce 是众所周知的高延迟,因为 map reduce 中的每个任务都是一个进程,JVM 级别的并行性与 spark 的线程级并行性相比是重量级的。