spark如何实现并发

如题所述

输入可能以多个文件的形式存储在 HDFS 上,每个 File 都包含了很多块,称为 Block。当 Spark 读取这些文件作为输入时,会根据具体数据格式对应的 InputFormat 进行解析,一般是将若干个 Block 合并成一个输入分片,称为 InputSplit,注意 InputSplit 不能跨越文件。随后将为这些输入分片生成具体的 Task。InputSplit 与 Task是一一对应的关系。随后这些具体的 Task 每个都会被分配到集群上的某个节点的某个 Executor åŽ»æ‰§è¡Œã€‚

    每个节点可以起一个或多个 Executor。

    每个 Executor 由若干 core ç»„成,每个 Executor 的每个 core ä¸€æ¬¡åªèƒ½æ‰§è¡Œä¸€ä¸ª Task 。

    每个 Task 执行的结果就是生成了目标 RDD çš„一个 partiton。

    注意: 这里的 core 是虚拟的 core 而不是机器的物理 CPU 核,可以理解为就是 Executor 的一个工作线程。

    而 Task 被执行的并发度 = Executor 数目 * 每个 Executor 核数。

    至于 partition 的数目:

    对于数据读入阶段,例如 sc.textFile,输入文件被划分为多少 InputSplit 就会需要多少初始 Task。

    在 Map 阶段 partition 数目保持不变。

    在 Reduce 阶段,RDD 的聚合会触发 shuffle 操作,聚合后的 RDD 的 partition 数目跟具体操作有关,例如 repartition 操作会聚合成指定分区数,还有一些算子是可配置的。


温馨提示:答案为网友推荐,仅供参考
相似回答