在apache spark
中,允许从许多不同来源加载数据集。根据我的理解,spark
集群的计算节点可能与hadoop
用于存储数据的节点不同(我是对的吗?)。更重要的是,我们甚至可以将本地文件加载到spark
作业中。这里有一个主要问题:即使我们使用相同的计算机进行hdfs
和spark
目的,spark
在创建RDD
期间是否会随机播放所有数据?或spark
只会尝试加载数据以利用已有的数据位置?
答案 0 :(得分:0)
您可以使用HDFS
作为MapReduce (Hadoop)
和Spark
引擎的公共底层存储,并使用像YARN
这样的集群管理器来执行资源管理。 Spark
将尝试利用数据局部性,并尽可能接近数据执行任务。
这是它的工作方式:如果要处理的节点上有数据,但CPU不是空闲的,Spark将等待一段时间(由配置参数确定:{ CPU可以使用{1}}秒,默认为3秒。
如果在配置的时间过后CPU仍然没有空闲,Spark会将任务切换到较低的位置级别。然后它将再次等待spark.locality.wait
秒,如果再次发生超时,它将切换到更低的位置级别。
地点级别定义如下,从最接近数据到最远数据(https://spark.apache.org/docs/latest/api/scala/index.html#org.apache.spark.scheduler.TaskLocality$)的顺序如下:
spark.locality.wait
也可以单独配置地点级别的等待时间。对于较长的作业,等待时间可以增加到比默认值3秒更大的值,因为CPU可能会更长时间。