Spark是一个基于内存的集群计算系统,是一个分布式的计算框架。Spark可以将计算任务分发到多个机器并行计算。目前Spark集成了SQL查询,图处理,机器学习,流处理等,在计算引擎中生态比较健全,所以其适用范围比较广。Spark主要解决计算的并行化,集群资源的管理与分配,容错与恢复,任务的分发与回收管理等问题。
shuffle涉及到序列化反序列化、跨节点网络IO以及磁盘读写IO等,所以说Shuffle是整个应用程序运行过程中非常昂贵的一个阶段。
[图片上传失败...(image-a0cad4-1636857590558)]
MapReduce 是 sort-based,进入 combine() 和 reduce() 的 records 必须先partition、key对中间结果进行排序合并。这样的好处在于 combine/reduce() 可以处理大规模的数据,因为其输入数据可以通过外排得到(mapper 对每段数据先做排序,reducer 的 shuffle 对排好序的每段数据做归并)。
Spark的Shuffle实现,在DAG阶段以shuffle为界,划分stage,上游stage做map task,每个map task将计算结果数据分成多份,每一份对应到下游stage的每个partition中,并将其临时写到磁盘,该过程叫做shuffle write;下游stage做reduce task,每个reduce task通过网络拉取上游stage中所有map task的指定分区结果数据,该过程叫做shuffle read,最后完成reduce的业务逻辑。
1.基于Hash的Shuffle实现:
Spark是一个基于内存的集群计算系统,是一个分布式的计算框架。Spark可以将计算任务分发到多个机器并行计算。目前Spark集成了SQL查询,图处理,机器学习,流处理等,在计算引擎中生态比较健全,所以其适用范围比较广。Spark主要解决计算的并行化,集群资源的管理与分配,容错与恢复,任务的分发与回收管理等问题。
shuffle涉及到序列化反序列化、跨节点网络IO以及磁盘读写IO等,所以说Shuffle是整个应用程序运行过程中非常昂贵的一个阶段。
[图片上传中...(image-c61557-1636857612114-2)]
MapReduce 是 sort-based,进入 combine() 和 reduce() 的 records 必须先partition、key对中间结果进行排序合并。这样的好处在于 combine/reduce() 可以处理大规模的数据,因为其输入数据可以通过外排得到(mapper 对每段数据先做排序,reducer 的 shuffle 对排好序的每段数据做归并)。
Spark的Shuffle实现,在DAG阶段以shuffle为界,划分stage,上游stage做map task,每个map task将计算结果数据分成多份,每一份对应到下游stage的每个partition中,并将其临时写到磁盘,该过程叫做shuffle write;下游stage做reduce task,每个reduce task通过网络拉取上游stage中所有map task的指定分区结果数据,该过程叫做shuffle read,最后完成reduce的业务逻辑。
1.基于Hash的Shuffle实现:
[图片上传中...(image-de14a9-1636857612114-1)]
[图片上传中...(image-b9f3e0-1636857612114-0)]
总的来说,Spark是基于内存的计算引擎,适合在资源充足,竞争不太激烈的集群上。Spark更适合处理迭代任务。MapReduce适合处理类似与ETL的一遍处理的批任务,运行完Job进程立即终止,能与其他服务较好的共存。
[图片上传失败...(image-fdeaf6-1636857590556)]
总的来说,Spark是基于内存的计算引擎,适合在资源充足,竞争不太激烈的集群上。Spark更适合处理迭代任务。MapReduce适合处理类似与ETL的一遍处理的批任务,运行完Job进程立即终止,能与其他服务较好的共存。