web-dev-qa-db-ja.com

EMRクラスターでのGCの最適化

Spark EMRでScalaに書き込まれたジョブを実行していますが、各エグゼキュータの標準出力がGC割り当ての失敗でいっぱいです。

2016-12-07T23:42:20.614+0000: [GC (Allocation Failure) 2016-12-07T23:42:20.614+0000: [ParNew: 909549K->432K(1022400K), 0.0089234 secs] 2279433K->1370373K(3294336K), 0.0090530 secs] [Times: user=0.11 sys=0.00, real=0.00 secs] 
2016-12-07T23:42:21.572+0000: [GC (Allocation Failure) 2016-12-07T23:42:21.572+0000: [ParNew: 909296K->435K(1022400K), 0.0089298 secs] 2279237K->1370376K(3294336K), 0.0091147 secs] [Times: user=0.11 sys=0.01, real=0.00 secs] 
2016-12-07T23:42:22.525+0000: [GC (Allocation Failure) 2016-12-07T23:42:22.525+0000: [ParNew: 909299K->485K(1022400K), 0.0080858 secs] 2279240K->1370427K(3294336K), 0.0082357 secs] [Times: user=0.12 sys=0.00, real=0.01 secs] 
2016-12-07T23:42:23.474+0000: [GC (Allocation Failure) 2016-12-07T23:42:23.474+0000: [ParNew: 909349K->547K(1022400K), 0.0090641 secs] 2279291K->1370489K(3294336K), 0.0091965 secs] [Times: user=0.12 sys=0.00, real=0.00 secs] 

数TBのデータ(主に文字列)を読み取っているので、一定のGCによって処理時間が遅くなるのではないかと心配しています。
このメッセージを理解する方法と、最小のCPU時間を消費するようにGCを最適化する方法についてのアドバイスをいただければ幸いです。

12
Stormbringer

割り当ての失敗は、GCサイクルを開始する通常の最も一般的な理由です。

ログによると、GCは1秒に1回発生し、約10ミリ秒、つまり1%の時間がかかります。 IMO、ここで最適化するものは何もありません。

14
apangin