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 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック











JavaQueue のパフォーマンス分析と最適化戦略 キューの概要: キュー (キュー) は Java で一般的に使用されるデータ構造の 1 つであり、さまざまなシナリオで広く使用されています。この記事では、JavaQueue キューのパフォーマンスの問題について、パフォーマンス分析と最適化戦略の 2 つの側面から説明し、具体的なコード例を示します。はじめに キューは、プロデューサー/コンシューマー モード、スレッド プール タスク キュー、およびその他のシナリオの実装に使用できる先入れ先出し (FIFO) データ構造です。 Java は、Arr などのさまざまなキュー実装を提供します。

PHP および MySQL におけるメッセージ遅延とメッセージ再試行におけるキュー テクノロジーの応用概要: Web アプリケーションの継続的な開発に伴い、高い同時処理とシステムの信頼性に対する要求がますます高まっています。解決策として、キュー テクノロジーはメッセージ遅延機能とメッセージ再試行機能を実装するために PHP と MySQL で広く使用されています。この記事では、キューの基本原理、キューを使用してメッセージ遅延を実装する方法、キューを使用してメッセージの再試行を実装する方法など、PHP および MySQL におけるキュー テクノロジのアプリケーションを紹介します。

PHPメールキューシステムの原理と実装は何ですか?インターネットの発展に伴い、電子メールは人々の日常生活や仕事に欠かせないコミュニケーション手段の 1 つになりました。しかし、ビジネスが成長し、ユーザー数が増加すると、メールを直接送信すると、サーバーのパフォーマンスの低下やメール配信の失敗などの問題が発生する可能性があります。この問題を解決するには、メール キュー システムを使用して、シリアル キューを通じて電子メールを送信および管理します。メールキューシステムの実装原理は次のとおりです。メールがキューに入れられるとき、メールを送信する必要があるときは、直接送信する必要はありません。

PHP および MySQL でのキュー タスクの監視とタスク スケジューリングの実装 はじめに 最新の Web アプリケーション開発において、タスク キューは非常に重要なテクノロジです。キューを使用すると、バックグラウンドで実行する必要があるいくつかのタスクをキューに入れ、タスクのスケジュール設定を通じてタスクの実行時間と順序を制御できます。この記事では、PHP と MySQL でタスクの監視とスケジュールを実装する方法を紹介し、具体的なコード例を示します。 1. キューの動作原理 キューは先入れ先出し (FIFO) データ構造であり、

Java ビッグ データ テクノロジ スタック: Hadoop、Spark、Kafka などのビッグ データ分野における Java のアプリケーションを理解します。データ量が増加し続けるにつれて、今日のインターネット時代ではビッグ データ テクノロジが注目のトピックになっています。ビッグデータの分野では、Hadoop、Spark、Kafka などのテクノロジーの名前をよく耳にします。これらのテクノロジーは重要な役割を果たしており、広く使用されているプログラミング言語である Java もビッグデータの分野で大きな役割を果たしています。この記事では、Java のアプリケーション全般に焦点を当てます。

PHP および MySQL におけるキュー プロデューサーおよびコンシューマー パターンの実装方法 インターネット ビジネスの急速な発展に伴い、システム内で大量のタスクを処理する必要性がますます高まっています。キューは、タスクを効率的に処理するための一般的なソリューションです。 PHP や MySQL でキューのプロデューサー/コンシューマー パターン (Producer-ConsumerPattern) を実装するのが一般的ですが、この記事では具体的な実装方法とコード例を紹介します。生産者・消費者モデル

PHPSPL データ構造ライブラリの概要 PHPSPL (標準 PHP ライブラリ) データ構造ライブラリには、さまざまなデータ構造を保存および操作するためのクラスとインターフェイスのセットが含まれています。これらのデータ構造には、配列、リンク リスト、スタック、キュー、セットが含まれており、それぞれがデータを操作するためのメソッドとプロパティの特定のセットを提供します。配列 PHP では、配列は一連の要素を格納する順序付けされたコレクションです。 SPL 配列クラスは、ソート、フィルタリング、マッピングなどのネイティブ PHP 配列の拡張機能を提供します。 SPL 配列クラスの使用例を次に示します。 useSplArrayObject;$array=newArrayObject(["foo","bar","baz"]);$array

PHP および MySQL におけるキュー メッセージ確認メカニズムとメッセージ リトライ処理方法 はじめに: インターネット アプリケーションの開発に伴い、多くのオンライン サービスは大量のリクエストを処理する必要があり、これらのリクエストには非同期処理方法が必要になることがよくあります。キューは、リクエストを処理から効果的に分離し、システムのパフォーマンスと信頼性を向上させる一般的なソリューションです。この記事では、PHPとMySQLにおけるキューのメッセージ確認の仕組みとメッセージのリトライ処理方法を、具体的なコード例とともに紹介します。 1. メッセージキューの概念と機能 メッセージキュー
