粗浅理解,不完全准确:
申请资源、计算节点数、虚拟cpu核数、并行度、并发度关系,分区、task数量: * 一个nodemanager 上可能有多个executor * spark-shell --num-executors 3 * --driver-memory 5g --executor-cores 2 //每个executor的虚拟核数 * --executor-memory 2g * 这种情况下最大并发度是是6=计算节点数*虚拟CPU核数 * 分区数=task数量; * 如果实际资源满足,就是并行度,否则并发度 * 一般task设置为最大并发度的2-3倍,避免资源浪费 * 创建RDD的时候,填入分区数量;一般的转换算子并不会改变分区数量; * coalesce根据数据量缩减分区,用于大数据集过滤后,提高小数据集的执行效率 * 当 spark 程序中,存在过多的小任务的时候,可以通过 coalesce 方法,收缩合并分区,减少分区的个数,减小任务调度成本 * repartition一般用来扩大分区 * partitionBy将数据按照指定Partitioner 重新进行分区。Spark 默认的分区器是HashPartitioner



