2016-05-04 1 views
0

2つのワーカーノードを持つスタンドアロンSparkクラスタに対してSparkジョブを実行するプロセスが長時間実行されています。最初はジョブは正常に完了しましたが、1日か2日後には一部のジョブが失敗し始めるようです。すべての失敗ジョブがstderrログに次の順序と例外をログに記録し、同じ労働者で実行されている段階での失敗の結果である:そのノード上のファイルシステムを見てみるとSpark 1.5.2:ワーカーがブロードキャストをディスクに残すことができません

16/05/04 21:07:53 INFO MemoryStore: ensureFreeSpace(2273) called with curMem=988397261, maxMem=1159641169 
16/05/04 21:07:53 INFO MemoryStore: Block broadcast_259_piece0 stored as bytes in memory (estimated size 2.2 KB, free 163.3 MB) 
16/05/04 21:07:53 INFO TorrentBroadcast: Reading broadcast variable 259 took 9 ms 
16/05/04 21:07:53 WARN MemoryStore: Failed to reserve initial memory threshold of 1024.0 KB for computing block broadcast_259 in memory. 
16/05/04 21:07:53 WARN MemoryStore: Not enough space to cache broadcast_259 in memory! (computed 504.0 B so far) 
16/05/04 21:07:53 INFO MemoryStore: Memory use = 942.6 MB (blocks) + 162.9 MB (scratch space shared across 0 tasks(s)) = 1105.5 MB. Storage limit = 1105.9 MB. 
16/05/04 21:07:53 WARN MemoryStore: Persisting block broadcast_259 to disk instead. 
16/05/04 21:07:53 WARN BlockManager: Putting block broadcast_259 failed 
16/05/04 21:07:53 INFO TorrentBroadcast: Started reading broadcast variable 259 
16/05/04 21:07:53 ERROR Executor: Exception in task 1.0 in stage 220.0 (TID 2575) 
java.io.FileNotFoundException: /tmp/aetmpdir/spark/tmp/spark-4de0f2b6-6d96-41f8-9d28-9e9d288f143a/executor-d2b171a9-377d-4857-9754-c41332ceda66/blockmgr-ed82e9b2-bc90-4069-bd89-ed0e7f57468c/28/broadcast_259 (A file or directory in the path name does not exist.) 
    at java.io.FileOutputStream.<init>(FileOutputStream.java:233) 
    at java.io.FileOutputStream.<init>(FileOutputStream.java:183) 
    at org.apache.spark.storage.DiskStore.putIterator(DiskStore.scala:78) 
    at org.apache.spark.storage.MemoryStore.putIterator(MemoryStore.scala:176) 
    at org.apache.spark.storage.MemoryStore.putIterator(MemoryStore.scala:143) 
    at org.apache.spark.storage.BlockManager.doPut(BlockManager.scala:791) 
    at org.apache.spark.storage.BlockManager.putIterator(BlockManager.scala:638) 
    at org.apache.spark.storage.BlockManager.putSingle(BlockManager.scala:996) 
    at org.apache.spark.broadcast.TorrentBroadcast$$anonfun$readBroadcastBlock$1.apply(TorrentBroadcast.scala:182) 
    at org.apache.spark.util.Utils$.tryOrIOException(Utils.scala:1175) 
    at org.apache.spark.broadcast.TorrentBroadcast.readBroadcastBlock(TorrentBroadcast.scala:165) 
    at org.apache.spark.broadcast.TorrentBroadcast._value$lzycompute(TorrentBroadcast.scala:64) 
    at org.apache.spark.broadcast.TorrentBroadcast._value(TorrentBroadcast.scala:64) 
    at org.apache.spark.broadcast.TorrentBroadcast.getValue(TorrentBroadcast.scala:88) 
    at org.apache.spark.broadcast.Broadcast.value(Broadcast.scala:70) 
    at org.apache.spark.scheduler.ResultTask.runTask(ResultTask.scala:62) 
    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:1157) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:627) 
    at java.lang.Thread.run(Thread.java:798) 

、それは番号のサブことは明らかですblockmgrディレクトリ(この場合は28)の-directoryは存在しません。これはFileNotFoundExceptionのルートと思われます。しかし、同じレベルに他のディレクトリがあります。

は比較のために、作業ノードで、私は、ログに次のシーケンスが表示されます。

16/05/02 22:46:15 INFO MemoryStore: ensureFreeSpace(22869550) called with curMem=948197297, maxMem=1159641169 
16/05/02 22:46:15 INFO MemoryStore: 33 blocks selected for dropping 
16/05/02 22:46:15 INFO BlockManager: Dropping block broadcast_1_piece0 from memory 
16/05/02 22:46:15 INFO BlockManager: Writing block broadcast_1_piece0 to disk 
16/05/02 22:46:15 INFO BlockManager: Dropping block broadcast_1 from memory 
16/05/02 22:46:15 INFO BlockManager: Writing block broadcast_1 to disk 
16/05/02 22:46:15 INFO BlockManager: Dropping block broadcast_0_piece0 from memory 
16/05/02 22:46:15 INFO BlockManager: Writing block broadcast_0_piece0 to disk 

はまた、作業ノードで、私は休憩なしで00-3fからディレクトリを参照してください。

両方のノードが同様に設定されているにもかかわらず、障害ノードのblockmgrディレクトリのバックグラウンドクリーンアップがあるようです。

どのような指針や洞察力があれば幸いです。

+1

コードを共有できますか? – goCards

+0

また、スパークジョブをどのように呼び出すのですか? – goCards

答えて

0

さらに調査すると、spark tmpディレクトリの空のディレクトリを削除するシステムクリーンアップルーチンによって問題が発生することが判明しました。

関連する問題