Cluster computing 什么';“的意思是什么;“地方一级”;关于火花簇

Cluster computing 什么';“的意思是什么;“地方一级”;关于火花簇,cluster-computing,apache-spark,Cluster Computing,Apache Spark,标题“地区级别”和5个状态数据的含义是什么 本地-->处理本地-->节点本地-->机架本地-->是否有 据我所知,本地级别指示执行了哪种类型的数据访问。当一个节点完成其所有工作并且其CPU空闲时,Spark可能会决定启动其他需要从其他位置获取数据的挂起任务。因此,理想情况下,您的所有任务都应该是进程本地的,因为它与较低的数据访问延迟相关 您可以使用以下配置移动到其他区域级别之前的等待时间: spark.locality.wait 有关参数的更多信息,请参见 关于不同级别的PROCESS_LOC

标题“地区级别”和5个状态数据的含义是什么 本地-->处理本地-->节点本地-->机架本地-->是否有


据我所知,本地级别指示执行了哪种类型的数据访问。当一个节点完成其所有工作并且其CPU空闲时,Spark可能会决定启动其他需要从其他位置获取数据的挂起任务。因此,理想情况下,您的所有任务都应该是进程本地的,因为它与较低的数据访问延迟相关

您可以使用以下配置移动到其他区域级别之前的等待时间:

spark.locality.wait
有关参数的更多信息,请参见

关于不同级别的PROCESS_LOCAL、NODE_LOCAL、RACK_LOCAL或任何我认为org.apache.spark.scheduler.TaskSetManager中的findTaskfindSpeculativeTask方法说明了spark如何根据其位置级别选择任务。它首先将检查将在同一执行者进程中启动的进程\本地任务。如果没有,它将检查节点_本地任务,这些任务可能在同一节点的其他执行器中,或者需要从HDFS、缓存等系统检索。机架_本地意味着数据在另一个节点中,因此需要在执行之前传输。最后,ANY只是接受可能在当前节点中运行的任何挂起任务

  /**
   * Dequeue a pending task for a given node and return its index and locality level.
   * Only search for tasks matching the given locality constraint.
   */
  private def findTask(execId: String, host: String, locality: TaskLocality.Value)
    : Option[(Int, TaskLocality.Value)] =
  {
    for (index <- findTaskFromList(execId, getPendingTasksForExecutor(execId))) {
      return Some((index, TaskLocality.PROCESS_LOCAL))
    }

    if (TaskLocality.isAllowed(locality, TaskLocality.NODE_LOCAL)) {
      for (index <- findTaskFromList(execId, getPendingTasksForHost(host))) {
        return Some((index, TaskLocality.NODE_LOCAL))
      }
    }

    if (TaskLocality.isAllowed(locality, TaskLocality.RACK_LOCAL)) {
      for {
        rack <- sched.getRackForHost(host)
        index <- findTaskFromList(execId, getPendingTasksForRack(rack))
      } {
        return Some((index, TaskLocality.RACK_LOCAL))
      }
    }

    // Look for no-pref tasks after rack-local tasks since they can run anywhere.
    for (index <- findTaskFromList(execId, pendingTasksWithNoPrefs)) {
      return Some((index, TaskLocality.PROCESS_LOCAL))
    }

    if (TaskLocality.isAllowed(locality, TaskLocality.ANY)) {
      for (index <- findTaskFromList(execId, allPendingTasks)) {
        return Some((index, TaskLocality.ANY))
      }
    }

    // Finally, if all else has failed, find a speculative task
    findSpeculativeTask(execId, host, locality)
  }
/**
*将给定节点的挂起任务出列,并返回其索引和位置级别。
*仅搜索与给定位置约束匹配的任务。
*/
私有def findTask(execId:String,host:String,locality:taskLocation.Value)
:选项[(Int,taskLocation.Value)]=
{

对于(指数这里是我的两分钱,我主要是从中总结出来的

首先,我想再添加一个本地级别,即
NO\u PREF
,这一级别已在中讨论过。
然后,让我们把这些级别放在一个表中

需要注意的是,可以根据中的指南跳过特定级别


例如,如果您想跳过
NODE\u LOCAL
,只需将
spark.locality.wait.NODE
设置为0。

您能解释一下“挂起的任务”是什么意思吗?我认为工作节点的唯一任务是运行任务调度器提供的任务。一旦运行完这些任务,它就可以运行这些任务(可能当spark应用程序运行完毕后)它会保持空闲。那么什么是挂起的任务?@user3376961我认为下面的问题可能会澄清spark中的任务。请记住,您也可以在一定程度上灵活地工作,这也说明了不建立一对一关系的重要性。