Hadoop层级队列组织方式
作者: Dong | 新浪微博: 西成懂 | 可以转载, 但必须以超链接形式标明文章原始出处和作者信息及版权声明 网址:http://dongxicheng.org/mapreduce/hadoop-hierarchy-queues/ 在Hadoop 0.20.x版本或者更早的版本,Hadoop采用了平级队列组织方式,在这种组织方
作者:Dong | 新浪微博:西成懂 | 可以转载, 但必须以超链接形式标明文章原始出处和作者信息及版权声明
网址:http://dongxicheng.org/mapreduce/hadoop-hierarchy-queues/
在Hadoop 0.20.x版本或者更早的版本,Hadoop采用了平级队列组织方式,在这种组织方式中,管理员可将用户分到若干个扁平队列中,在每个队列中,可指定一个或几个队列管理员管理这些用户,比如杀死任意用户的作业,修改任意用户作业的优先级。然而,从资源管理角度看,仅仅按照队列组织用户是不够的,还需要将资源划分到这几个队列中,并按照一定的策略完成资源分配,这就需要Hadoop作业调度器的支持。总之,在Hadoop中,队列的组织是队列管理和资源分配的基础。
随着Hadoop应用越来越广泛,有用户提出需支持层级队列组织方式。典型的应用场景如下:在一个Hadoop集群中,管理员将所有计算资源划分给了若干个队列,每个队列对应了一个“组织”,其中有一个组织“Org1”,它分到了60%的资源,它内部包含3中类型的作业:
(1)产品线作业
(2)实验性作业—分属于三个不用的项目:Proj1,Proj2和Proj3
(3)其他类型作业
Org1管理员想更有效地控制这60%资源,比如将大部分资源分配给产品线作业的同时,能够让实验性作业和其他类型作业有最少资源保证。考虑到产品线作业提交频率很低,当有产品线作业提交时,必须第一时间得到资源,剩下的资源才给其他类型的作业,然而,一旦产品线作业运行结束,实验性作业和其他类型作业必须马上获取未使用的资源,一个可能的配置方式如下:
grid { Org1 min=60% { priority min=90% { production min=82% proj1 min=6% max=10% proj2 min=6% proj3 min=6% } miscellaneous min=10% } Org2 min=40% }
这就引出来层级队列组织方式。
(1) 子队列
1)? 队列可以嵌套,每个队列均可以包含子队列。
2)? 用户只能将作业提交到最底层的队列,即叶子队列。
(2)最少容量
1)每个子队列均有一个“最少容量比”属性,表示可以使用父队列的容量的百分比
2)调度器总是优先选择当前资源使用率最低的队列,并为之分配资源。比如同级的两个队列Q1和Q2,他们的最少容量均为30,而Q1已使用10,Q2已使用12,则调度器会优先将资源分配给Q1。
3)最少容量不是“总会保证的最低容量”,也就是说,如果一个队列的最少容量为20,而该队列中所有队列仅使用了5,那么剩下的15可能会分配给其他需要的队列。
4)最少容量的值为不小于0的数,但也不能大于“最大容量”。
(3) 最大容量
1)? 为了防止一个队列超量使用资源,可以为队列设置一个最大容量,这是一个资源使用上限,任何时刻使用的资源总量不能超过该值。
2) 默认情况下队列的最大容量是无限大,这意味着,当一个队列只分配了20%的资源,所有其他队列没有作业时,该队列可能使用100%的资源,当其他队列有作业提交时,再逐步归还。
如何将一个队列中的资源分配给它的各个子队列?
当一个TaskTracker发送心跳请求一个新任务时,调度器会按照以下策略为之选择任务:
1)? 按照 比值{used capacity}/{minimum-capaity},对所有子队列排序;
2)? 选择一个比值{used capacity}/{minimum-capaity}最小的队列:
如果是一个叶子队列,且有处于pending状态的任务,则选择一个任务(不能超过maximum capacity);
否则,递归地从这个队列的子队列中选择任务。
3)? 如果没有找到任务,则查看下一个队列。
层级队列组织方式在 0.21.x和0.22.x中引入,但仅有Capacity Scheduler支持该组织方式(https://issues.apache.org/jira/browse/MAPREDUCE-824 ),当然,最新的YARN(Hadoop 0.23.x和2.0.x-alpha)也为Fair Scheduler增加了层级队列的支持,具体参考:https://issues.apache.org/jira/browse/YARN-187。
如何配置?
以0.21.x为例,管理员可在配置文件mapred-queues.xml中配置层级队列,配置方式如下:
<queues> <queue> <name>Org1</name> <queue> <name>production</name> <properties> <property key="”capacity”" value="”20″/"> <property key="”" maximum-capacity value="”20″/"> <property key="”supports-priority”" value="”true”/"> <property key="”minimum-user-limit-percent”" value="”30″/"> <property key="”maximum-initialized-jobs-per-user”" value="”10″/"> <property key="”user-limit”" value="”30″/"> </property></property></property></property></property></property></properties> </queue> <queue> <name>miscellaneous</name> <properties> <property key="”capacity”" value="”10″/"> <property key="”" maximum-capacity value="”20″/"> <property key="”user-limit”" value="”20″/"> </property></property></property></properties> </queue> 。。。。。。。 </queue></queues>
管理员可在capacity-scheduler.xml中设置一些参数的默认值和Capacity独有的配置:
<configuration> <property> <name>mapred.capacity-scheduler.default-supports-priority</name> <value>false</value> </property> <property> <name>mapred.capacity-scheduler.default-minimum-user-limit-percent</name> <value>100</value> </property> <property> <name>mapred.capacity-scheduler.default-maximum-initialized-jobs-per-user</name> <value>2</value> </property> <property> <name>mapred.capacity-scheduler.init-poll-interval</name> <value>5000</value> </property> <property> <name>mapred.capacity-scheduler.init-worker-threads</name> <value>5</value> </property> </configuration>
原创文章,转载请注明: 转载自董的博客
本文链接地址: http://dongxicheng.org/mapreduce/hadoop-hierarchy-queues/
作者:Dong,作者介绍:http://dongxicheng.org/about/
Copyright © 2012
This feed is for personal, non-commercial use only.
The use of this feed on other websites breaches copyright. If this content is not in your news reader, it makes the page you are viewing an infringement of the copyright. (Digital Fingerprint:
)

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

JavaQueue佇列的效能分析與最佳化策略摘要:佇列(Queue)是Java中常用的資料結構之一,廣泛應用於各種場景。本文將從效能分析和最佳化策略兩個面向來探討JavaQueue佇列的效能問題,並給出具體的程式碼範例。引言佇列是一種先進先出(FIFO)的資料結構,可用來實作生產者-消費者模式、執行緒池任務佇列等場景。 Java提供了多種佇列的實現,例如Arr

佇列技術在PHP與MySQL中的消息延遲和訊息重試的應用摘要:隨著Web應用程式的不斷發展,對於高並發處理和系統可靠性方面的需求越來越高。佇列技術作為一種解決方案,被廣泛應用於PHP與MySQL中,以實現訊息延遲和訊息重試的功能。本文將介紹隊列技術在PHP與MySQL中的應用,包括佇列的基本原理、使用佇列實現訊息延遲的方法和使用佇列實作訊息重試的方法,並給出

PHP郵件佇列系統的原理和實作方式是什麼?隨著網路的發展,電子郵件已經成為人們日常生活和工作中必不可少的溝通方式之一。然而,隨著業務的成長和用戶數量的增加,直接發送電子郵件可能會導致伺服器效能下降、郵件發送失敗等問題。為了解決這個問題,可以使用郵件佇列系統來透過串列佇列的方式傳送和管理電子郵件。郵件佇列系統的實作原理如下:郵件入佇列當需要傳送郵件時,不再直

隊列在PHP與MySQL中的任務監控和任務調度的實現方案引言在現代的Web應用程式開發中,任務隊列是非常重要的一項技術。透過佇列,我們可以將一些需要在背景執行的任務排隊,並透過任務排程來控制任務的執行時間和順序。本文將介紹如何在PHP與MySQL中實現任務的監控與調度,並提供具體的程式碼範例。一、佇列的工作原理佇列是一種先進先出(FIFO)的資料結構,可以用來

Java大數據技術堆疊:了解Java在大數據領域的應用,如Hadoop、Spark、Kafka等隨著資料量不斷增加,大數據技術成為了當今網路時代的熱門話題。在大數據領域,我們常聽到Hadoop、Spark、Kafka等技術的名字。這些技術起到了至關重要的作用,而Java作為一門廣泛應用的程式語言,也在大數據領域發揮著巨大的作用。本文將重點放在Java在大

隊列的生產者與消費者模式在PHP與MySQL中的實作方法隨著網路業務的快速發展,系統中處理大量任務的需求變得越來越迫切。隊列是一種常見的解決方案,可以有效率地處理任務。隊列的生產者-消費者模式(Producer-ConsumerPattern)在PHP和MySQL中的實作方法是常見的解決方案,本文將介紹具體的實作方法,並提供程式碼範例。生產者-消費者模式

PHPSPL資料結構庫概述PHPSPL(標準php庫)資料結構庫包含一組類別和接口,用於儲存和操作各種資料結構。這些資料結構包括數組、鍊錶、堆疊、佇列和集合,每個資料結構都提供了一組特定的方法和屬性,用於操縱資料。數組在PHP中,數組是儲存一系列元素的有序集合。 SPL數組類別提供了對原生的PHP數組進行加強的功能,包括排序、過濾和映射。以下是使用SPL陣列類別的範例:useSplArrayObject;$array=newArrayObject(["foo","bar","baz"]);$array

隊列在PHP與MySQL中的容錯機制和故障復原的實作方法概述:佇列是一種常用的資料結構,在電腦科學中被廣泛應用。它類似於現實生活中的排隊,可以按照先進先出的原則處理任務。在PHP與MySQL中使用佇列可以實現一些複雜的任務調度,同時也需要考慮容錯機制與故障恢復,確保系統的可靠性。本文將介紹在PHP與MySQL中實作佇列的容錯機制與故障復原的方法,並提供具體
