在 apache spark
一个允许从许多不同的源加载数据集。根据我对计算节点的理解 spark
群集可以不同于 hadoop
存储数据(我说的对吗?)。更重要的是,我们甚至可以将本地文件加载到 spark
工作。主要问题来了:即使我们用同样的电脑 hdfs
以及 spark
目的,总是这样吗 spark
,在创建 RDD
,将洗牌所有数据?或者 spark
是否只会尝试以利用现有数据位置的方式加载数据?
在 apache spark
一个允许从许多不同的源加载数据集。根据我对计算节点的理解 spark
群集可以不同于 hadoop
存储数据(我说的对吗?)。更重要的是,我们甚至可以将本地文件加载到 spark
工作。主要问题来了:即使我们用同样的电脑 hdfs
以及 spark
目的,总是这样吗 spark
,在创建 RDD
,将洗牌所有数据?或者 spark
是否只会尝试以利用现有数据位置的方式加载数据?
1条答案
按热度按时间ql3eal8s1#
你可以用
HDFS
作为两者的共同基础存储MapReduce (Hadoop)
以及Spark
引擎,并使用群集管理器,如YARN
执行资源管理。Spark
将尝试利用数据局部性,并尽可能靠近数据执行任务。工作原理如下:如果节点上有数据可供处理,但cpu不可用,spark将等待一定时间(由配置参数决定:
spark.locality.wait
秒,默认值为3秒)使cpu可用。如果cpu在配置的时间过后仍然没有空闲,spark会将任务切换到较低的位置级别。它将再次等待
spark.locality.wait
如果超时再次发生,它将切换到更低的位置级别。位置级别定义如下,从最接近数据到最远离数据的顺序(https://spark.apache.org/docs/latest/api/scala/index.html#org.apache.spark.scheduler.tasklocality$):
还可以单独配置位置级别的等待时间。对于较长的作业,等待时间可以增加到比默认值(3秒)更大的值,因为cpu占用的时间可能更长。