Hızlı Başlangıç: Batch havuzu oluşturmak ve bir iş çalıştırmak için Python kullanma

Bu hızlı başlangıçta, Python için Azure Batch kitaplıklarını kullanan bir uygulamayı çalıştırarak Azure Batch'i kullanmaya nasıl başlandığınız gösterilmektedir. Python uygulaması:

  • Batch görev işleme için kullanmak üzere bir Azure Depolama blob kapsayıcısına birkaç giriş veri dosyası yükler.
  • Ubuntu 20.04 LTS işletim sistemini çalıştıran iki sanal makineden (VM) veya işlem düğümünden oluşan bir havuz oluşturur.
  • Düğümler üzerinde çalıştırılacak bir iş ve üç görev oluşturur. Her görev bir Bash kabuğu komut satırı kullanarak giriş dosyalarından birini işler.
  • Görevlerin döndüreceği çıkış dosyalarını görüntüler.

Bu hızlı başlangıcı tamamladıktan sonra Batch hizmetinin temel kavramlarını anlarsınız ve Batch'i daha gerçekçi ve daha büyük ölçekli iş yükleriyle kullanmaya hazır olursunuz.

Önkoşullar

  • Etkin aboneliği olan bir Azure hesabı. Hesabınız yoksa ücretsiz bir hesap oluşturun.

  • Bağlantılı Azure Depolama hesabı olan bir Batch hesabı. Aşağıdaki yöntemlerden herhangi birini kullanarak hesapları oluşturabilirsiniz: Azure CLI | Azure portalı | Bicep | ARM şablonu | Terraform.

  • Pip paket yöneticisini içeren Python sürüm 3.8 veya üzeri.

Uygulamayı çalıştırma

Bu hızlı başlangıcı tamamlamak için Python uygulamasını indirir veya kopyalar, hesap değerlerinizi sağlar, uygulamayı çalıştırır ve çıkışı doğrularsınız.

Uygulamayı indirme veya kopyalama

  1. GitHub'dan Azure Batch Python Hızlı Başlangıç uygulamasını indirin veya kopyalayın. Uygulama deposunu bir Git istemcisiyle kopyalamak için aşağıdaki komutu kullanın:

    git clone https://github.com/Azure-Samples/batch-python-quickstart.git
    
  2. batch-python-quickstart/src klasörüne geçin ve kullanarak pipgerekli paketleri yükleyin.

    pip install -r requirements.txt
    

Hesap bilgilerinizi sağlayın

Python uygulamasının Batch ve Depolama hesap adlarınızı, hesap anahtarı değerlerinizi ve Batch hesap uç noktanızı kullanması gerekir. Bu bilgileri Azure portalından, Azure API'lerinden veya komut satırı araçlarından alabilirsiniz.

Hesap bilgilerinizi Azure portalından almak için:

  1. Azure Search çubuğunda Batch hesabınızın adını arayın ve seçin.
  2. Batch hesabı sayfanızda sol gezinti bölmesinden Anahtarlar'ı seçin.
  3. Anahtarlar sayfasında aşağıdaki değerleri kopyalayın:
  • Batch hesabı
  • Hesap uç noktası
  • Birincil erişim anahtarı
  • Depolama hesabı adı
  • Anahtar1

İndirdiğiniz Python uygulamasında, kopyaladığınız değerleri sağlamak için config.py dosyasında aşağıdaki dizeleri düzenleyin.

BATCH_ACCOUNT_NAME = '<batch account>'
BATCH_ACCOUNT_KEY = '<primary access key>'
BATCH_ACCOUNT_URL = '<account endpoint>'
STORAGE_ACCOUNT_NAME = '<storage account name>'
STORAGE_ACCOUNT_KEY = '<key1>'

Önemli

Hesap anahtarlarının uygulama kaynağında kullanıma açıklanması Üretim kullanımı için önerilmez. Kimlik bilgilerine erişimi kısıtlamalı ve değişkenleri veya yapılandırma dosyasını kullanarak kodunuzda bunlara başvurmalısınız. Batch ve Depolama hesap anahtarlarını Azure Key Vault'ta depolamak en iyisidir.

Uygulamayı çalıştırma ve çıkışı görüntüleme

Batch iş akışının çalıştığını görmek için uygulamayı çalıştırın.

python python_quickstart_client.py

Tipik çalışma süresi yaklaşık üç dakikadır. İlk havuz düğümü kurulumu en çok zaman alır.

Uygulama aşağıdaki örneğe benzer bir çıkış döndürür:

Sample start: 11/26/2012 4:02:54 PM

Uploading file taskdata0.txt to container [input]...
Uploading file taskdata1.txt to container [input]...
Uploading file taskdata2.txt to container [input]...
Creating pool [PythonQuickstartPool]...
Creating job [PythonQuickstartJob]...
Adding 3 tasks to job [PythonQuickstartJob]...
Monitoring all tasks for 'Completed' state, timeout in 00:30:00...

Havuzun işlem düğümleri başlatılırken duraklama Monitoring all tasks for 'Completed' state, timeout in 00:30:00... olur. Görevler oluşturulduktan sonra Batch bunları havuzda çalıştırılacak şekilde kuyruğa alır. İlk işlem düğümü kullanılabilir olduğunda, ilk görev düğümde çalışır. Azure portalındaki Batch hesabı sayfanızdan düğüm, görev ve iş durumunu izleyebilirsiniz.

Her görev tamamlandıktan sonra aşağıdaki örneğe benzer bir çıktı görürsünüz:

Printing task output...
Task: Task0
Node: tvm-2850684224_3-20171205t000401z
Standard output:
Batch processing began with mainframe computers and punch cards. Today it still plays a central role...

Kodu gözden geçirin

Azure Batch Python Hızlı Başlangıcı'ndaki adımları anlamak için kodu gözden geçirin.

Hizmet istemcileri oluşturma ve kaynak dosyalarını karşıya yükleme

  1. Uygulama, Depolama hesabıyla etkileşim kurmak için bir BlobServiceClient nesnesi oluşturur.

    blob_service_client = BlobServiceClient(
            account_url=f"https://{config.STORAGE_ACCOUNT_NAME}.{config.STORAGE_ACCOUNT_DOMAIN}/",
            credential=config.STORAGE_ACCOUNT_KEY
        )
    
  2. Uygulama, Depolama hesabında bir kapsayıcı oluşturmak ve kapsayıcıya veri dosyaları yüklemek için başvuruyu kullanırblob_service_client. Depolama alanındaki dosyalar, Batch hizmetinin daha sonra işlem düğümlerine indirebileceği Batch ResourceFile nesneleri olarak tanımlanır.

    input_file_paths = [os.path.join(sys.path[0], 'taskdata0.txt'),
                        os.path.join(sys.path[0], 'taskdata1.txt'),
                        os.path.join(sys.path[0], 'taskdata2.txt')]
    
    input_files = [
        upload_file_to_container(blob_service_client, input_container_name, file_path)
        for file_path in input_file_paths]
    
  3. Uygulama, Batch hesabında havuzları, işleri ve görevleri oluşturmak ve yönetmek için bir BatchServiceClient nesnesi oluşturur. Batch istemcisi paylaşılan anahtar kimlik doğrulamasını kullanır. Batch, Microsoft Entra kimlik doğrulamayı da destekler.

    credentials = SharedKeyCredentials(config.BATCH_ACCOUNT_NAME,
            config.BATCH_ACCOUNT_KEY)
    
        batch_client = BatchServiceClient(
            credentials,
            batch_url=config.BATCH_ACCOUNT_URL)
    

İşlem düğümleri havuzu oluşturma

Bir Batch havuzu oluşturmak için uygulama, düğüm sayısını, VM boyutunu ve havuz yapılandırmasını ayarlamak için PoolAddParameter sınıfını kullanır. Aşağıdaki VirtualMachineConfiguration nesnesi, Ubuntu Server 20.04 LTS Azure Market görüntüsüne ImageReference belirtir. Batch, çok çeşitli Linux ve Windows Server Market görüntülerini destekler ve özel VM görüntülerini de destekler.

POOL_NODE_COUNT vePOOL_VM_SIZE, tanımlı sabitlerdir. Uygulama, iki boyutlu bir Standard_DS1_v2 düğümü havuzu oluşturur. Bu boyut, bu hızlı başlangıç için iyi bir performans ve maliyet dengesi sunar.

Pool.add yöntemi, havuzu Batch hizmetine gönderir.

new_pool = batchmodels.PoolAddParameter(
        id=pool_id,
        virtual_machine_configuration=batchmodels.VirtualMachineConfiguration(
            image_reference=batchmodels.ImageReference(
                publisher="canonical",
                offer="0001-com-ubuntu-server-focal",
                sku="20_04-lts",
                version="latest"
            ),
            node_agent_sku_id="batch.node.ubuntu 20.04"),
        vm_size=config.POOL_VM_SIZE,
        target_dedicated_nodes=config.POOL_NODE_COUNT
    )
    batch_service_client.pool.add(new_pool)

Batch işi oluşturma

Batch işi bir veya daha fazla görevin mantıksal gruplandırmasıdır. İş, görevler için ortak olan öncelik ve görevlerin çalıştırılacak havuzu gibi ayarları içerir.

Uygulama, havuzda iş oluşturmak için JobAddParameter sınıfını kullanır. job.add yöntemi, işi belirtilen Batch hesabına ekler. Başlangıçta iş hiçbir görev içermez.

job = batchmodels.JobAddParameter(
    id=job_id,
    pool_info=batchmodels.PoolInformation(pool_id=pool_id))

batch_service_client.job.add(job)

Görev oluşturma

Batch, işlem düğümlerine uygulama ve betik dağıtmanın çeşitli yollarını sağlar. Bu uygulama TaskAddParameter sınıfını kullanarak görev nesnelerinin listesini oluşturur. Her görev, bir uygulama veya betik belirtmek için bir command_line parametre kullanarak bir giriş dosyasını işler.

Aşağıdaki betik, metin dosyalarını görüntülemek için Bash kabuğu cat komutunu çalıştırarak giriş resource_files nesnelerini işler. Uygulama daha sonra her görevi işe eklemek için task.add_collection yöntemini kullanır ve bu yöntem görevleri işlem düğümlerinde çalıştırılacak şekilde kuyruğa alır.

tasks = []

for idx, input_file in enumerate(resource_input_files):
    command = f"/bin/bash -c \"cat {input_file.file_path}\""
    tasks.append(batchmodels.TaskAddParameter(
        id=f'Task{idx}',
        command_line=command,
        resource_files=[input_file]
    )
    )

batch_service_client.task.add_collection(job_id, tasks)

Görev çıktısını görüntüleme

Uygulama, görevlerin tamamlandığından emin olmak için görev durumunu izler. Her görev başarıyla çalıştırıldığında, görev komut çıkışı stdout.txt dosyasına yazar. Uygulama daha sonra tamamlanan her görev için stdout.txt dosyasını görüntüler.

tasks = batch_service_client.task.list(job_id)

for task in tasks:

    node_id = batch_service_client.task.get(job_id, task.id).node_info.node_id
    print(f"Task: {task.id}")
    print(f"Node: {node_id}")

    stream = batch_service_client.file.get_from_task(
        job_id, task.id, config.STANDARD_OUT_FILE_NAME)

    file_text = _read_stream_as_string(
        stream,
        text_encoding)

    if text_encoding is None:
        text_encoding = DEFAULT_ENCODING

    sys.stdout = io.TextIOWrapper(sys.stdout.detach(), encoding = text_encoding)
    sys.stderr = io.TextIOWrapper(sys.stderr.detach(), encoding = text_encoding)

    print("Standard output:")
    print(file_text)

Kaynakları temizleme

Uygulama kendi oluşturduğu depolama kapsayıcısını otomatik olarak siler ve Batch havuzu ve işini silme seçeneğini sunar. İş çalıştırmasalar bile, düğümler çalışırken havuzlar ve düğümler ücretlendirilir. Havuza artık ihtiyacınız yoksa silin.

Batch kaynaklarınıza artık ihtiyacınız kalmadığında, bunları içeren kaynak grubunu silebilirsiniz. Azure portalında kaynak grubu sayfasının üst kısmındaki Kaynak grubunu sil'i seçin. Kaynak grubunu sil ekranında kaynak grubu adını girin ve Sil'i seçin.

Sonraki adımlar

Bu hızlı başlangıçta Batch havuzu, düğümler, iş ve görevler oluşturmak için Batch Python API'sini kullanan bir uygulama çalıştırmıştınız. İş kaynak dosyalarını bir depolama kapsayıcısına yükledi, düğümlerde görevler çalıştırdı ve düğümlerden çıktıyı görüntüledi.

Batch hizmetinin temel kavramlarını anladığınıza göre, Batch'i daha gerçekçi ve daha büyük ölçekli iş yükleriyle kullanmaya hazırsınız. Azure Batch hakkında daha fazla bilgi edinmek ve gerçek dünya uygulamasıyla paralel iş yükünde gezinmek için Batch Python öğreticisine geçin.