我正在开发一个解决方案,其中驱动程序将读取xml文件,然后我将采用HDFS文件路径,这将在map操作中读取。我在这里几乎没有问题。 由于地图操作将在容器中执行(容器将在启动作业时分配)。
非常感谢任何帮助。
答案 0 :(得分:3)
单个输入文件大于执行程序是什么?
由于文件位于HDFS中,Spark将在HDFS中为1个块创建 1个分区。每个分区都将在Worker中处理。
如果文件有多个无法一次计算的块,那么spark会确保一旦资源空闲(在完成阶段转换之后)就会计算待处理的分区。
答案 1 :(得分:1)
加载的文件显示为RDD。 RDD是所谓的分区的组合,它们驻留在集群中。读取文件不是问题,但在转换后,它会根据执行程序内存限制引发OOM异常。因为可能存在一些需要将分区转移到一个地方的混洗操作。默认情况下,执行程序内存设置为512MB。但是用于处理大量数据集的自定义内存参数。 Spark为缓存数据存储和临时shuffle数据保留了该内存的一部分。使用参数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%。类似地,用于shuffle数据的堆的部分是0.2×0.8(安全分数乘以shuffle memory fraction),等于16%。然后,您有30%的堆保留用于运行任务所需的其他Java对象和资源。但是,你应该只占20%。