海量数据的内存处理引擎有什么好处?
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
甚至来自磁盘的输入。据我所知,至少有两个重大进步:
- Spark
DAG execution engine
优于 MapReduce two phase execution
Thread level parallel execution
超过 Process level parallel execution
详细一点:
- 对于一个复杂的执行计划,Spark 的 DAGScheduler 会在 shuffle 边缘将你的计划分成多个阶段,但你不需要像在 Hadoop 中那样添加虚拟映射阶段,因此,消除了不必要的 reduce 物化输出到 HDFS,然后作为地图输入读回。
- Hadoop 的 MapReduce 是众所周知的高延迟,因为 map reduce 中的每个任务都是一个进程,JVM 级别的并行性与 spark 的线程级并行性相比是重量级的。
如果数据集适合内存,Spark 表现最佳,如果数据集不适合,它将使用磁盘,因此它与 hadoop 一样快。 假设我正在处理 Tera/Peta 字节的数据。有一个小集群。显然,没有办法将其放入内存中。 我的观察是,在大数据时代,如果不是更多的话,大多数数据集都是千兆字节。
内存处理引擎的好处是什么?
我发现 Spark 相对于 Hadoop 的 MapReduce 的优势不仅仅是 in-memory computation engine
甚至来自磁盘的输入。据我所知,至少有两个重大进步:
- Spark
DAG execution engine
优于 MapReducetwo phase execution
Thread level parallel execution
超过Process level parallel execution
详细一点:
- 对于一个复杂的执行计划,Spark 的 DAGScheduler 会在 shuffle 边缘将你的计划分成多个阶段,但你不需要像在 Hadoop 中那样添加虚拟映射阶段,因此,消除了不必要的 reduce 物化输出到 HDFS,然后作为地图输入读回。
- Hadoop 的 MapReduce 是众所周知的高延迟,因为 map reduce 中的每个任务都是一个进程,JVM 级别的并行性与 spark 的线程级并行性相比是重量级的。