我想使用Apache YARN作为集群和资源管理器来运行一个框架,在该框架中,资源将在同一框架的不同任务之间共享.我想使用自己的分布式堆外文件系统.
是否可以使用除HDFS以外的YARN的任何其他分布式文件系统?
如果是,需要实施哪些HDFS API?
我有 5 个分区-RDD 和 5 个工人/执行者。如何让 Spark 将每个 RDD 的分区保存在不同的工作人员(IP)上?
如果我说 Spark 可以在一个 worker 上保存几个分区,而在其他 worker 上保存 0 个分区,我说得对吗?意思是,我可以指定分区数,但 Spark 仍然可以在单个节点上缓存所有内容。
复制不是一种选择,因为 RDD 很大。
RDD 的getPreferredLocations方法不提供分区将存储在指定节点上的 100% 保证。Spark 将在 期间尝试spark.locality.wait,但之后,Spark 将在不同的节点上缓存分区。
作为一种解决方法,您可以将非常高的值设置为spark.locality.wait并覆盖getPreferredLocations。坏消息 - 你不能用 Java 做到这一点,你需要编写 Scala 代码。至少 Scala 内部封装了 Java 代码。IE:
class NodeAffinityRDD[U: ClassTag](prev: RDD[U]) extends RDD[U](prev) {
val nodeIPs = Array("192.168.2.140","192.168.2.157","192.168.2.77")
override def getPreferredLocations(split: Partition): Seq[String] =
Seq(nodeIPs(split.index % nodeIPs.length))
}
Run Code Online (Sandbox Code Playgroud)
apache ×1
apache-spark ×1
hadoop ×1
hadoop-yarn ×1
hadoop2 ×1
java ×1
rdd ×1
scala ×1
shuffle ×1