Scheduling 在独立模式下,哪些因素决定了执行者的数量?
给一个火花应用Scheduling 在独立模式下,哪些因素决定了执行者的数量?,scheduling,apache-spark,Scheduling,Apache Spark,给一个火花应用 在独立模式下,哪些因素决定了执行者的数量?在Mesos和纱线中,根据文件,我们可以指定执行器/核心和内存的数量 一旦启动了多个执行器。Spark是否以循环方式启动任务,或者是否足够聪明,可以查看一些执行者是否空闲/忙碌,然后相应地安排任务 另外,Spark如何决定任务的数量?我用小数据集做了一个简单的最高温度程序,Spark在一个执行器中产生了两个任务。这是Spark单机模式 Spark根据原始数据集中的分区数选择任务数。如果使用HDFS作为数据源,则默认情况下,具有的分区数应等
Spark根据原始数据集中的分区数选择任务数。如果使用HDFS作为数据源,则默认情况下,具有的分区数应等于HDFS块数。您可以通过多种不同的方式更改分区的数量。前两个:作为
SparkContext.textFile
方法的额外参数;通过调用RDD.repartion
方法。回答您的问题:
spark.cores.max
定义spark上下文中使用的最大内核数。默认值为无穷大,因此Spark将使用群集中的所有核心。spark.task.cpus变量定义spark将为单个任务分配多少CPU,默认值为1。通过这两个变量,您可以定义集群中并行任务的最大数量getPreferredLocations
方法中定义的。但是由于方法签名表明这只是一个首选项,因此如果Spark检测到一台机器不忙,它将在这台空闲机器中启动任务。然而,我不知道Spark使用什么机制来知道哪些机器处于空闲状态。为了实现局部性,我们(Stratio)决定将每个部分都缩小,这样任务所需的时间更少,并实现局部性我希望这会有所帮助。我同意@jlopezmat关于Spark如何选择其配置的观点。关于测试代码,由于
textFile
的实现方式,您将看到两个任务。从SparkContext.scala
:
/**
* Read a text file from HDFS, a local file system (available on all nodes), or any
* Hadoop-supported file system URI, and return it as an RDD of Strings.
*/
def textFile(path: String, minPartitions: Int = defaultMinPartitions): RDD[String] = {
hadoopFile(path, classOf[TextInputFormat], classOf[LongWritable], classOf[Text],
minPartitions).map(pair => pair._2.toString)
}
如果我们检查defaultMinPartitions
的值是多少:
/** Default min number of partitions for Hadoop RDDs when not given by user */
def defaultMinPartitions: Int = math.min(defaultParallelism, 2)
回答之前的回答中未提及的一些问题:
- 在独立模式下,您需要使用
和--executor cores
设置将启动的执行器的数量(如果您指定--max executor cores
,则您有足够的内存容纳该数量)--executor memory
- Spark不以循环方式分配任务,它使用一种称为“”的机制,这是一种基于拉动的技术,允许每个执行器向主控器提供其可用性,主控器将决定是否向其发送任务