当更多核心使用Spark(Sparklyr)错误打开许多文件时

时间:2017-10-19 22:09:57

标签: azure apache-spark sparklyr

我在本地模式下在Sparklyr上使用以下配置:

conf <- spark_config()
conf$`sparklyr.cores.local` <- 28
conf$`sparklyr.shell.driver-memory` <- "1000G"
conf$spark.memory.fraction <- 0.9

sc <- spark_connect(master = "local", 
                version = "2.1.1",
                config = conf)

当我使用spark_read_csv读取csv时这很好用。但是,当我使用更多核心,如

conf <- spark_config()
conf$`sparklyr.cores.local` <- 30
conf$`sparklyr.shell.driver-memory` <- "1000G"
conf$spark.memory.fraction <- 0.9

我收到以下错误:

  

块引用     值[3L]出错:       无法获取数据:org.apache.spark.SparkException:作业已中止       阶段性失败:阶段3.0中的任务10失败1次,最近一次       失败:阶段3.0中丢失的任务10.0(TID 132,localhost,执行程序       driver):java.io.FileNotFoundException:/ tmp / blockmgr-9ded7dfb-20b8-       4c72-8a6f-2db12ba884fb / 1F / temp_shuffle_e69d56ba-80b4-499f-a91f-       0ae63fe4553f(打开文件太多)       at java.io.FileOutputStream.open0(Native Method)       在java.io.FileOutputStream.open(FileOutputStream.java:270)       在java.io.FileOutputStream。(FileOutputStream.java:213)       at org.apache.spark.storage.DiskBlockObjectWriter.initialize(DiskBlockObjectWriter.scala:102)       在org.apache.spark.storage.DiskBlockObjectWriter.open(DiskBlockObjectWriter.scala:115)       在org.apache.spark.storage.DiskBlockObjectWriter.write(DiskBlockObjectWriter.scala:235)       在org.apache.spark.shuffle.sort.BypassMergeSortShuffleWriter.write(BypassMergeSortShuffleWriter.java:152)       在org.apache.spark.scheduler.ShuffleMapTask.runTask(ShuffleMa

我从1040(软和硬)增加ulimit到419430,这没有任何区别。

我的VM有128个核心和2T内存,我希望能够全部使用它。

有什么建议吗?

1 个答案:

答案 0 :(得分:1)

Spark local模式适用于小批量实验和单元测试,不适用于生产使用,系统限制问题只是冰山一角。它在单个JVM中运行,您可能会在内存管理方面遇到很多不同的问题。

整体Spark旨在扩展而不是扩展。在本地模式下增加资源时,您不应期望性能提升和无痛操作。此外,如果计算资源不支持高吞吐量磁盘配置,则您的资源将未得到充分利用。