Hadoop的MapReduce的Map Task和Reduce Task都是进程级别的
Spark Task则是基于线程模型的
多进程模型和多线程模型
- 多进程模型和多线程模型,指的是同一个节点上多个任务的运行模式。无论是MapReduce还是Spark,整体上看都是多进程的:MapReduce应用程序是由多个独立的Task进程组成的;Spark应用程序的运行环境是由多个独立的Executor进程(每个应用程序使用一个Executor进程)构建的临时资源池构成的
- 多进程模型便于细粒度控制每个任务占用的资源,但会消耗较多的启动时间,不适合运行低延迟类型的作业。 而多线程模型则相反,该模型使得Spark很适合运行低延迟类型的作业。
异步并发模型
Apache Spark的高性能一定程度上取决于它采用的异步并发模型(这里指server/driver端采用的模型),这与Hadoop 2.0(包括YARN和MapReduce)是一致的。Hadoop 2.0自己实现了类似Actor的异步并发模型,实现方式是epoll+状态机,而Apache Spark则直接采用了开源软件Akka,该软件实现了Actor模型,性能非常高。尽管二者在server端采用了一致的并发模型,但在任务级别(特指 Spark任务和MapReduce任务)上却采用了不同的并行机制:Hadoop MapReduce采用了多进程模型,而Spark采用了多线程模型。

<

本文比较了MapReduce和Spark的任务模型。MapReduce采用多进程模型,每个Task运行在独立JVM中,启动代价大,适合批量计算;而Spark采用多线程的Executor模型,任务启动快,内存复用高效,适合低延迟和迭代计算,但资源控制不如MapReduce精细。
最低0.47元/天 解锁文章
443

被折叠的 条评论
为什么被折叠?



