spark面试题-简述Spark的宽窄依赖,以及Spark如何划分stage,每个stage又根据什么决定task个数?

简述Spark的宽窄依赖,以及Spark如何划分stage,每个stage又根据什么决定task个数?

spark面试题-简述Spark的宽窄依赖,以及Spark如何划分stage,每个stage又根据什么决定task个数?

  • 宽依赖:父RDD的分区数据会分发到子RDD的多个分区

  • 窄依赖:父RDD的分区数据会分发到子RDD的一个分区

  • spark的DAGScheduler根据宽窄依赖将DAG划分为多个stage,spark以stage作为task的模板,生成一个或多个task,并将其调度到TaskExecutor执行。

  • task的数量本质上是由RDD的分区数决定的,一个分区对应一个task。

  • 分区数的确定和改动有以下几种情况:

    • 由带partitioner的数据源确定,比如数据来自hdfs,则根据hdfs的数据分片方式确定分区数;如果数据来自kafka,则有topic的分区数确定
    • 不带partitioner的数据源,其分区数由参数"spark.default.parallelism"确定
    • 通常map阶段的task数由数据源确定,如果有shffle,shuffle的reduce的并行度由"spark.sql.shuffle.partitions"确定,默认是200
    • 也可以通过代码对分区数进行干预,一是读取数据时可以设定最小分区数,二是可以通过repartition进行数据重分区
上一篇:spark core 指标练习每个部门订单数最大的三个员工,每个作品对应性别的次数


下一篇:Spark大数据分析与实战:RDD编程初级实践Spark大数据分析与实战:RDD编程初级实践