我很少读到的另一项内容。
将S3放在一边,暂时不要尝试使用裸机经典的数据局部性方法来处理Spark,Hadoop,而不是在“动态资源分配”模式下,然后:
如果HDFS中的大型数据集分布在集群中的(所有)N个数据节点上,但是total-executor-cores参数设置为小于N,并且我们显然需要读取所有数据,该怎么办(全部)N个相关数据节点?
我认为Spark必须忽略此参数才能从HDFS读取数据。是不是?
如果忽略它,则需要在该数据节点上分配执行器核心,并因此由整个Job获取该执行器核心,因此需要将此参数解释为用于处理而不是用于读取块吗? p>
这样的数据节点中的数据是否立即改组到执行程序的分配位置?
谢谢。
答案 0 :(得分:1)
这里似乎有点混乱。
最优数据局部性(节点局部性)是我们要实现的,而不是保证。 Spark所能做的就是请求资源(例如,使用YARN-How YARN knows data locality in Apache spark in cluster mode),并希望它将获得满足数据局部性约束的资源。
如果不这样做,它将简单地从远程节点获取数据。但是,不是随机播放。只是通过网络的简单传输。
因此,回答您的问题-Spark将使用已分配的资源,并尽最大努力满足约束。它不能使用尚未获得的节点,因此不会自动获取其他节点进行读取。