Yarn的概念以及資源分配

2021-09-25 05:57:41 字數 1424 閱讀 8406

資源:一般來說資源分為cpu和記憶體

記憶體是一種「決定生死」的資源

cpu是一種「影響快慢」的資源

yarn是做什麼的? 是乙個通用資源管理系統,可為上層應用提供統一的資源管理和排程,可為mr,spark,storm等提供資源分配與排程。

yarn的模組劃分:

yarn的三種排程器

把應用程式提交的計算任務,排列成乙個佇列,這是先進先出的佇列,乙個任務完全執行完,才能執行下乙個任務,fifo scheduler是最簡單也是最容易理解的排程器,也不需要任何配置,但它並不適用於共享集群。大的任務可能會占用所有集群資源,這就導致其它小任務被阻塞,比如此圖中job1先提交的,即使後來job2也提交了,但是因為job1還沒有執行完畢,所以job2必須等job1執行完畢後才可以執行。在共享集群中,更適合採用capacity scheduler或fair scheduler,這兩個排程器都允許大任務和小任務在提交的同時獲得一定的系統資源。

允許多個組織共享集群資源,每個組織分配專門的佇列來處理專門的任務,在乙個佇列中,是採用先進先出(fifo scheduler)的策略,比如此圖中,兩個佇列,乙個佇列a分配80%的資源,乙個佇列b分配20%的資源來執行小任務,一開始job1先提交的,即使此時佇列b中沒有提交任務,佇列a也只能使用這80%的資源去執行job1任務,到job2提交的時候,佇列b就會使用20%的資源去執行job2任務,capacity scheduler的配置檔案etc/hadoop/capacity-scheduler.xml

fair排程器的設計目標是為所有的應用分配公平的資源(對公平的定義可以通過引數來設定),假設有兩個使用者a和b,他們分別擁有乙個佇列。當a提交乙個job1而b沒有任務時,a會獲得全部集群資源,然後當b提交乙個job2後,可能不會立即執行,需要等到a的job1執行完成一部分任務然後釋放一些container,此時job2才會獲取資源,執行任務,當job2執行完成後釋放資源後,job1如果還沒有執行完成,則job1又會獲取全部的資源用來執行任務,使用fair scheduler需要修改yarn-size.xml檔案,建立allocation file,列出存在的佇列和各自的 weights and capacities。

spark任務在yarn中的資源分配

監控頁面 master 8088 所佔記憶體總大小 引數如下圖 實際情況中,應用程式申請到的資源量一定大於所申請的資源量 例如 spark driver指定記憶體 2g,executor指定記憶體 2g 3 合計應該是8192m記憶體 但實際上分配的記憶體或許為 12288m 等,為何會出現這樣的情...

Yarn的資源管理

假設一台機器有48g物理記憶體 8core 按照1 2的一般配置 虛擬core vcore 有 16個 1 linux系統本身要佔記憶體 空留 20 48 0.2 9.6g 剩餘 80 38.4g 2 dn程序 datanode 生產4g 更改datanode的配置 hadoop env.sh ha...

Yarn的資源調優

每個job提交到yarn上執行時,都會分配container容器去執行,而這個容器需要資源才能執行,這個資源就是cpu和記憶體。1 cpu資源排程 目前的cpu被yarn劃分為虛擬cpu,這是yarn自己引入的概念,因為每個伺服器的cpu計算能力不一樣,有的機器可能是 其他機器的計算能力的2倍,然後...