2017-11-09 1 views
0

Azureバッチに多数のタスクを送信しようとしています。 3つのジョブがあり、それらのジョブには合計67,000のタスクが分散しています。ノードSDKを使用したAzureバッチジョブへのタスクの送信

私がいくつかのタスクを送信すると、すべてが完全に機能します。完全なリストを送信するとすぐに、それは転倒するようですが、有用なエラーメッセージは表示されません。合計に何らかの制限がありますか?または私がそれらを送ることができる率?私はAzure関数、ノードSDKを使用しており、タスクを非同期で追加することを約束しています。

   async.each(tasks, function(task, callback) { 
        var taskID = task.id + '_process'; 

        var config = { 
         id: taskID, 
         displayName: 'Render portion ' + task.id + ' in job ' + task.job.id, 
         commandLine: "python3 main.py '" + JSON.stringify(task) + "'" 
        }; 

        batchClient.task.add(task.job.id, config).then(function(result) { 
         context.log('Task for portion : ' + task.id + ' submitted successfully'); 
         callback(); 
        }).catch(function(error){ 
         context.log('Task failed to be added'); 
         callbacK(error); 
        }); 

       }, function(error) { 
        if(error) { 
         context.log('Error adding task.'); 
         context.res = { body: error }; 
         context.done(); 
        } else { 
         context.log('All tasks have been queued successfully'); 
         context.res = { body: 'All tasks have been queued successfully' }; 
         context.done(); 
        } 
       }); 

この時点では、私には何かを与えてくれるだけで、エラーが発生することに興奮しています。私は10のタスクを送信しようとしましたが、正常に動作し、65,000を送信し、それは黙って失敗します。

+0

Hiya Mark、Iこれをさらに理解するためには、いくつかのことを考えることが重要です。仕事の負荷はどのように見えますか? (遊びのプール数、デザインにはどのような戦略がありますか?)また、正確なユーザーエラーを軽く叩いてください。 ':)'ありがとう! –

+0

ワークロードは、1つのプール上の3つのジョブにまたがる65,000のタスクです。プールには合計128個のNC6マシン〜780個のコアがあります。スクリプトの中にエラーメッセージが全く出ず、実行時間の30分後にタイムアウトするだけです。 – Mark

答えて

1

コレクションAPIは1回のAPI呼び出しで最大100個のタスクを処理できるため、タスク追加APIの代わりにAdd task collection APIを使用することをお勧めします。これにより、100回のAPIコールの総数を減らすことができます。

このAPIを使用しても問題が解決しない場合は、SDKに実際に高いレベルの並列処理が含まれている可能性があります...バッチへの呼び出しを取り除き、あなたが持っているコードに問題がないことを確認する価値があります(ちょうど静的URLで単純なhttpを取得すると置き換えられますか?)

+0

ありがとう、私はタスクコレクションの追加を使用するに切り替えるために私のコードをリファクタリングする必要があったが、それは完全に働いた! – Mark

関連する問題