MapReduce內存調優


 內存調優

Hadoop處理數據時,出現內存溢出的處理方法?(內存調優)

1、Mapper/Reducer階段JVM內存溢出(一般都是堆)

1)JVM堆(Heap)內存溢出:堆內存不足時,一般會拋出如下異常:

第一種:“java.lang.OutOfMemoryError:” GC overhead limit exceeded;

第二種:“Error: Java heapspace”異常信息;

第三種:“running beyondphysical memory limits.Current usage: 4.3 GB of 4.3 GBphysical memoryused; 7.4 GB of 13.2 GB virtual memory used. Killing container”。

2) 棧內存溢出:拋出異常為:java.lang.StackOverflflowError

常會出現在SQL中(SQL語句中條件組合太多,被解析成為不斷的遞歸調用),或MR代碼中有遞歸調用。這種深度的遞歸調用在棧中方法調用鏈條太長導致的。出現這種錯誤一般說明程序寫的有問題。

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 Memory Error...

Halting due to Out Of Memory Error...

Halting due to Out Of Memory Error...

3、非JVM內存溢出

異常信息一般為:java.lang.OutOfMemoryError:Direct buffffer memory

自己申請使用操作系統的內存,沒有控制好,出現了內存泄露,導致的內存溢出。錯誤解決參數調優

1、Mapper/Reducer階段JVM堆內存溢出參數調優

目前MapReduce主要通過兩個組參數去控制內存:(將如下參數調大)

Maper:

mapreduce.map.java.opts=-Xmx2048m(默認參數,表示jvm堆內存,注意是mapreduce不是mapred)

mapreduce.map.memory.mb=2304(container的內存)

Reducer:

mapreduce.reduce.java.opts=-=-Xmx2048m(默認參數,表示jvm堆內存)

mapreduce.reduce.memory.mb=2304(container的內存)

注意:因為在yarn container這種模式下,map/reduce task是運行在Container之中的,所以上面提到的mapreduce.map(reduce).memory.mb大小都大於mapreduce.map(reduce).java.opts值的大小。mapreduce.{map|reduce}.java.opts能夠通過Xmx設置JVM最大的heap的使用,一般設置為0.75倍的memory.mb,因為需要為java code等預留些空間

2、MRAppMaster:

yarn.app.mapreduce.am.command-opts=-Xmx1024m(默認參數,表示jvm堆內存)yarn.app.mapreduce.am.resource.mb=1536(container的內存)注意在Hive ETL里面,按照如下方式設置:set mapreduce.map.child.java.opts="-Xmx3072m"(注:-Xmx設置時一定要用引號,不加引號各種錯誤)set mapreduce.map.memory.mb=3288

set mapreduce.reduce.child.java.opts="xxx"

set mapreduce.reduce.memory.mb=xxx

涉及YARN參數:

•yarn.scheduler.minimum-allocation-mb (最小分配單位1024M)

•yarn.scheduler.maximum-allocation-mb (8192M)

•yarn.nodemanager.vmem-pmem-ratio (虛擬內存和物理內存之間的比率默認 2.1)

•yarn.nodemanager.resource.memory.mb

Yarn的ResourceManger(簡稱RM)通過邏輯上的隊列分配內存,CPU等資源給application,默認情況下RM允許最大AM申請Container資源為8192MB(“yarn.scheduler.maximum-allocation-mb“),默認情況下的最小分配資源為1024M(“yarn.scheduler.minimum-allocation-mb“),AM只能以增量(”yarn.scheduler.minimum-allocation-mb“)和不會超過(“yarn.scheduler.maximum-allocationmb“)的值去向RM申請資源,AM負責將(“mapreduce.map.memory.mb“)和

(“mapreduce.reduce.memory.mb“)的值規整到能被(“yarn.scheduler.minimum-allocation-mb“)整除,RM會拒絕申請內存超過8192MB和不能被1024MB整除的資源請求。(不同配置會有不同)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM