2017-11-14 5 views
0

私は、分散シェルアプリケーションのモデルに従ってネイティブのYARNアプリケーションを作成しています。私のアプリケーションのマスターでは、私は次のように通常のループを使用して2個のコンテナを要求しています:異なるリソース機能を持つYARNコンテナをタイトループでリクエストできますか?

for (int i = 0; i < appContainerList.size(); ++i) 
{ 
    ContainerRequest containerAsk = setupContainerAskForRM(i); 
    amRMClient.addContainerRequest(containerAsk); 
    appContainerList.setStatus(i, "requested");  
} 

限り、二つの容器は、同じ量のメモリを要求するように、いずれかの512または1000、その後まもなく、このループの後に実行されますが、私が手に言います私のAMRMClientAsync.CallbackHandlerのonContainersAllocatedメソッドへのコールバック。割り当てられた2つの割り当てられたコンテナのリストこれは、同じリソース割り当てを持つ2つ以上のコンテナを求める場合にも発生しますが、問題のデモンストレーションが簡素化されるように、2つに保持しています。

しかし、私は異なる機能、例えば512と1000を要求してもコールバックを取得できますが、1つのコンテナしか割り当てられていないので、2番目のコンテナ要求。

私はAMRMClientAsyncとRMの間の通信が毎秒送信されるハートビートの先頭に乗っていることを知っていますので、2つのコンテナ要求の間にスリープを挿入しようとしました。

ここに私の睡眠コードがあります。

for (int i = 0; i < appContainerList.size(); ++i) 
{ 
    ContainerRequest containerAsk = setupContainerAskForRM(i); 
    amRMClient.addContainerRequest(containerAsk); 
    appContainerList.setStatus(i, "requested"); 
    try 
    { 
    Thread.sleep(5000); 
    } 
    catch (InterruptedException ex) 
    { 
    LOG.info("sleep interrupted " + ex); 
    } 
} 

これは間違いなく、異なるリソース機能を持つコンテナにタイトループで要求することはできませんか?異なるリソース機能を持つコンテナの要求は、その間でスリープする必要があるため、同じハートビートのRMと同じ通信に乗ってしまうことはありませんか?

これは、異なるリソース機能を持つさまざまなコンテナタイプがある場合、それらをグループ化して、異なるタイプの要求に少なくとも1つのハートビートがあることを確認する必要があると考えられます。これは、各自が要求しているリソースの能力に関係なく、単純なループでコンテナを要求するよりもはるかに複雑です。

ここに関連記事があります:post by yiheeとJIRAはYARN-314です。

私の質問に対する答えは、YARN-314の通りです。 "現在、同じコンテナと地域のリソース要求はすべて同じサイズになると予想されます。"したがって、異なるリソース要件のコンテナにタイトなループを要求するためには、要求されるリソースが異なる場合に異なる優先順位を持たなければならない。

答えて

0

私自身の質問に答える。私が言及した他の参考文献、特にYARN-314に基づいて、私が要求したコンテナの優先順位を変更しました。そして、コンテナをタイトなループで要求することができ、両方のコンテナを同じ呼び出しでonContainersAllocatedコールバックハンドラに割り当てます。

関連する問題