Aracılığıyla paylaş


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 22.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üğümlerde ç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

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 hesabı adlarınızı, hesap anahtarı değerlerinizi ve Batch hesabı 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 hesabı 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ştur ve kaynak dosyalarını yükle

  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, blob_service_client başvuruyu kullanarak Depolama hesabında bir kapsayıcı oluşturup kapsayıcıya veri dosyaları yükler. 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şturun

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 22.04 LTS Azure Marketplace görüntüsüne bir ImageReference içerir. 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="22_04-lts",
                version="latest"
            ),
            node_agent_sku_id="batch.node.ubuntu 22.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ştur

Batch işi, bir veya daha fazla görevin mantıksal gruplandırılmasıdır. İş, görevlerle ilgili ortak ayarları, öncelik ve görevlerin çalıştırılacağı havuz gibi, 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şin hiçbir görevi yoktur.

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, uygulamaları ve betikleri işlem düğümlerine dağıtmanın çeşitli yollarını sunar. 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, oluşturduğu depolama kapsayıcısını otomatik olarak siler ve Batch havuzunu ve işi silme seçeneği sunar. Havuzlar ve düğümler, iş çalıştırmasalar bile düğümler çalışırken ü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 yürüttü 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.