2016-08-09 16 views
0

jsonの5テラバイトをjson4sを使用してカスタムオブジェクトのRDDに読み込もうとしています。それぞれ約100 MBの50,000ファイルがあります。何らかの理由で、エグゼキュータのサイズを16Gに設定すると、次のエラーが発生します。次のようにSpark - JSONの解析中にタスクスケジューラのエラーが発生しました

ERROR TaskSchedulerImpl: Lost executor foo on bar: Remote RPC client 
disassociated. Likely due to containers exceeding thresholds, or network 
issues. Check driver logs for WARN messages. 

私のコードは次のとおりです。

val input = sc.textFile(inPath) 
val operations = input.mapPartitions(row => { 
     row.flatMap(record => { 
     try { 
      implicit val formats = DefaultFormats // formats not serializable 
      Some(parse(record).extract[MyClass]) 
     } catch { 
      case e: Exception => None 
     } 
     }) 
    }) 

データのギグの数百に読んだとき、私はこの問題を得ることはありません。もし私がエクゼキュータメモリを55Gに増やしても動作しますが、これは非効率的です。結局のところ、圧縮された各ファイルは100 MBに過ぎず、おそらく1 GBを超える容量は解凍されません。私は、8ギガバイトまたは4ギガバイトのエグゼキュータをトンネルで回転させてデータを読み取ることができると思っていただろう。

+0

スパークはメモリ内の計算です。多くのデータがある場合は、多くのメモリが必要になります。 –

+0

多くのエグゼクティブを通じてこれを達成できませんでしたか?なぜあなたは1人のエグゼキュータでより多くのメモリを必要としますか? – Luke

+0

このエラーの原因は何ですか?それは 'ダイレクトバッファメモリ'オーバーフローや他のメモリセクションのオーバーフローによって引き起こされていますか?あなたが提供したエラーメッセージは、複数の問題が発生した場合に表示されます。完全なエラーの詳細を提供してください。 –

答えて

0

これは、memoryOverheadが低すぎることが原因だった。 16ギグで6000に設定しました。

--conf spark.mesos.executor.memoryOverhead=6000 
関連する問題