1. 程式人生 > >HDP 2.2 ( Hadoop 2.6 ) 叢集的記憶體引數配置和引數調優 (Yarn/MapReduce2)

HDP 2.2 ( Hadoop 2.6 ) 叢集的記憶體引數配置和引數調優 (Yarn/MapReduce2)

近期在根據叢集上的各節點的物理機配置對叢集的記憶體引數進行調整。  因此較系統的學習了一下hadoop裡對資源調配的各元件的相關引數的含義。 作為示例的配置叢集版本是2.6, hortonworks 2.2. 

首先要理解, hadoop 中 yarn 作為資源管理器, 起到一個底層的控制調配運算資源的作用。   yarn中資源的最小單位是container。 一個container 可以近似認為是一個執行的jvm。 

一個yarn叢集中,有一個ResourceManager (中控的程序,可以存在於叢集中的任何節點上), 還有若干個node manager (每個節點host 上有 一個node manager)每個node manager 管理一個到多個container。 

對於較小規模的hadoop叢集, resource manager 和node manager可以並存於一個host上。 

因此yarn中配置的引數主要有如下幾個。 

1. 在每個node manager一共有多少記憶體和cpu

yarn.node-manager.resource.memory-mb =117000

yarn.node-manager.resource.vcore=20

yarn.nodemanager.vmem-pmem-ratio=2.1

對於叢集中不同硬體配置的節點, 上述兩個配置可以根據物理機的實際配置來寫。  注意的是, 必須給物理機留一些記憶體和計算資源給到作業系統使用不能用光。 建議這裡的物理機配置到整個記憶體的80-90%左右。 我的節點的物理機為128GB 記憶體, 我這裡配置了117GB. 

第三個是實體記憶體和虛擬 記憶體的比例。 後面會解釋怎麼用。 

2. 每個container的分配多少記憶體和cpu

當應用程式向resource manager 申請資源(即申請container )時, RM分配給一個container 多大的記憶體是按照一個最小單位進行分配的。 例如, 我們設定分配的最小單位為4GB, 則RM分配出來的container的記憶體一定是4G的倍數。  假設現在有一個程式向RM申請 5.1G的記憶體, 則RM會分配給它一個8GB的container去執行。 

yarn.scheduler.minimum-allocation-mb=4096

在實際執行map reduce的job中, 一個container實際上是執行一個map 或者reduce task的jvm的程序。 那麼這個jvm在執行中會不斷的請求記憶體,假設它的實體記憶體或虛擬記憶體佔用

超出了container的記憶體設定, 則node manager 會主動的把這個程序kill 掉。  這裡需要澄清一點, JVM使用的記憶體實際上分為虛擬記憶體和實體記憶體。  JVM中所有存在記憶體中的物件都是虛擬記憶體, 但在實際執行中只有一部分是實際載入在實體記憶體中的。 我們使用linux的top 可以看到 VM, RES,    前者是虛擬記憶體,後者可以看成近似是實際佔用的實體記憶體。 因此在設定mapreduce的task的 jvm opts 引數時, 應將heap size 設定的比container允許的最大虛擬記憶體小。 這樣jvm 不會因為申請過多的記憶體而被node manager 強制關閉。 當然設定最大heap size 如果在執行中被超過, jvm就會報 OutOfMemoryException。 

同時還有一個引數,設定了RM可以分配的最大的container是多大。   假設應用程式向RM申請的資源超過了這個值, RM會直接拒絕這個請求。 

yarn.scheduler.maximum-allocation-mb

除了設定Yarn, 還需要設定mapreduce2

mapreduce2 是hadoop 上實際執行計算的引擎。 因此我們在前面所說的“應用程式”向yarn請求資源, 這裡應用程式就是指mapreduce2 這個引擎。 mapreduce2 在邏輯上有幾個概念: 一個job, 一個由app master 以及若干個 map task 和reduce task組成。  app master 負責向 Yarn的RM申請資源, 並將map 和reduce task 送到分配到的container去執行。 

mapreduce中可以設定 map task的預設使用的虛擬記憶體。  這個值是app master 在向 yarn申請用於map task的container時會使用的記憶體值。 

mapreudce.map.memory.mb=8192

mapreudce.reduce.memory.mb=8192

這個值是全域性的, 這裡可以看到mapreduce並不是很智慧的, 他不知道某個job的map task需要使用多大的記憶體。 這個值應該根據叢集大多數任務的特徵來設定。  但是在我們執行一些需要很大記憶體的job的時候,可以在提交job時手工的overwrite這些引數。

另外,mapreduce2中還可以設定每個map、reduce task的子jvm程序的heapsize。  這個值應該比上面的task的虛擬記憶體值小(因為jvm除了heap還有別的物件需要佔用記憶體), 如果jvm程序在執行中heap上的物件佔用記憶體超過這個值, 則會丟擲OutOfMemory Exception

mapreduce.map.java.opts=-Xmx7129m

mapreduce.reduce.java.opts=-Xmx7129m

一個典型的記憶體分配的流程

1. 使用者提交hive sql

2. hive 將sql 翻譯成若干map reduce job

3. mapreduce2  根據map task的預設記憶體分配, 向 yarn 申請資源。 

4. yarn 根據申請的資源大小,以及目前各node manager 當前可用的記憶體和cpu core 來決定 建立多大的container ,並分配給mapreduce2 的job

在container的執行過程中nodemanager 會定期檢查每個container (及其所有子程序)的記憶體使用,包括物理的和虛擬的。 如果超出設定值, 則會強制殺掉該container。 那麼這時這個mapreduce一定會fail。 

解決的方法是, 在啟動job時, 設定 mapreduce.map.memory.mb 、 mapreduce.reudce.memory.mb為一個更大的值,  mapreduce2也會向yarn申請更大的container。 

但是這個值是否越大越好呢 ? 不是。 這個值越大,會導致單個container的記憶體變多,雖然實際使用過程中用不到,但是可分配的container就變少了。 

適當的調小這個值,會使單個container所需的記憶體變小,因此叢集會建立更多的container來執行任務,增加了併發度。更充分的利用節點 上的磁碟和cpu資源。

相關推薦

HDP 2.2 Hadoop 2.6 叢集記憶體引數配置引數調 (Yarn/MapReduce2)

近期在根據叢集上的各節點的物理機配置對叢集的記憶體引數進行調整。  因此較系統的學習了一下hadoop裡對資源調配的各元件的相關引數的含義。 作為示例的配置叢集版本是2.6, hortonworks 2.2.  首先要理解, hadoop 中 yarn 作為資源管理器,

CUDA 學習二十二、優化策略7: 自調應用程式

一、概述        考慮如下一些主要的因素:(1)主機到GPU 的資料傳入/ 傳出;(2)記憶體合併;(3)啟動配置;(4)理論上和實際的佔有率;(5)快取利用率;(6)共享記憶體使用率以及衝突;(7)分支;(8)指令級並行;(9)裝置計算能力; 二、識別硬體    

python介面自動化三十四-封裝與呼叫--函式引數詳解

簡介   前面雖然實現了引數的關聯,但是那種只是記流水賬的完成功能,不便於維護,也沒什麼可讀性,隨著水平和技能的提升,再返回頭去看前邊寫的程式碼,簡直是慘不忍睹那樣的程式碼是初級入門的程式碼水平都達不到。接下來這篇由我帶領小夥伴們把每一 個滑鼠點選動作寫成一個函式,這樣更方便維護了,而且可讀性也高,後期其

LinuxCentOS 學習第22018年6.5日

putty1、使用putty軟件遠程Linux系統,百度搜索下載putty軟件,https://www.putty.org/ 官方網站下載,紅色的64位版本,這個軟件是一個綠色版本,下載解壓後,直接打開Putty.exe文件出現以下畫面,遠程服務器的名字,端口是22,保存為一個遠程的設備名字,最後點擊保存,其

2號團隊-團隊任務4:每日立會2018-12-6

我們是2號團隊,選擇開發的軟體是【教師個人題庫管理系統】,今日整理人:石臻林  學號:2016035107334  職務:專案經理   石臻林【專案經理】:   困難:在工作中並沒有遇到什麼困難  何東方【產品經理】:  困難:在工作中

用pycharm + python寫sparkspark-2.0.1-bin-hadoop2.6

一、將pyspark放入: 該目錄位置(我的是mac): /Library/Python/2.7/site-packages 二、env配置: 步驟1: 步驟2: 步驟3: SPARK_CLASSPATH /Users/Chave

linux虛擬機器安裝hadoop叢集hadoop-2.7.5

<property> <name>dfs.replication</name> <value>2</value> </property> <property> <name>dfs.namenode.name.di

CentOS 6.9升級到Docker 17.03.2-ce絕對成功版

1.從網上得知,基於CentOS 6.9最多隻能升級到Docker 1.9.1版。但是經過一天的搜尋,發現還是能升級到Docker 17.03版的,但是比較繁瑣。具體參考下面文章: 注意事項: 國內不能從golang.org下載任何東西,需要修改moby的Dockerfile檔案,改為如下內

xutils 2.x2.6中的session獲得cookieStore使用

package com.lidroid.xutils; import android.text.TextUtils; import com.lidroid.xutils.exception.HttpException; import com.lidroid.xutils.http.*; import com

Open-Falcon V0.2.1or&grafana+OneAlert

openfalcon open-falcon onealert grafana Open-Falcon V0.2.1 ```一、環境準備 安裝redis&mysqlredis:4.0.mysql:5.6.wget http://mirrors.linuxeye.com/oneins

基本數據類型:1. int整數 2. bool布爾值 3. str字符串

基本數據 首字母 img pla abcdefg fin 數據類型 abc 字符 1:基本數據類型   1. int ==> 整數,主要用來進行數學運算。   2. str ==> 字符串,可以保存少量的數據並進行相應的操作。   3. bool ==>

從零開始的全棧工程師——js篇2.18js的運動

一、元素的 client offset scroll 三個系列 clientWidth / clientHeight / clientTop / clientLeftoffsetWidth / offsetHeight / offsetLeft / offsetTop / offsetParentscrol

Codeforces Round #520 (Div. 2)B貪心,數學

#include<bits/stdc++.h>using namespace std;int mi[100007];int main(){ int cnt=0; int flag=0; int ans=1; int n,k=0; scanf("%d",&n); for(int i=2;i*

牛客網刷題 2^nn>=512

題目:寫一個演算法實現2的n次方(n>=512)。            輸入:一個數字n            輸出:2的n次方 思路:想要求2^n的值我們首先

[Swift4] Swift筆記 2.0函式2,閉包,列舉,結構體

函式,閉包,列舉,結構體 函式多值返回 // 利用 元組 返回多個值 // 利用 陣列 輸入多個值 func calcMaxmain( values :[Int])-> (max :

OpenCV 3計算機視覺 Python語言實現(第2版)含示例程式碼PDF

OpenCV 3計算機視覺 Python語言實現(第2版)(含示例程式碼) 建議購買正版,支援作者 完整pdf下載 百度網盤 連結:https://pan.baidu.com/s/1kUYNN66nsVWBB5Y5cZ06kw 提取碼:u7nv 原始碼下載地址 完整專案   

SpringCloudHystrix斷路器《2服務監控hystrixDashboard

1、服務監控hystrixDashboard 1.1、概述 除了隔離依賴服務的呼叫以外,Hystrix還提供了準實時的呼叫監控(Hystrix Dashboard),Hystrix會持續地記錄所有通過Hystrix發起的請求的執行資訊,並以統計報表和圖形的形式展示給使用者,包括每秒執行多少請

《文言文復興系列 2江湖一劍客

我適? 查爾斯至“故土”後,絕而專畫。臨終,忍苦治之,於屋壁作改藝術史之不朽之作。 然囑土妻,於其死後,棄盡燒之,遂成烏有。 查爾斯之行令人咋舌,不惜所費,艱難跋涉,心至兮;傾其身,盡其力,成其大者;遂乃焚蕩,其志何求? 我欲,既得所欲者:其精在火焰中解,其精在火

深度學習之PyTorch實戰2——神經網路模型搭建引數優化

  上一篇部落格先搭建了基礎環境,並熟悉了基礎知識,本節基於此,再進行深一步的學習。   接下來看看如何基於PyTorch深度學習框架用簡單快捷的方式搭建出複雜的神經網路模型,同時讓模型引數的優化方法趨於高效。如同使用PyTorch中的自動梯度方法一樣,在搭建複雜的神經網路模型的時候,我們也可以使用PyTor

Fabric 1.0原始碼分析(2) blockfile區塊檔案儲存

Fabric 1.0原始碼筆記 之 blockfile(區塊檔案儲存) 1、blockfile概述 blockfile,即Fabric區塊鏈區塊檔案儲存,預設目錄/var/hyperledger/production/ledgersData/chains,含in