如果单个文件大于 YARN - SPARK 中映射操作中的执行程序,会发生什么情况?

What will happen if the single file is larger than a executor in a map operation in YARN - SPARK?

我正在研究一个解决方案,其中驱动程序将读取 xml 文件,然后我将从中获取一个 HDFS 文件路径,该文件路径将在地图中读取 operation.I 这里有几个问题. 由于map操作会在容器中进行(Container will be allocated while starting the job)。

  1. 什么是单输入文件大于一个执行器。由于文件未在驱动程序中读取,因此无法分配更多资源?或者应用程序主机将从资源管理器获得更多内存?

非常感谢任何帮助。

What is the single input file is greater than a executor?

由于文件在 HDFS 中,Spark 将在 HDFS 中为 1 个块创建 1 个分区。每个分区都将在一个 Worker 中处理。

如果文件有很多块不能一次计算,那么 spark 确保一旦资源空闲(完成一个阶段的转换之后)就会计算挂起的分区。

加载的文件显示为 RDD。 RDD 是跨集群的所谓分区的组合。读取文件没有问题,但转换后它可能会抛出 OOM 异常,具体取决于执行程序内存限制。因为可能会有一些洗牌操作需要将分区转移到一个地方。默认执行程序内存设置为 512MB。但是为了处理大量数据设置自定义内存参数。 Spark 保留部分内存用于缓存数据存储和临时随机数据。使用参数 spark.storage.memoryFraction(默认 0.6)和 spark.shuffle.memoryFraction(默认 0.2)为它们设置堆。因为堆的这些部分可以在 Spark 测量和限制它们之前增长,所以必须设置两个额外的安全参数:spark.storage.safetyFraction(默认 0.9)和 spark.shuffle.safetyFraction(默认 0.8)。安全参数将内存分数降低指定的数量。默认情况下用于存储的堆的实际部分是 0.6 × 0.9(安全分数乘以存储内存分数),等于 54%。类似地,用于随机数据的堆部分是 0.2 × 0.8(安全分数乘以随机内存分数),等于 16%。然后,您为 运行 任务所需的其他 Java 对象和资源保留了 30% 的堆。但是,您应该只指望 20%。