我们使用AWS EMR设置来处理用Scala编写的作业。我们能够在小数据集上运行作业,但是在大型数据集上运行相同的作业时,我得到异常“java.io.IOException:所有数据节点都很糟糕”。
将spark.shuffle.service.enabled设置为true可以解决此问题。
AWS EMR的默认配置已将spark.dynamicAllocation.enabled设置为true,但spark.shuffle.service.enabled设置为false。
spark.dynamicAllocation.enabled允许Spark将执行程序动态分配给不同的任务。设置为false时,spark.shuffle.service.enabled禁用外部shuffle服务,数据仅存储在执行程序中。重新分配执行程序时,数据将丢失,并且异常“java.io.IOException:所有数据节点都很糟糕”。被抛出数据请求。