apachespark—跨集群分布分区

cwxwcias  于 2021-06-02  发布在  Hadoop
关注(0)|答案(1)|浏览(457)

apache spark 一个允许从许多不同的源加载数据集。根据我对计算节点的理解 spark 群集可以不同于 hadoop 存储数据(我说的对吗?)。更重要的是,我们甚至可以将本地文件加载到 spark 工作。主要问题来了:即使我们用同样的电脑 hdfs 以及 spark 目的,总是这样吗 spark ,在创建 RDD ,将洗牌所有数据?或者 spark 是否只会尝试以利用现有数据位置的方式加载数据?

ql3eal8s

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$):

  1. PROCESS_LOCAL (data is in the same JVM as the running code)
  2. NODE_LOCAL (data is on the same node)
  3. NO_PREF (data is accessed equally quickly from anywhere and has no locality preference)
  4. RACK_LOCAL (data is on the same rack of servers)
  5. ANY (data is elsewhere on the network and not in the same rack)

还可以单独配置位置级别的等待时间。对于较长的作业,等待时间可以增加到比默认值(3秒)更大的值,因为cpu占用的时间可能更长。

相关问题