同じHadoopクラスターでFairスケジューラーとCapacityスケジューラーの両方を使用できますか?どのスケジューラーが優れていて効果的か。誰かが私を助けることができますか?
1 に答える
両方を同時に使用できるとは思いません。それも意味がありません。同じクラスターで両方のタイプのスケジューリングを使用するのはなぜですか?特定のユースケースのために、両方のスケジューリングアルゴリズムが登場しました。
公平なスケジューリングは、すべてのジョブが平均して時間の経過とともにリソースの均等なシェアを取得するように、リソースをジョブに割り当てる方法です。実行中のジョブが1つある場合、そのジョブはクラスター全体を使用します。他のジョブが送信されると、解放されたタスクスロットが新しいジョブに割り当てられるため、各ジョブはほぼ同じ量のCPU時間を取得します。ジョブのキューを形成するデフォルトのHadoopスケジューラーとは異なり、これにより、長いジョブを枯渇させることなく、短いジョブを妥当な時間で終了できます。これは、多数のユーザー間でクラスターを共有するための合理的な方法でもあります。最後に、公平な共有はジョブの優先順位でも機能します。優先順位は、各ジョブが取得する必要のある合計計算時間の割合を決定するための重みとして使用されます。
Fair Schedulerは、Facebookがデータウェアハウスを複数のユーザー間で共有する必要があることから生まれました。Facebookは、Hadoopを使用して、毎日蓄積される大量のコンテンツとログデータを管理し始めました。当初、レポートを作成するために毎日データに対して実行する必要のあるジョブはごくわずかでした。ただし、Facebook内の他のグループがHadoopを使用し始めると、制作ジョブの数が増加しました。さらに、アナリストはHive(FacebookのHadoop用のSQLに似たクエリ言語)を介したアドホッククエリにデータウェアハウスを使用し始め、開発者がデータセットを実験するにつれて、より大規模なバッチジョブが送信されました。Facebookのデータチームは、本番ジョブ用に別のクラスターを構築することを検討しましたが、データを複製する必要があり、両方のクラスターの使用率が低いため、これは非常にコストがかかると考えました。その代わり、Facebookは、複数のジョブ間でリソースを均等に割り当て、本番ジョブの容量保証もサポートするFairSchedulerを構築しました。Fair Schedulerは、次の3つの概念に基づいています。
- ジョブは、ユーザー名、Unixグループなどの構成可能な属性に基づいて、またはjobconfを介して特定のプールにあるものとしてジョブにタグを付けることにより、名前付きの「プール」に配置されます。
- 各プールには、構成ファイルで指定された「保証容量」を設定できます。これにより、マップスロットの最小数が提供され、プールに割り当てるスロットが減ります。プールに保留中のジョブがある場合、少なくともこれだけの数のスロットを取得しますが、ジョブがない場合は、スロットを他のプールで使用できます。
- プールの最小値に達していない余剰容量は、公平な共有を使用してジョブ間に割り当てられます。公平な共有により、時間の経過とともに、各ジョブがほぼ同じ量のリソースを受け取ることが保証されます。これは、短いジョブはすぐに終了し、長いジョブは飢えないことが保証されることを意味します。
スケジューラーには、実行時に構成ファイルをリロードしてクラスターを再起動せずにプール設定を変更する機能、ユーザーごとおよびプールごとに実行するジョブの制限、共有を評価するための優先順位の使用など、管理を容易にするための多くの機能も含まれています。さまざまな仕事の。
CapacitySchedulerは、各組織に最小限の容量保証を提供しながら、大規模なクラスターを共有できるように設計されています。中心的な考え方は、Hadoop Map-Reduceクラスターで利用可能なリソースが、コンピューティングのニーズに基づいてクラスターに共同で資金を提供する複数の組織に分割されることです。組織が他の人によって使用されていない余分な容量にアクセスできるという追加の利点があります。これにより、費用効果の高い方法で組織に弾力性がもたらされます。
YahooのCapacitySchedulerは、Fair Schedulerと同様の機能を提供しますが、多少異なる哲学を採用しています。キャパシティスケジューラでは、いくつかの名前付きキューを定義します。各キューには、構成可能な数のマップおよびリデューススロットがあります。スケジューラーは、ジョブが含まれているときに各キューに容量を与え、キュー間で未使用の容量を共有します。ただし、各キュー内では、1つの側面を除いて、優先順位のあるFIFOスケジューリングが使用されます。ユーザーごとに実行中のタスクの割合に制限を設定して、ユーザーがクラスターを均等に共有できるようにすることができます。つまり、キャパシティスケジューラは、すべてのジョブ間で公平な共有を実行するのではなく、ユーザーごとおよび組織ごとに個別のFIFO/優先度クラスタをシミュレートしようとします。
したがって、どのスケジューラーを使用するかを決定するために、必要なものとセットアップに要約されます。
Apache hadoopは、これら両方のタイプのスケジューリングをサポートするようになりました。詳細については、次のリンクをご覧ください。