hadoop1.0 記憶體關係
1. 記憶體
hadoop為各個守護程式(namenode,secondarynamenode,jobtracker,datanode,tasktracker)統一分配的記憶體在hadoop-env.sh中設定,引數為HADOOP_HEAPSIZE,預設為1000M。
大部分情況下,這個統一設定的值可能並不適合。例如對於namenode節點,1000M的記憶體只能儲存幾百萬個檔案的資料塊的引用。如果我想單獨設定namenode的記憶體,可以透過HADOOP_NAMENODE_OPTS來設定。
export Hadoop_NAMENODE_OPTS="-Xmx15360m -Dcom.sun.management.jmxremote $HADOOP_NAMENODE_OPTS"
同樣的,可以透過HADOOP_SECONDARYNAMENODE_OPTS來設定secondrynamenode的記憶體,使得它與namenode保持一致。
當然,還有HADOOP_DATANODE_OPTS、HADOOP_BALANCER_OPTS、HADOOP_JOBTRACKER_OPTS變數供你使用。
此外,tasktracker啟動獨立的子JVM以執行map和reduce任務,分配給每個子JVM的記憶體量由mapred.child.java.opts屬性(mapred-site.xml)控制,預設值為200M。
2. 最大map任務數
一個tasktracker能夠同時執行最大map任務數,由mapred.tasktracker.map.tasks.maximum屬性(mapred-site.xml)控制,預設為2。
3. 最大reduce任務數
一個tasktracker能夠同時執行最大reduce任務數,由mapred.tasktracker.reduce.tasks.maximum屬(mapred-site.xml)性控制,預設為2。
Reduce任務的個數
正確的reduce任務的 個數應該是0.95或者1.75 ×(節點數
×mapred.tasktracker.tasks.maximum引數值)。如果任務數是節點個數的0.95倍,那麼所有的reduce任務能夠在
map任務的輸出傳輸結束後同時開始執行。如果任務數是節點個數的1.75倍,那麼高速的節點會在完成他們第一批reduce任務計算之後開始計算第二批
reduce任務,這樣的情況更有利於負載均衡。
目前reduce任務的數量 由於輸出檔案緩衝區大小(io.buffer.size × 2 ×reduce任務個數 <<
堆大小),被限制在大約1000個左右。直到能夠指定一個固定的上限後,這個問題最終會被解決。
4. 小總結:計算節點的記憶體佔用量。
預設情況下,一個同時執行了namenode,secondarynamenode和jobtracker的主節點,各自使用1000M記憶體,所以總計使用3000M。
預設情況下,一個從節點執行了如下守護程式:
- 1個datanode:預設佔用1000M記憶體。
- 1個tasktracker:預設佔用1000M記憶體。
- 最多2個map任務:2*200M=400M。
- 最多2個reduce任務:2*200M=400M。
即預設情況下,一個從節點需要使用2800M記憶體量。
例如,假設一臺8個處理器的工作節點,每個處理器上執行2個程式,則可以將最大map任務數和最大reduce任務數分別設定成7(因為還有datanode和tasktracker程式,所以不能設定為8),各個JVM子任務可用記憶體設定為400M,則總記憶體開銷=1000M(datanode)+1000M(tasktracker)+7*400M(map)+7*400M(reduce)=7600M
關於task記憶體配置有如下3個選項:
每個任務呼叫記憶體大小
- mapred.child.java.opts
- mapred.map.child.java.opts
- mapred.reduce.child.java.opts
- 通常我們會配置“mapred.child.java.opts”,但其實這個配置已經deprecated,卻而代之的是:mapred.map.child.java.opts和mapred.reduce.child.java.opts兩個配置,詳情大家見JobConf類、
相關文章
- SGA與共享記憶體的關係記憶體
- 堆疊和記憶體的關係 細說記憶體
- CPU、記憶體、磁碟IO之間的關係記憶體
- CPU、記憶體、快取的關係詳細解釋!記憶體快取
- iOS底層原理(一):OC物件實際佔用記憶體與開闢記憶體關係iOS物件記憶體
- 關於redis記憶體分析,記憶體優化Redis記憶體優化
- Linux記憶體效能指標和工具的對應關係圖Linux記憶體指標
- Java中記憶體中的Heap、Stack與程式執行的關係Java記憶體
- 記憶體優化相關記憶體優化
- 關於autoreleasepool記憶體管理記憶體
- iOS記憶體管理相關iOS記憶體
- 關於記憶體錯誤記憶體
- 關於記憶體對齊記憶體
- 記憶體管理中關於記憶體每次增長的大小記憶體
- 關於C中記憶體操作記憶體
- 關於快閃記憶體磁碟記憶體
- 共享記憶體相關(ipcs/ipcrm)記憶體
- 有關記憶體的思考題記憶體
- oracle記憶體調整相關Oracle記憶體
- 關於程式的實體記憶體RSS記憶體
- Redis記憶體——記憶體消耗(記憶體都去哪了?)Redis記憶體
- 記憶體_大頁記憶體記憶體
- project中的堆疊記憶體,記憶體地址引用,gc相關問題Project記憶體GC
- 2 Day DBA-管理Oracle例項-管理記憶體-關於記憶體管理Oracle記憶體
- 關於虛擬機器記憶體和JVM記憶體設定的思考虛擬機記憶體JVM
- iOS 記憶體管理相關面試題iOS記憶體面試題
- golang的記憶體相關內容Golang記憶體
- 關於JavaScript的記憶體機制JavaScript記憶體
- [android]記憶體分析相關文件Android記憶體
- 記憶體管理 記憶體管理概述記憶體
- 【記憶體管理】記憶體佈局記憶體
- SGA中各池記憶體分配顆粒大小與SGA_TARGET引數的關係記憶體
- 9i 下sga_max_size 和SGA中各記憶體分配項的關係記憶體
- 作業系統記憶體管理:頁、頁表項和頁框之間的關係作業系統記憶體
- 實體記憶體和虛擬記憶體記憶體
- 遊戲記憶體對比普通記憶體區別 遊戲記憶體和普通記憶體相差大嗎?遊戲記憶體
- Go:記憶體管理與記憶體清理Go記憶體
- Java的記憶體 -JVM 記憶體管理Java記憶體JVM