翻译: https://www.cloudera.com/documentation/enterprise/latest/topics/cdh_ig_spark_apps.html
版本: 5.14.2
Spark应用程序模型
Apache Spark被广泛认为是在Apache Hadoop集群上进行通用数据处理的MapReduce的后继者。与MapReduce应用程序一样,每个Spark应用程序都是一个自包含的计算,它运行用户提供的代码来计算结果。与MapReduce作业一样,Spark应用程序可以使用多个主机的资源。但是,Spark比MapReduce有很多优点。
在MapReduce中,最高级别的计算单位是 job 。job 加载数据,应用map函数,shuffle ,应用reduce 函数,并将数据写回持久存储。在Spark中,最高级别的计算单位是application。Spark application 可用于单个批处理作业,具有多个作业的交互式会话或持续满足请求的长期服务。Spark工作可以不仅仅包含一个map和 reduce 。
MapReduce为每个任务启动一个进程。相比之下,即使Spark应用程序没有运行作业,Spark应用程序也可以为其运行进程。而且,多个任务可以在同一执行器内运行。两者结合起来可以实现极快的任务启动时间以及内存数据存储,从而比MapReduce的性能有数量级的提升。
Spark执行模型
Spark应用程序执行涉及运行时概念,如driver 、 executor 、 task 、 job and stage 。理解这些概念对编写快速且资源高效的Spark程序至关重要。
在运行时,Spark应用程序映射到单个 driver 进程和一组分布在集群中主机上的 executor 进程。
driver 进程管理job flow 和调度schedule task ,并且在应用程序运行的整个过程中都可用。通常,此驱动程序进程与用于启动作业的客户端进程相同,但在YARN上运行时,驱动程序可以在群集中运行。在交互模式下,shell本身就是驱动程序进程。
executor 负责以task的形式执行工作,以及存储您缓存的任何数据。执行器生存期取决于是否启用动态分配dynamic allocation 。一个执行者具有多个用于运行任务的slots ,并且在其整个生命周期中将并行运行。
在Spark应用程序中调用一个动作触发启动一个 job 来完成它。Spark检查该行为所依赖的数据集并制定执行计划。执行计划将数据集组合转换为stage。一个阶段是task的集合,其对数据的不同子集运行相同的代码。