在spark中,我们可以直接从HDFS加载数据,RDD的分区数将等于文件的分区数。HDFS以保存重复的文件块而闻名,所以问题是spark如何处理这个问题,以及RDD分区是如何被管理的。
如果我问错了问题,请纠正我。
您希望将计算带入数据,因此根据任务将在哪里执行(哪个物理节点将保留持久数据),您将使用最近的可用副本(同一机架等)或根据数据可用的位置执行调度。这部分由YARN调度器处理。
正如您可以从spark用户指南中查看的那样,您可以设置一些关于数据位置的配置(摘自spark 1.6用户指南http://spark.apache.org/docs/latest/configuration.html):
火花。局部。等待默认值:3s
在放弃并在不太本地的节点上启动数据本地任务之前,要等待多长时间才能启动该任务。相同的等待将用于逐步通过多个本地级别(进程本地、节点本地、机架本地,然后任意)。也可以通过设置spark.locality.wait.node等来自定义每个级别的等待时间。如果您的任务很长,并且位置不好,则应增加此设置,但默认设置通常效果良好。
火花.局部.等待.节点默认值:spark.locality.wait
自定义位置等待节点位置。例如,您可以将其设置为0以跳过节点位置并立即搜索机架位置(如果您的集群具有机架信息)。
火花。局部。等待。进程默认值:spark.locality.wait
自定义位置等待进程位置。这会影响试图访问特定执行器进程中缓存数据的任务。
spark.locality.wait.ack默认值:spark.locality.wait
自定义位置等待机架位置