Amazon ec2 apachespark任务失败
为什么Apache Spark任务失败?我认为,由于DAG,即使没有缓存任务也可以重新计算?事实上,我正在缓存,我要么得到一个Amazon ec2 apachespark任务失败,amazon-ec2,apache-spark,Amazon Ec2,Apache Spark,为什么Apache Spark任务失败?我认为,由于DAG,即使没有缓存任务也可以重新计算?事实上,我正在缓存,我要么得到一个filenotfoundexception,要么得到以下结果: Exception in thread "main" org.apache.spark.SparkException: Job aborted due to stage failure: Task 0 in stage 9238.0 failed 4 times, most recent failure: L
filenotfoundexception
,要么得到以下结果:
Exception in thread "main" org.apache.spark.SparkException: Job aborted due to stage failure: Task 0 in stage 9238.0 failed 4 times, most recent failure: Lost task 0.3 in stage 9238.0 (TID 17337, ip-XXX-XXX-XXX.compute.internal): java.io.IOException: org.apache.spark.SparkException: Failed to get broadcast_299_piece0 of broadcast_299
org.apache.spark.util.Utils$.tryOrIOException(Utils.scala:930)
org.apache.spark.broadcast.TorrentBroadcast.readObject(TorrentBroadcast.scala:155)
sun.reflect.GeneratedMethodAccessor6.invoke(Unknown Source)
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
java.lang.reflect.Method.invoke(Method.java:606)
java.io.ObjectStreamClass.invokeReadObject(ObjectStreamClass.java:1017)
java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1893)
java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1798)
java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1350)
java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1990)
java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1915)
java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1798)
java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1350)
java.io.ObjectInputStream.readObject(ObjectInputStream.java:370)
org.apache.spark.serializer.JavaDeserializationStream.readObject(JavaSerializer.scala:62)
org.apache.spark.serializer.JavaSerializerInstance.deserialize(JavaSerializer.scala:87)
org.apache.spark.executor.Executor$TaskRunner.run(Executor.scala:160)
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
java.lang.Thread.run(Thread.java:745)
这很奇怪,因为我在较小的实例上运行了相同的程序,并且没有得到filenotfoundexception-这个设备上没有剩余空间,而是得到了上面的错误。当我说,将实例大小增加一倍时,它告诉我,在运行大约1小时后,设备上已经没有空间了——相同的程序,更大的内存,而且空间也用完了!提供了什么?如本期中所述:
现在,在每台机器上,我们为其创建M*R临时文件
洗牌,其中M=地图任务数,R=减少任务数。
当有很多映射器和还原器时,这可能非常高
(例如,1k map*1k reduce=100万个文件用于一次洗牌)。这个
高数字可能会破坏文件系统并显著降低速度
系统关闭。我们应该把这个数字减少到O(R)而不是O(M*R)
因此,如果您确实看到您的磁盘正在耗尽索引节点,您可以尝试以下方法来解决此问题:
减少分区(请参见合并为随机播放=false)
由于文件系统的行为不同,您还可以尝试通过“”将分区数减少到O(R)
有时,您可能会发现需要系统管理员增加FS支持的inode数量
您正在尝试运行决策树分类算法?否。梯度下降,如果这有帮助的话。如果您尝试检查源代码,则有9个点存在spark问题filenotfoundexception
,而这里您有一个不同的问题……是的,这次任务失败了。我可能已经运行了3000次该程序,从昨天开始,我已经开始出现上述错误或filenotfoundexception-此设备上没有剩余空间了
。您能用df
命令的结果更新您的问题吗。我怀疑您的设备上没有足够的临时内存。谢谢conf.set(“spark.shuffle.consolidateFiles”、“true”)
似乎没有帮助。我想我会把隔板砍掉;但我确实觉得这会影响性能(我读到每个核心使用3个分区以获得最佳性能),您需要在性能和可伸缩性之间找到自己的平衡。或者你可以选择第三种方法。