spark:java.io.IOException:设备上没有剩余空间[再次!]

ℕʘʘ*_*ḆḽḘ 8 r apache-spark pyspark sparklyr

java.io.IOException: No space left on device在运行一个简单的查询后得到了这个sparklyr.我使用最后版本的Spark(2.1.1)和Sparklyr

df_new <-spark_read_parquet(sc, "/mypath/parquet_*", name = "df_new", memory = FALSE)

myquery <- df_new %>% group_by(text) %>% summarize(mycount = n()) %>% 
  arrange(desc(mycount)) %>% head(10)

#this FAILS
get_result <- collect(myquery)
Run Code Online (Sandbox Code Playgroud)

我确实设置了两个

  • spark.local.dir <- "/mypath/"
  • spark.worker.dir <- "/mypath/"

使用平常

config <- spark_config()

config$`spark.executor.memory` <- "100GB"
config$`spark.executor.cores` <- "3"
config$`spark.local.dir` <- "/mypath/"
config$`spark.worker.dir` <- "mypath/"
config$`spark.cores.max`<- "2000"
config$`spark.default.parallelism`<- "4"
config$`spark.total-executor-cores`<- "80"
config$`sparklyr.shell.driver-memory` <- "100G"
config$`sparklyr.shell.executor-memory` <- "100G"
config$`spark.yarn.executor.memoryOverhead` <- "100G"
config$`sparklyr.shell.num-executors` <- "90"
config$`spark.memory.fraction` <- "0.2"

  Sys.setenv(SPARK_HOME="mysparkpath")
  sc <- spark_connect(master = "spark://mynode", config = config)
Run Code Online (Sandbox Code Playgroud)

哪里mypath有超过5TB的磁盘空间(我可以在Environment选项卡中看到这些选项).我尝试了类似的命令Pyspark,它以同样的方式失败(同样的错误).

通过在寻找 Stages的选项卡Spark,我看到,当发生错误shuffle write60 GB.(输入是关于200GB).鉴于我有足够的空间,这令人费解.我已经看过其他SO解决方案......

集群作业以magpie https://github.com/LLNL/magpie/blob/master/submission-scripts/script-sbatch-srun/magpie.sbatch-srun-spark 开始

每次我启动Spark作业时,都会看到spark-abcd-random_numbers在我的/mypath文件夹中调用的目录.但那里的文件大小非常小(远不及60GB shuffle写入)

  • 有大约40个镶木地板文件.每个700K(原始csv文件是100GB)它们基本上包含字符串.
  • 集群是10个节点,每个节点有120GB RAM和20个核心.

这里有什么问题?谢谢!!

use*_*742 6

我以前多次遇到这个问题.背后的原因是临时文件.大多数服务器都有一个非常小的分区,/tmp/它是spark的默认临时目录.
通常,我曾经通过在spark-submit命令中设置如下来改变它:

$spark-submit --master local[*] --conf "spark.driver.extraJavaOptions=-Djava.io.tmpdir=/mypath/" ....
Run Code Online (Sandbox Code Playgroud)

在你的情况下,我认为你可以提供R中的配置如下(我没有测试过,但应该工作):

config$`spark.driver.extraJavaOptions` <- "-Djava.io.tmpdir=/mypath/"
config$`spark.executor.extraJavaOptions ` <- "-Djava.io.tmpdir=/mypath/"
Run Code Online (Sandbox Code Playgroud)

请注意,您必须为驱动程序和执行程序更改它,因为您正在使用Spark独立主服务器(我在您的问题中可以看到)

我希望这会有所帮助


San*_*udu 2

设置参数后,您可以在 Spark 环境 UI 中看到 Spark.local.dir 的新值。但它没有反映。

即使我也遇到了类似的问题。设置好这个参数后,我重新启动机器,然后开始工作。