2017-10-19 76 views
1

我正在使用本地模式上Sparklyr以下配置:當更多的內核使用的Spark(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) 

這工作得很好,當我在一個CSV使用spark_read_csv讀取。然而,當我用更多的內核,如

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

我得到以下錯誤:

Blockquote Error in value[3L] : Failed to fetch data: org.apache.spark.SparkException: Job aborted due to stage failure: Task 10 in stage 3.0 failed 1 times, most recent failure: Lost task 10.0 in stage 3.0 (TID 132, localhost, executor driver): java.io.FileNotFoundException: /tmp/blockmgr-9ded7dfb-20b8- 4c72-8a6f-2db12ba884fb/1f/temp_shuffle_e69d56ba-80b4-499f-a91f- 0ae63fe4553f (Too many open files) at java.io.FileOutputStream.open0(Native Method) at java.io.FileOutputStream.open(FileOutputStream.java:270) at java.io.FileOutputStream.(FileOutputStream.java:213) at org.apache.spark.storage.DiskBlockObjectWriter.initialize(DiskBlockObjectWriter.scala:102) at org.apache.spark.storage.DiskBlockObjectWriter.open(DiskBlockObjectWriter.scala:115) at org.apache.spark.storage.DiskBlockObjectWriter.write(DiskBlockObjectWriter.scala:235) at org.apache.spark.shuffle.sort.BypassMergeSortShuffleWriter.write(BypassMergeSortShuffleWriter.java:152) at org.apache.spark.scheduler.ShuffleMapTask.runTask(ShuffleMa

我從1040(軟,硬)增加的ulimit至419430,這沒有什麼區別。

我的虛擬機有128個內核和2T的內存,我希望能夠使用它的所有。

有什麼建議嗎?

回答

1

Spark local模式適用於小批量試驗和單元測試,不適用於生產用途,系統限制問題只是冰山的一個高峯。它在單個JVM中運行,您可能會期望與內存管理有許多不同的問題。

整體Spark被設計用於縮放而不是放大。在本地模式下增加資源時,您不應期待性能提升和無痛操作。而且,如果計算資源不支持高吞吐量磁盤配置,則資源將得不到充分利用。

相關問題