YARN中記憶體和CPU兩種資源的排程和隔離實現詳解
至此,Hadoop Yarn基於執行緒監控的記憶體隔離方案介紹完畢
yarn預設只管理記憶體資源,雖然也可以申請cpu資源,但是在沒有cpu資源隔離的情況下效果並不是太好.在叢集規模大,任務多時資源競爭的問題尤為嚴重.
還好yarn提供的LinuxContainerExecutor可以通過cgroup來隔離cpu資源
cgroup
cgroup是系統提供的資源隔離功能,可以隔離系統的多種型別的資源,yarn只用來隔離cpu資源
安裝cgroup
預設系統已經安裝了cgroup了,如果沒有安裝可以通過命令安裝
CentOS 6
yum install -y libcgroup
CentOS 7
yum install -y libcgroup-tools
然後通過命令啟動
CentOS 6
/etc/init.d/cgconfig start
CentOS 7
systemctl start cgconfig.service
檢視/cgroup
目錄,可以看到裡面已經建立了一些目錄,這些目錄就是可以隔離的資源
drwxr-xr-x 2 root root 0 3月 19 20:56 blkio
drwxr-xr-x 3 root root 0 3月 19 20:56 cpu
drwxr-xr-x 2 root root 0 3月 19 20:56 cpuacct
drwxr-xr-x 2 root root 0 3月 19 20:56 cpuset
drwxr-xr-x 2 root root 0 3月 19 20:56 devices
drwxr-xr-x 2 root root 0 3月 19 20:56 freezer
drwxr-xr-x 2 root root 0 3月 19 20:56 memory
drwxr-xr-x 2 root root 0 3月 19 20:56 net_cls
如果目錄沒有建立可以執行
cd /
mkdir cgroup
mount -t tmpfs cgroup_root ./cgroup
mkdir cgroup/cpuset
mount -t cgroup -ocpuset cpuset ./cgroup/cpuset/
mkdir cgroup/cpu
mount -t cgroup -ocpu cpu ./cgroup/cpu/
mkdir cgroup/memory
mount -t cgroup -omemory memory ./cgroup/memory/
通過cgroup隔離cpu資源的步驟為
- 在cpu目錄建立分組
cgroup以組為單位隔離資源,同一個組可以使用的資源相同
一個組在cgroup裡面體現為一個資料夾,建立分組直接使用mkdir
命令即可.
組下面還可以建立下級組.最終可以形成一個樹形結構來完成複雜的資源隔離方案.
每當建立了一個組,系統會自動在目錄立即建立一些檔案,資源控制主要就是通過配置這些檔案來完成
yarn預設使用--w--w--w- 1 root root 0 3月 19 21:09 cgroup.event_control -rw-r--r-- 1 root root 0 3月 19 21:09 cgroup.procs -rw-r--r-- 1 root root 0 3月 19 21:09 cpu.cfs_period_us -rw-r--r-- 1 root root 0 3月 19 21:09 cpu.cfs_quota_us -rw-r--r-- 1 root root 0 3月 19 21:09 cpu.rt_period_us -rw-r--r-- 1 root root 0 3月 19 21:09 cpu.rt_runtime_us -rw-r--r-- 1 root root 0 3月 19 21:09 cpu.shares -r--r--r-- 1 root root 0 3月 19 21:09 cpu.stat -rw-r--r-- 1 root root 0 3月 19 21:09 notify_on_release -rw-r--r-- 1 root root 0 3月 19 21:09 tasks
hadoop-yarn
組作為最上層,任務執行時yarn會為每個container在hadoop-yarn
裡面建立一個組
yarn主要使用cpu.cfs_quota_us
cpu.cfs_period_us
cpu.shares
3個檔案
yarn使用cgroup的兩種方式來控制cpu資源分配- 嚴格按核數隔離資源
可使用核數 = cpu.cfs_quota_us/cpu.cfs_period_us
在yarn中cpu.cfs_quota_us被直接設定為1000000(這個引數可以設定的最大值)
然後根據任務申請的core來計算出cpu.cfs_period_us - 按比例隔離資源
按每個分組裡面cpu.shares的比率來分配cpu
比如A B C三個分組,cpu.shares分別設定為1024 1024 2048,那麼他們可以使用的cpu比率為1:1:2
- 嚴格按核數隔離資源
- 將程序id新增到指定組的tasks檔案
建立完分組後只需要將要限制的程序的id寫入tasks
檔案即可,如果需要解除限制,在tasks
檔案刪除即可
yarn配置
啟動cgroup需要配置幾個配置檔案
etc/hadoop/yarn-site.xml配置
<property>
<name>yarn.nodemanager.container-executor.class</name>
<value>org.apache.hadoop.yarn.server.nodemanager.LinuxContainerExecutor</value>
</property>
<property>
<name>yarn.nodemanager.linux-container-executor.resources-handler.class</name>
<value>org.apache.hadoop.yarn.server.nodemanager.util.CgroupsLCEResourcesHandler</value>
</property>
<property>
<description>yarn使用的cgroup組,預設為/hadoop-yarn</description>
<name>yarn.nodemanager.linux-container-executor.cgroups.hierarchy</name>
<value>/hadoop-yarn</value>
</property>
<property>
<description>是否自動掛載cgroup</description>
<name>yarn.nodemanager.linux-container-executor.cgroups.mount</name>
<value>true</value>
</property>
<property>
<description>cgroup掛載目錄, /sys/fs/cgroup 或者是 /cgroup,目錄和系統有關</description>
<name>yarn.nodemanager.linux-container-executor.cgroups.mount-path</name>
<value>/cgroup</value>
</property>
<property>
<name>yarn.nodemanager.linux-container-executor.group</name>
<value>hadoop</value>
</property>
<property>
<description>配置nodemanager使用多少物理cpu資源,比如24核伺服器配置90的話,最近使用21.6核
相關推薦
YARN中記憶體和CPU兩種資源的排程和隔離實現詳解
Hadoop Yarn的資源隔離是指為執行著不同任務的“Container”提供可獨立使用的計算資源,以避免它們之間相互干擾。目前支援兩種型別的資源隔離:CPU和記憶體,對於這兩種型別的資源,Yarn使用了不同的資源隔離方案。對於CPU而言,它是一種“彈性”資源,使用量大小不
【微信小程式】在js中匯入第三方js或自己寫的js,使用外部js中的function的兩種方法 import和require的區別使用方法
如下 定義了一個外部js檔案,其中有一個function
import lunaCommon from '../lunaCommon.js';
var ctx = wx.getStorageSync("ctx");
var filter = "/ms-code";
var apis
java工作筆記:web 程式設計中關於jni和jna兩種工具操作和效能對比測試
第一次發部落格有點緊張哈。
最近剛剛公司轉崗從底層C語言的編寫到做Java的web restful架構。其中需要呼叫底層C++程式碼庫。所以對於選擇哪種方法從Java呼叫C的程式碼做了簡單地學習和對比測試。在這裡把他們貼出了。希望能有大神出來指點
Android中Broadcast Receiver的兩種註冊方法和區別
broadcast receiver:用以監聽系統或使用者程式broadcast的Intent,它本質上是系統的一種全域性監聽器(與onXxxxListener相似但不同),只要存在與之匹配的Inte
Master原理剖析與原始碼分析:資源排程機制原始碼分析(schedule(),兩種資源排程演算法)
1、主備切換機制原理剖析與原始碼分析
2、註冊機制原理剖析與原始碼分析
3、狀態改變處理機制原始碼分析
4、資源排程機制原始碼分析(schedule(),兩種資源排程演算法)
*
Dri
form表單中get和post兩種提交方式的區別
name bsp inpu get div post input 普通 表單 一、form表單中get和post兩種提交方式的區別?
1.get提交表單中的內容在鏈接處是可見的。post不可見
2.post相比於get是安全的
3.post不收限制大小,get有
Java中的ReentrantLock和synchronized兩種鎖定機制的對比
優化 實現 維護 pla 所有 投票 明顯 拋出異常 數據 多線程和並發性並不是什麽新內容,但是 Java 語言設計中的創新之一就是,它是第一個直接把跨平臺線程模型和正規的內存模型集成到語言中的主流語言。核心類庫包含一個 Thread 類,可以用它來構建、啟動和操縱線程,J
TF之RNN:TF的RNN中的常用的兩種定義scope的方式get_variable和Variable—Jason niu
重復 及其 orf with gpo val 定義 系統 brush
# tensorflow中的兩種定義scope(命名變量)的方式tf.get_variable和tf.Variable。Tensorflow當中有兩種途徑生成變量 variable
import te
JDBC中Oracle的SID和ServiceName兩種方式的連接字符串格式
bottom none color bubuko div nbsp rac 字符串 padding SID格式: jdbc:oracle:thin:@<host>:<port>:<SID>
如: jdbc:oracle:thin:@19
C#中Post請求的兩種方式發送參數鏈和Body的
連接 png ets return div 參數 try 發現 create POST請求 有兩種方式 一種是組裝key=value這種參數對的方式 一種是直接把一個字符串發送過去 作為body的方式
我們在postman中可以看到
sfdsafd
sdfsdfds
js中定時器setTimeout和setInterval兩種定時器
專案中,經常會用到定時器來實現資料實時更新、時間等,簡單總結一下:
Javascript中的定時器有兩種,setInterval和setTimeout,而定時器的作用就是延遲執行。
一、定時器的寫法
setInterval(expression,milliseconds);
HTTP請求協議中GET和POST兩種基本請求方法的區別
GET在瀏覽器回退時是無害的,而POST會再次提交請求。
GET產生的URL地址可以被Bookmark,而POST不可以。
GET請求會被瀏覽器主動cache,而POST不會,除非手動設定。
GET請求只能進行url編碼
HTTP協議中GET和POST兩種基本請求方法的區別
GET和POST兩種基本請求方法的區別
GET和POST是HTTP請求的兩種基本方法,要說它們的區別,接觸過WEB開發的人都能說出一二。
最直觀的區別就是GET把引數包含在URL中,POST通過request body傳遞引數。
你可能自己寫過無數個G
在Unity中“Debug.Log”和“Print”兩種列印方式的區別
先寫個指令碼“PrintAndDebug”,掛在Main Camera 元件上,在指令碼的 Start 函式裡通過這兩種方式列印一段內容 然後執行u3d,看控制檯列印日誌,如下圖 在這裡可以明瞭的看到Debug.Log是直接打印出來的 而Print是繼承自MonoBehaviour的,
Liveness和Readiness兩種Health Check手段在Kubernetes中的使用
一.概述
強大的自愈能力是Kubernetes這一類容器編排管理引擎的一個重要特性。通常情況下,Kubernetes通過重啟發生故障的容器來實現自愈。除此之外,我們還有其他方式來實現基於Kubernetes編排的容器的健康檢查嗎?Liveness和Readiness就是不錯的選擇。
二.實踐步驟
2.1
scalar中的基於Ordered和Ordering兩種比較器
1>Ordered
class PP(var name: String, var age: Int) extends Ordered[PP] {
override def compare(that: PP) = if (this.age > that.age) -1 else if (
numpy中a[][][] 和 a[, , ]兩種索引方式的區別
之前一直對a[][][] 和 a[, , ]兩種索引方式的區別不清楚,今天試驗了一下。
根據三個維度分別是:還是數字,共2^3^ =8種情況進行了實驗。
1、a[:][:][:] 與 a[:, :, :](等價於a[:]), a[1][0][2] 與 a[1,
HTML5中sessionStorage和localStorage兩種儲存方式的使用
<head>
<meta charset="utf-8">
<title>HTML5 本地儲存</title>
<script type="text/javascript">
function $(id){retur
JS刪除JSON陣列中的元素的兩種方法:delete和splice
最近的需求中,需要從JSON陣列中刪除元素,之前不太瞭解,特地查了一下,總結一下:
splice(startIndex,count);這個方法用於從陣列的第startIndex位開始,刪除count個元素。
說明:
1、滿足條件的元素直接被刪除,腳標重信排
2、sta
獲取IOC容器中的bean的兩種方式(id和class)的區別
// ClassPathXmlApplicationContext: 是 ApplicationContext的實現類,從類路徑下來載入配置檔案
ApplicationContext ctx=new ClassPathXmlApplicationContext("a