美文网首页
063 spark概要

063 spark概要

作者: 快乐公兽 | 来源:发表于2020-06-20 13:46 被阅读0次

基本概念

application
job
stage

  • 每一个spark作业都只有一个application,作业中每一个action操作对应一个job,job中的stage是按照shuffle来区分
  • 每个Worker节点中的core会启动一个ExecutorBackend进程,进程中一个Executor会持有一个线程池,线程来执行task任务
  • spark中每个stage中会有多个数据分片,每个数据分片扔给task来执行计算
  • stage将每一个partition数据fetch过来

MapReduce和Spark中shuffle的区别

Hadoop和spark性能区别主要在shuffle上,spark计算速度更快、更吃内存,但是超大规模数据量Hadoop基于sort-based-shuffle机制的优势就体现出来了。

Hadoop中shuffle

  • map阶段,将每个split数据读入内存,partitioner之后为每个partition内排好序
  • 内存满了就溢写到磁盘,最后每个map将溢写到磁盘的文件归并(partitioner内有序)
  • reduce阶段,每个reduce将所有map中自身partition拉到本地做归并
  • map和reduce中间可以增加combiner操作
Hadoop.png

spark中shuffle

  • shuffle write阶段,同一个CPU核内的bucket合并
  • shuffle read阶段,将所有map中相同bucket拉取并合并
  • 整个过程都是无序,相同key的合并依赖于内存hashMap结构合并
spark.png

区别

  • Hadoop中shuffle过程中数据有序,combiner和reduce的时候归并即可,这样能支持更大量数据。
  • spark中shuffle过程数据无序,reduce阶段借助hashMap内存结构实现合并,吃内存
    • 内存不够,也会spill到硬盘做排序

分片概念

Hadoop和spark都是分布式计算框架,那么计算数据的单位是什么呢?

  • 计算是按照分片为单位的。MapReduce中一个分片对应一个map进程
  • input中文件比较大,会分成多片,默认是128M;如果文件小于128M,则一个文件就一个分片;一个文件单独起一个线程来执行,如果输入数据中小文件太多会影响性能
  • 小文件多,Hadoop中通过combineFile操作解决

相关参数

spark执行一些重要参数
executor-num:参与计算的节点数
executor-core:每个节点的CPU核数
executor-mem:每个计算节点的内存

spark.default.parallelism:并行度参数,shuffle过程才会起作用

出现OOM现象,可以考虑将executor-mem调大、executor-core调小,并行度设置为executor-core总数的2~3倍

相关文章

网友评论

      本文标题:063 spark概要

      本文链接:https://www.haomeiwen.com/subject/ydgwxktx.html