【问题标题】:Spark error: java.lang.IllegalArgumentException: Size exceeds Integer.MAX_VALUE when reading large zip fileSpark 错误:java.lang.IllegalArgumentException:读取大型 zip 文件时大小超过 Integer.MAX_VALUE
【发布时间】:2017-10-21 06:07:09
【问题描述】:

我正在尝试使用 Spark(EMR 上的 2.1)处理 ~500M gz 文件,我无法更改格式,也无法将它们拆分为更小的尺寸。

其中一个执行者失败了:

java.lang.IllegalArgumentException: Size exceeds Integer.MAX_VALUE
    at sun.nio.ch.FileChannelImpl.map(FileChannelImpl.java:869)
    at org.apache.spark.storage.DiskStore$$anonfun$getBytes$2.apply(DiskStore.scala:103)
    at org.apache.spark.storage.DiskStore$$anonfun$getBytes$2.apply(DiskStore.scala:91)
    at org.apache.spark.util.Utils$.tryWithSafeFinally(Utils.scala:1303)
    at org.apache.spark.storage.DiskStore.getBytes(DiskStore.scala:105)
    at org.apache.spark.storage.BlockManager.getLocalValues(BlockManager.scala:462)
    at org.apache.spark.storage.BlockManager.getOrElseUpdate(BlockManager.scala:698)
    at org.apache.spark.rdd.RDD.getOrCompute(RDD.scala:334)
    at org.apache.spark.rdd.RDD.iterator(RDD.scala:285)
    at org.apache.spark.scheduler.ResultTask.runTask(ResultTask.scala:87)
    at org.apache.spark.scheduler.Task.run(Task.scala:99)
    at org.apache.spark.executor.Executor$TaskRunner.run(Executor.scala:282)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)

我了解由于 gz 不可拆分,因此单个任务处理整个文件,有什么办法可以避免错误吗?

【问题讨论】:

    标签: apache-spark


    【解决方案1】:

    原来不是直接读取数据时出错,而是处理后出错。 我添加了一个解决问题的重新分区步骤。

    【讨论】:

    • 你在哪里添加了重新分区步骤?在行动之前?
    • 创建 rdd 后的第一件事。
    • 非常感谢。我能够克服这个问题。我认为火花对此有一个问题。希望在下一个版本中解决这个问题。
    猜你喜欢
    • 2018-09-23
    • 2015-05-12
    • 1970-01-01
    • 1970-01-01
    • 2017-07-04
    • 2016-06-22
    • 1970-01-01
    • 1970-01-01
    • 2012-03-31
    相关资源
    最近更新 更多