我正在考虑Spark Executor的静态分配。在启动执行者时,纱线上的火花会考虑在Spark应用中使用的原始输入数据集的数据局部性。
如果它确实考虑到了这一点,因为当Spark上下文初始化时请求和分配Spark Executor。可能有可能在Spark应用程序中使用多个原始输入数据集,这些数据集可以物理地存在于许多不同的数据节点上。我们无法在所有这些节点上运行tocesture。
我理解Spark在执行程序上安排任务时会处理数据局部性(如前所述https://spark.apache.org/docs/latest/tuning.html#data-locality。
您说
是正确的Spark在执行人安排任务时要照顾数据局部性
纱线启动执行器时,它不知道您的数据在哪里。因此,在理想情况下,您可以在群集的所有节点上启动执行器。但是,更真实地启动,然后仅在一部分节点上启动。
现在,这不一定是一件坏事,因为HDF固有地支持冗余,这意味着很有可能在节点上存在的数据副本,Spark已请求数据。