Spark Local运行模式原理

chenxin
27
2024-10-10

基本原理

本质:local模式可以限制模拟Spark集群环境的线程数量,即local[N]或local[*];

  • N 代表可以使用的 CPU 核心数,每个核心可以运行一个任务。如果不指定 N,则默认使用 1 个核心。通常,设置核心数与 CPU 的物理核心数相同,以便最大化计算能力。
  • local[*] 表示使用 CPU 的所有可用核心数

值得注意的是,如今的intel和amd的主流cpu都使用了超线程技术,一个核心可以运行多个线程,多个线程之间共享一个cpu核心。
超线程技术不会增加 Spark 的并行任务数。比如 R7 6800H 是 8 核 16 线程,local[*] 会使用 16 个线程,但最多只能利用 8 个物理核心,因此无法达到 16 核的性能效果。超线程只是提升了每个核心的执行效率,并不会让 Spark 将 8 核当作 16 核用。

角色分布

Spark核心是用Scala语言开发的,Scala语言编译后会生成Java字节码,是一种运行在JVM上的语言。
无论是用Scala开发的Spark核心还是用其他语言(如Java或Python)编写的Spark应用,最终都依赖于JVM来执行。
Java和Scala可以直接运行在JVM上,而Python和R则通过一种叫Py4J的机制与JVM进行通信。Py4J允许Python代码与JVM中的Spark核心组件进行交互,因此Spark既可以用Python编写代码,也需要JVM来运行其核心。

资源管理

  • Master: local进程本身(JVM进程)
  • Worker:local进程本身(JVM进程)

任务管理

  • Driver:Local进程本身(JVM进程)

  • Executer:不存在,没有独立的Executor角色,由Local进程(也就是Driver)内的线程提供计算能力。

    Driver也算特殊的Executer,但大多数时候把Executer当作纯Worker对待,与Driver区分
    Local模式只能运行一个Spark程序,如果执行多个Spark程序,就是由多个相互独立的Local进程在执行

Spark Local模式示例

动物装饰