開発者として、現在の会社にオンライン Hadoop クラスターがあると想像してください。部門 A は定期的な BI レポートを作成することが多く、部門 B はソフトウェアを使用して一時的なニーズを作成することがよくあります。このとき、これら 2 つのタスクを満たすためにリソースをどのように割り当てるべきでしょうか? 最初に A のタスクを実行してから B のタスクを実行しますか、それとも両方を同時に実行しますか?
上記のような混乱がある場合は、Yarn のリソース スケジューラについて詳しく学ぶことができます。
Yarn の 3 つのスケジューラ
Hadoop2 以降、リソース管理の正式な分離は主に、後期段階ではパブリック リソース管理プラットフォームとして考慮され、ルールを満たす任意のコンピューティング エンジンをその上で実行できるようになります。Yarn は、 Hadoop クラスターのリソース共有リソースとして、 MapReduce だけでなく、Spark や Flink も実行できます。
Yarn フレームワークでは、スケジューラーは非常に重要な部分です。適切なスケジューリング ルールを使用すると、複数のアプリケーションが同時に秩序正しく動作することが保証されます。
最も原始的なスケジューリング ルールはFIFOで、ユーザーがタスクを送信した時間に応じて最初に実行するタスクを決定します。しかし、これは 1 つの大きなタスクのリソースを独占する可能性が高く、他のリソースは継続的に待機する必要があるか、大量のタスクを待機する必要があります。小さなタスクがリソースを占有する可能性があり、クエストで適切なリソースを取得できず、飢餓が発生します。したがって、FIFO は非常にシンプルですが、私たちのニーズを満たすことはできません。
以下の図に示すように、Yarn には FIFO スケジューラ、Capacity Scheduler、Fair Scheduler の 3 つのスケジューラから選択できます。
FIFO スケジューラ
アプリケーションを送信順に先入れ先出しキューに配置します。リソースを割り当てるときは、最初にキューの先頭にあるアプリケーションにリソースを割り当て、次にアプリケーションの要件を満たした後、次のアプリケーションにリソースを割り当てます。上部で満たされます。
FIFO スケジューラは最もシンプルで理解しやすいスケジューラであり、設定は必要ありませんが、共有クラスタには適していません。大規模なアプリケーションはすべてのクラスター リソースを消費し、他のアプリケーションがブロックされる可能性があります。
キャパシティスケジューラ
マルチテナントがクラスター リソースを安全に共有できるようにします。提供される中心的な概念は、複数のキューをサポートするキュー (キュー) です。各キューは、他のキューが使用される前に 1 つのキューでリソースが使用されるように、一定量のリソースで構成できます。組織のサブキューは共有され、各キューはFIFO スケジューリング戦略を採用します。共有リソースの制御と予測可能性を高めるために、アプリケーションは容量の制約の下でリソースをタイムリーに割り当てることができます。
フェアスケジューラ
Fair スケジューラでは、事前に特定のシステム リソースを占有する必要はなく、Fair スケジューラは実行中のすべてのジョブのシステム リソースを動的に調整します。最初の大きなジョブが送信されると、この 1 つのジョブだけが実行され、この時点ですべてのクラスター リソースが取得されます。2 番目の小さなジョブが送信されると、Fair スケジューラはリソースの半分をこの小さなタスクに割り当てます。 2 つのタスクはクラスター リソースを公平に共有します。
最初のタスクが占有しているコンテナを解放するまで待つ必要があるため、2 番目のタスクの送信からリソースの取得までにある程度の遅延が発生することに注意してください。小さなタスクの実行が完了すると、それが占有しているリソースが解放され、大きなタスクがすべてのシステム リソースを取得します。最終的な効果は、Fair スケジューラが高いリソース使用率を達成するだけでなく、小さなタスクが時間内に完了することを保証することです。
EasyMR が Yarn リソース キューを管理する方法
最も原始的なスケジューリング ルールは FIFO です。これは、ユーザーがタスクを送信した時間に応じてどのタスクが最初に実行されるかを決定します。しかし、これにより、大きなタスクがリソースを独占し、他のリソースが継続的に待機する必要が生じ、また、大量の小さなタスクがリソースを占有すると、大きなタスクは適切なリソースを取得できず、飢餓を引き起こします。
したがって、FIFO は非常にシンプルですが、私たちのニーズを満たすことはできません。最も一般的に使用されるのはキャパシティ スケジューリング戦略ですが、キャパシティ キューを構成する際、運用保守担当者はキューのリソース使用率とキューのステータスを考慮する必要があり、変更が完了した後は検証することができません。設定が正しいかどうか。
EasyMR は、シンプルさと効率の原則に基づいて、リソース キュー管理機能をオープンにしました。
キャパシティ スケジューリングを例として、EasyMRでのキューの使用法を簡単に説明します。会社にビッグ データ部門があり、その部門の下にデータ同期グループがあると仮定すると、キュー ツリー図は次のようになります。
root
├── bigdata
|---dataSync
このような階層キューを作成するには、まず親レベルの下に bigdata キューを作成し、次に bigdata の下にサブキュー dataSync を分割する必要があります。これについては後で詳しく説明します。
キューを作成する
まず、親キューbigdataを作成し、最小容量を 20% に、最大容量を 50% に設定します。
bigdata キュー名を親キューに追加します。
<property>
<!-- root队列中有哪些子队列-->
<name>yarn.scheduler.capacity.root.queues</name>
<value>default,bigdata</value>
<description></description>
</property>
ビッグデータの容量スケジューリング構成を設定します。
<property>
<!-- bigdata队列占用的容量百分比-->
<name>yarn.scheduler.capacity.root.bigdata.capacity</name>
<value>20</value>
<description></description>
</property>
<property>
<!-- root队列中bigdata队列占用的容量百分比的最大值-->
<name>yarn.scheduler.capacity.root.bigdata.maximum-capacity</name>
<value>50</value>
<description></description>
</property>
<property>
<!-- queue容量的倍数,用来设置一个user可以获取更多的资源。默认值为1-->
<name>yarn.scheduler.capacity.root.bigdata.user-limit-factor</name>
<value>1</value>
<description></description>
</property>
<property>
<!--设置bigdata队列的状态-->
<name>yarn.scheduler.capacity.root.bigdata.state</name>
<value>RUNNING</value>
<description></description>
</property>
サブキューを作成する
bigdata の親キューの下で、子キューの作成を選択し、最小容量を 10% に設定し、最大容量を 30% に設定します。
dataSync キュー名をbigdata queue に追加します。
<property>
<!-- bigdata队列中有哪些子队列-->
<name>yarn.scheduler.capacity.root.bigdata.queues</name>
<value>dataSync</value>
<description></description>
</property>
dataSync キューの容量スケジューリング構成を設定します。
<property>
<!-- bigdata队列dataSync子队列的容量百分比-->
<name>yarn.scheduler.capacity.root.bigdata.dataSync.capacity</name>
<value>10</value>
<description></description>
</property>
<property>
<!-- bigdata队列中bigdata队列占用的容量百分比的最大值-->
<name>yarn.scheduler.capacity.root.bigdata.dataSync.maximum-capacity</name>
<value>30</value>
<description></description>
</property>
<property>
<!-- queue容量的倍数,用来设置一个user可以获取更多的资源。默认值为1-->
<name>yarn.scheduler.capacity.root.bigdata.dataSync.user-limit-factor</name>
<value>1</value>
<description></description>
</property>
<property>
<!--设置子队列dataSync队列的状态-->
<name>yarn.scheduler.capacity.root.bigdata.dataSync.state</name>
<value>RUNNING</value>
<description></description>
</property>
キューを表示する
作成が完了すると、EasyMR リソース キューのキューの詳細を表示できます。
EasyMR作成後は、yarn Web 管理ページでキュー作成の詳細を確認することもできます。
ここまでで、Yarn の単純なキャパシティー スケジューリングが作成されました。
「Dutstack 製品ホワイトペーパー」: https://www.dtstack.com/resources/1004?src=szsm
「データ ガバナンス業界実践ホワイト ペーパー」ダウンロード アドレス: https://www.dtstack.com/resources/1001?src=szsm Kangaroo Cloud のビッグデータ製品、業界ソリューション、顧客事例について詳しく知りたい、相談したい場合は、 Kangaroo Cloud 公式 Web サイトにアクセスしてください: https://www.dtstack.com/?src=szkyzg
同時に、ビッグデータのオープンソース プロジェクトに興味のある学生は、最新のオープンソース テクノロジー情報を交換するために「Kangaroo Cloud Open Source Framework DingTalk Technology qun」に参加することを歓迎します。qun 番号: 30537511、プロジェクト アドレス: https: // github.com/DTStack
Microsoft の公式発表: Visual Studio for Mac が廃止 中国の開発者チームが作成したプログラミング言語: MoonBit (Moon Rabbit) LLVM の父: Mojo は Python を脅かさない、恐れるべきは C++ であるべき C++ の父 Bjarne Stroustrup 氏が共有人生のアドバイス Linus も 嫌な略語、TM は「GenPD」と呼ばれています Rust 1.72.0 がリリースされ、将来的にサポートされる最小バージョンは Windows 10 です。 Wenxin 氏は、WordPress を社会全体に開放し、 「 100- 「 Google の 高水準の関数型インタプリタ型動的プログラミング言語: Crumb を非推奨にするようユーザーに促す」