Batch 컴퓨팅 노드에서의 작업 준비 및 해제 태스크

가끔씩 Azure Batch 작업에는 작업이 실행되기 이전의 설정과 해당 작업이 완료된 이후의 사후 작업 유지 관리가 필요합니다. 예를 들어 컴퓨팅 노드에 공통 작업 입력 데이터를 다운로드하거나 해당 작업이 완료된 후 작업 출력 데이터를 Azure Storage에 업로드해야 할 수도 있습니다. ‘작업 준비’ 및 ‘작업 해제’를 사용하면 이러한 작업을 수행할 수 있습니다.

  • 작업 태스크가 실행되기 전에 하나 이상의 태스크를 실행하도록 예약된 모든 컴퓨팅 노드에서 작업 준비 태스크가 실행됩니다.
  • 작업이 완료되면 작업 준비 태스크를 실행한 풀의 각 노드에서 작업 해제 태스크가 실행됩니다.

다른 Batch 태스크와 마찬가지로 작업 준비 또는 해제 태스크가 실행될 때 호출할 명령줄을 지정할 수 있습니다. 작업 준비 및 해제 태스크는 다음과 같은 친숙한 Batch 작업 기능을 제공합니다.

  • 리소스 파일 다운로드
  • 관리자 권한 실행
  • 사용자 지정 환경 변수
  • 최대 실행 기간
  • 재시도 횟수.
  • 파일 보존 시간

이 문서에서는 Batch .NET 라이브러리에서 JobPreparationTaskJobReleaseTask 클래스를 사용하는 방법을 보여줍니다.

컴퓨팅 노드 풀이 작업 실행 간에 지속되고 여러 작업에서 사용되는 ‘공유 풀’ 환경에서는 작업 준비 및 해제 태스크가 특히 유용합니다.

작업 준비 및 해제 태스크 사용 사례

작업 준비 및 작업 해제 태스크가 적합한 시나리오는 다음과 같습니다.

  • 공통 태스크 데이터 다운로드. Batch 작업은 종종 작업의 태스크에 대한 입력으로 데이터의 공통 집합이 필요합니다. 작업 준비 태스크를 사용하여 작업의 다른 태스크를 실행하기 전에 각 노드에 이 데이터를 다운로드할 수 있습니다.

    예를 들어 일별 위험 분석 계산에서 시장 데이터는 작업 특정적이지만 작업의 모든 태스크에는 공통적입니다. 작업 준비 태스크를 사용하여 노드에서 실행되는 모든 태스크가 사용할 수 있도록 각 컴퓨팅 노드에 크기가 종종 수 기가바이트인 이 시장 데이터를 다운로드할 수 있습니다.

  • 작업 및 태스크 출력 삭제. 작업 간에 풀의 컴퓨팅 노드 서비스를 해제하지 않는 공유 풀 환경에서는 실행 간의 작업 데이터를 삭제해야 할 수 있습니다. 예를 들어 노드의 디스크 공간을 절약하거나 조직의 보안 정책을 충족시킬 필요도 있습니다. 작업 해제 태스크를 사용하여 작업 준비 태스크가 다운로드했거나 작업 실행이 생성한 데이터를 삭제할 수 있습니다.

  • 로그 보존. 태스크가 생성한 로그 파일의 복사본을 유지하거나 실패한 애플리케이션이 생성하는 덤프 파일의 작동을 중단할 수 있습니다. 작업 해제 태스크를 사용하여 이 데이터를 압축하고 Azure Storage 계정에 업로드할 수 있습니다.

작업 준비 태스크

Batch는 작업 태스크를 실행하기 전에 작업을 실행하도록 예약된 각 컴퓨팅 노드에서 작업 준비 태스크를 실행합니다. 기본적으로 Batch는 예약된 작업 태스크를 실행하기 전에 작업 준비 태스크가 완료될 때까지 기다리지만 대기하지 않도록 구성할 수 있습니다.

노드가 다시 시작되면 작업 준비 태스크도 다시 실행되지만, 이 동작을 사용하지 않도록 설정할 수도 있습니다. 작업 준비 태스크와 작업 관리자 태스크가 구성된 작업이 있는 경우 작업 준비 태스크는 작업 관리자 태스크 및 다른 모든 태스크보다 먼저 실행됩니다. 작업 준비 태스크는 항상 먼저 실행됩니다.

작업 준비 태스크는 태스크를 실행하도록 예약된 노드에서만 실행됩니다. 이 동작은 태스크가 할당되지 않은 노드에서 불필요한 실행을 방지합니다. 작업 태스크 수가 풀의 노드 수보다 작은 경우 노드에 태스크가 할당되지 않을 수 있습니다. 이 동작은 동시 태스크 실행을 사용할 때도 적용되며, 이는 태스크 개수가 가능한 총 동시 태스크 개수보다 작으면 노드 일부를 유휴 상태로 남겨둡니다.

참고 항목

JobPreparationTaskCloudPool.StartTask와 다른데, JobPreparationTask가 각 작업의 시작 부분에 실행되는 반면 StartTask는 컴퓨팅 노드가 풀에 처음 조인하거나 다시 시작될 때만 실행됩니다.

작업 해제 태스크

작업이 완료된 것으로 표시하면 작업 해제 태스크가 작업 준비 태스크를 실행한 풀의 각 노드에서 실행됩니다. 종료 요청을 발행하여 작업을 완료로 표시합니다. 이 요청은 작업 상태를 종료 중으로 설정하고 작업과 연결된 활성 또는 실행 중인 태스크를 종료하고 작업 해제 태스크를 실행합니다. 작업은 완료 상태로 이동합니다.

참고 항목

작업을 삭제하면 작업 해제 태스크도 실행됩니다. 그러나 작업이 이미 종료된 경우 나중에 작업이 삭제되면 해제 태스크가 두 번째로 실행되지 않습니다.

작업 해제 태스크는 Batch 서비스에 의해 종료되기 전까지 최대 15분 동안 실행될 수 있습니다. 자세한 내용은 REST API 참조 문서를 참조하세요.

Batch .NET을 사용한 작업 준비 및 해제 태스크

작업 준비 태스크를 실행하려면 JobPreparationTask 개체를 작업의 CloudJob.JobPreparationTask 속성에 할당합니다. 마찬가지로 작업 해제 태스크를 사용하려면 JobReleaseTask를 초기화하고 작업의 CloudJob.JobReleaseTask에 할당합니다.

다음 코드 조각에서 myBatchClientBatchClient의 인스턴스이고 myPool은 Batch 계정에 있는 기존 풀입니다.

// Create the CloudJob for CloudPool "myPool"
CloudJob myJob =
    myBatchClient.JobOperations.CreateJob(
        "JobPrepReleaseSampleJob",
        new PoolInformation() { PoolId = "myPool" });

// Specify the command lines for the job preparation and release tasks
string jobPrepCmdLine =
    "cmd /c echo %AZ_BATCH_NODE_ID% > %AZ_BATCH_NODE_SHARED_DIR%\\shared_file.txt";
string jobReleaseCmdLine =
    "cmd /c del %AZ_BATCH_NODE_SHARED_DIR%\\shared_file.txt";

// Assign the job preparation task to the job
myJob.JobPreparationTask =
    new JobPreparationTask { CommandLine = jobPrepCmdLine };

// Assign the job release task to the job
myJob.JobReleaseTask =
    new JobReleaseTask { CommandLine = jobReleaseCmdLine };

await myJob.CommitAsync();

작업 해제 태스크는 작업이 종료되거나 삭제될 때 실행됩니다. JobOperations.TerminateJobAsync를 사용하여 작업을 종료하고 JobOperations.DeleteJobAsync를 사용하여 작업을 삭제합니다. 작업은 일반적으로 해당 태스크가 완료되거나 정의한 시간 제한에 도달할 때 종료 또는 삭제합니다.

// Terminate the job to mark it as completed. Terminate initiates the
// job release task on any node that ran job tasks. Note that the
// job release task also runs when a job is deleted, so you don't
// have to call Terminate if you delete jobs after task completion.

await myBatchClient.JobOperations.TerminateJobAsync("JobPrepReleaseSampleJob");

GitHub의 코드 샘플

작동 중인 작업 준비 및 해제 태스크를 보려면 GitHub에서 JobPrepRelease 샘플 프로젝트를 빌드하고 실행합니다. 이 콘솔 애플리케이션은 다음 작업을 수행합니다.

  1. 노드가 두 개인 풀을 만듭니다.
  2. 작업 준비, 릴리스 및 표준 태스크를 사용하여 작업을 만듭니다.
  3. 먼저 노드의 ‘공유’ 디렉터리의 텍스트 파일에 노드 ID를 기록하는 작업 준비 태스크를 실행합니다.
  4. 동일한 텍스트 파일에 해당 태스크 ID를 기록하는 각 노드에서 태스크를 실행합니다.
  5. 모든 태스크가 완료되면(또는 시간 제한에 도달하면) 콘솔에 각 노드의 텍스트 파일에 있는 내용을 인쇄합니다.
  6. 작업이 완료되면 작업 해제 태스크를 실행하여 노드에서 파일을 삭제합니다.
  7. 작업 준비 및 해제 태스크가 실행된 각 노드에 대한 태스크 종료 코드를 인쇄합니다.
  8. 실행을 일시 중지하여 작업 및/또는 풀 삭제를 확인합니다.

샘플 애플리케이션에서 출력은 다음 예제와 비슷합니다.

Attempting to create pool: JobPrepReleaseSamplePool
Created pool JobPrepReleaseSamplePool with 2 nodes
Checking for existing job JobPrepReleaseSampleJob...
Job JobPrepReleaseSampleJob not found, creating...
Submitting tasks and awaiting completion...
All tasks completed.

Contents of shared\job_prep_and_release.txt on tvm-2434664350_1-20160623t173951z:
-------------------------------------------
tvm-2434664350_1-20160623t173951z tasks:
  task001
  task004
  task005
  task006

Contents of shared\job_prep_and_release.txt on tvm-2434664350_2-20160623t173951z:
-------------------------------------------
tvm-2434664350_2-20160623t173951z tasks:
  task008
  task002
  task003
  task007

Waiting for job JobPrepReleaseSampleJob to reach state Completed
...

tvm-2434664350_1-20160623t173951z:
  Prep task exit code:    0
  Release task exit code: 0

tvm-2434664350_2-20160623t173951z:
  Prep task exit code:    0
  Release task exit code: 0

Delete job? [yes] no
yes
Delete pool? [yes] no
yes

Sample complete, hit ENTER to exit...

참고 항목

새 풀의 노드 만들기 및 시작 시간이 다양하다는 것은 일부 노드가 다른 노드에 앞서 작업을 수행할 준비가 되었다는 의미이므로 다른 출력이 표시될 수 있습니다. 특히, 태스크가 신속하게 완료되기 때문에 풀의 노드 중 하나에서 작업의 태스크를 모두 실행할 수 있습니다. 이 경우 태스크를 실행하지 않은 노드에 대한 작업 준비 및 해제 태스크가 존재하지 않습니다.

Azure Portal에서 작업 준비 및 해제 태스크 보기

Azure Portal을 사용하여 작업 준비 및 해제 태스크를 포함하여 Batch 작업 속성 및 태스크를 볼 수 있습니다. Batch 계정 페이지의 왼쪽 탐색 영역에서 작업을 선택한 다음, 작업을 선택합니다. 샘플 애플리케이션을 실행하는 경우 태스크가 완료된 후 작업 및 풀을 삭제하기 전에 작업 페이지로 이동합니다.

작업 개요 또는 태스크 페이지에서 대략적인 태스크 수를 확장하여 작업 진행 상황 및 상태를 모니터링할 수 있습니다.

Screenshot showing job task progress in the Azure portal.

다음 스크린샷은 샘플 애플리케이션이 실행된 이후의 JobPrepReleaseSampleJob 페이지를 보여줍니다. 이 작업에는 준비 및 해제 태스크가 있었기 때문에 왼쪽 탐색에서 준비 태스크 또는 해제 태스크를 선택하여 해당 속성을 볼 수 있습니다.

Screenshot showing job release task properties in the Azure portal.

다음 단계