【问题标题】:Error in spark submit java.lang.OutOfMemoryError while reading 5-6 GB of text file using wholetextfile method使用 Wholetextfile 方法读取 5-6 GB 文本文件时,火花提交 java.lang.OutOfMemoryError 时出错
【发布时间】:2020-08-12 15:21:36
【问题描述】:

我有 5 个文件,每个文件的大小为

   File1=~500KB
   File2=~1MB
   File3=~1GB
   File4=~6GB
   File5=~1GB

我正在使用 Wholetextfile 读取所有 5 个文件。每个文件都有不同的列数。

     *val data = sc.wholeTextFiles("..........Path......./*")

在进一步分析中,我发现我的代码在以下行之后无法正常工作..关于在这种情况下如何使用 mappartition 的任何建议

     val files = data.map { case (filename, content) => filename}
     files.collect.foreach( filename => {
     ..../Performing some operations/...
     })*

所以当我尝试在服务器上提交此代码时,它会给出错误 java.lang.OutOfMemoryError 当我从源路径中删除 6GB 文件时,代码工作正常。所以只有大文件的问题。 我正在使用下面的火花提交代码..

    *spark-submit --class myClassName \
    --master yarn-client --conf spark.executor.extraJavaOptions="- 
           Dlog4j.configuration=log4j.properties" \
   --conf spark.driver.extraJavaOptions="-Dlog4j.configuration=...FilePath.../log4j.properties" \
   --files ...FilePath.../log4j.properties --num-executors 4 --executor-cores 4 \
   --executor-memory 10g --driver-memory 5g --conf "spark.yarn.executor.memoryOverhead=409" \
   --conf "spark.yarn.driver.memoryOverhead=409" .................JarFilePath.jar* 

Spark 版本:1.6.0 斯卡拉版本:2.10.5

【问题讨论】:

  • 要求更多(例如20-30g)内存?还是可以减少问题工作集?
  • 还是不行

标签: scala apache-spark


【解决方案1】:

我想您使用 wholeTextFile 而不是 textFile 因为“每个文件都有不同的列数。”。 (注意:在这种情况下,textFile 的内存需求较小,因此您可以在不增加 --executor-memory 的情况下让此代码正常工作)。基本上,模式在文件之间没有对齐。如果您的最终结果是独立于模式的(即具有相同数量的列),那么您可以通过在每个文件上使用 textFile 启动一个 spark 作业来实现预处理层,该作业输出具有相同内容的所需内容, 列数。

否则,您可以过滤掉大文件并在这些文件上启动单独的 spark 作业,以将它们拆分为较小的文件。这样你就能适应记忆。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-10-25
    • 2020-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多