关于Executor:
一个executor同时只能执行一个计算任务
但一个worker(物理节点)上可以同时运行多个executor
executor的数量决定了同时处理任务的数量
一般来说,分区数远大于executor的数量才是合理的
同一个作业,在计算逻辑不变的情况下,分区数和executor的数量很大程度上决定了作业运行的时间
初始化SparkSession
scala版本
import org.apache.spark.sql.SparkSession val spark = SparkSession.builder().master("yarn-client").appName("New SS").config("spark.executor.instances","10").config("spark.executor.memory","10g").getOrCreate() import spark.implicits._
在代码中,我们通过配置指明了spark运行环境时的yarn,并以yarn-client的方式提交作业(yarn还支持yarn-cluster的方式,区别在于前者driver运行在客户端,后者driver运行在yarn的container中)。我们一共申请了10个executer,每个10g。
python版本
from pyspark.sql import SparkSession spark = SparkSession.builder.master("yarn-client").appName("New SS").config("spark.executor.instances","10").config("spark.executor.memory","10g").getOrCreate()