我使用 boto3 从 S3 读取文件,这比 sc.textFile(...)
快得多。这些文件大约在 300MB 到 1GB 之间。过程如下:
data = sc.parallelize(list_of_files, numSlices=n_partitions) \
.flatMap(read_from_s3_and_split_lines)
events = data.aggregateByKey(...)
运行此过程时,出现异常:
15/12/04 10:58:00 WARN TaskSetManager: Lost task 41.3 in stage 0.0 (TID 68, 10.83.25.233): org.apache.spark.SparkException: Python worker exited unexpectedly (crashed)
at org.apache.spark.api.python.PythonRunner$$anon$1.read(PythonRDD.scala:203)
at org.apache.spark.api.python.PythonRunner$$anon$1.<init>(PythonRDD.scala:207)
at org.apache.spark.api.python.PythonRunner.compute(PythonRDD.scala:125)
at org.apache.spark.api.python.PythonRDD.compute(PythonRDD.scala:70)
at org.apache.spark.rdd.RDD.computeOrReadCheckpoint(RDD.scala:300)
at org.apache.spark.rdd.RDD.iterator(RDD.scala:264)
at org.apache.spark.api.python.PairwiseRDD.compute(PythonRDD.scala:342)
at org.apache.spark.rdd.RDD.computeOrReadCheckpoint(RDD.scala:300)
at org.apache.spark.rdd.RDD.iterator(RDD.scala:264)
at org.apache.spark.scheduler.ShuffleMapTask.runTask(ShuffleMapTask.scala:73)
at org.apache.spark.scheduler.ShuffleMapTask.runTask(ShuffleMapTask.scala:41)
at org.apache.spark.scheduler.Task.run(Task.scala:88)
at org.apache.spark.executor.Executor$TaskRunner.run(Executor.scala:214)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:745)
Caused by: java.io.EOFException
at java.io.DataInputStream.readInt(DataInputStream.java:392)
at org.apache.spark.api.python.PythonRunner$$anon$1.read(PythonRDD.scala:139)
... 15 more
很多时候,只是一些任务崩溃了,作业就能恢复。然而,有时整个作业会在出现多个此类错误后崩溃。我一直无法找到这个问题的根源,似乎出现和消失取决于我读取的文件数量、我应用的精确转换......读取单个文件时它永远不会失败。
最佳答案
我也遇到过类似的问题,我的调查表明问题是Python进程缺乏可用内存。 Spark 占用了所有内存,Python 进程(PySpark 工作的地方)崩溃了。
一些建议:
- 为机器添加一些内存,
- 取消持久化不需要的 RDD,
- 更明智地管理内存(对 Spark 内存使用添加一些限制)。
关于amazon-s3 - 使用 boto3 读取大文件时 PySpark 抛出 java.io.EOFException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34086923/