1 MR作业运行过程中内存溢出错误分类
1.1 Mapper/Reducer阶段JVM内存溢出(一般都是堆)
1.1.1 JVM堆(Heap)内存溢出:堆内存不足时,一般会抛出如下异常:
- 1)-“java.lang.OutOfMemoryError: ” GC overhead limit exceeded;
- 2)-"Error: Java heapspace" 异常信息
- 3)-"running beyondphysical memory limits. Current usage: 2.1 GB of 2.0 GB physical memory used; 3 GB of 8.4 GB virtual memory used. Killing container"
1.1.2 栈内存溢出:抛出异常为 java.lang.StackOverflowError
常会出现在SQL中(SQL语句中条件组合太多,被解析成为不断的递归调用),或MR代码中有递归调用。这种深度的递归调用在栈中方法调用链条太长导致的。出现这种错误一般说明程序写的有问题。
1.2 MRAppMaster内存不足
如果作业的输入的数据很大,导致产生了大量的Mapper和Reducer数量,致使MRAppMaster(当前作业的管理者)的压力很大,最终导致MRAppMaster内存不足,作业跑了一般出现了OOM信息。
异常信息为:
Exception: java.lang.OutOfMemoryError thrown from theUncaughtExceptionHandler in thread "Socket Reader #1 for port 30703
Halting due to Out Of Me