Фабрика данных Azure - очистка файлов пакетных задач - PullRequest
0 голосов
/ 13 января 2019

Я работаю с Azure Data Factory v2, использую пул пакетных учетных записей с выделенными узлами для обработки. Я обнаружил, что со временем пакетная активность завершается сбоем из-за отсутствия места на диске D: / temp на узлах. Для каждого задания ADF создается рабочий каталог на узле, и после его завершения я обнаружил, что он не очищает файлы. Интересно, сталкивался ли кто-нибудь еще с этим раньше и какое лучшее решение для реализации.

РЕДАКТИРОВАТЬ: Кажется, что в настоящее время в АПД есть параметр сохранения файлов, которого не было, когда я задавал вопрос. Для любого будущего, столкнувшегося с той же проблемой, это возможное решение.

Ответы [ 4 ]

0 голосов
/ 02 апреля 2019

Вы можете использовать конфигурацию retentionTimeInDays в typeProperties при развертывании через ARM Template.

Обратите внимание, что вы должны указать конфигурацию retentionTimeInDays в Double, а не String.

0 голосов
/ 15 января 2019

Разобравшись с решением, мы надеемся помочь следующему, кто придет.

Я нашел пакет Azure Python SDK для Batch, я создал небольшой скрипт, который будет перебирать все пулы + узлы в учетной записи и удалять любые файлы в каталоге рабочих элементов старше 1 дня.

import azure.batch as batch
import azure.batch.operations.file_operations as file_operations
from azure.batch.batch_auth import SharedKeyCredentials
import azure.batch.operations
import msrest.service_client
from datetime import datetime

program_datetime = datetime.utcnow()

batch_account = 'batchaccount001'
batch_url = 'https://batchaccount001.westeurope.batch.azure.com'
batch_key = '<BatchKeyGoesHere>'
batch_credentials = SharedKeyCredentials(batch_account, batch_key)

#Create Batch Client with which to do operations
batch_client = batch.BatchServiceClient(credentials=batch_credentials,
                                        batch_url = batch_url
                                        )

service_client = msrest.service_client.ServiceClient(batch_credentials, batch_client.config)

#List out all the pools
pools = batch_client.pool.list()
pool_list = [p.id for p in pools]

for p in pool_list:
    nodes = batch_client.compute_node.list(p)
    node_list = [n.id for n in nodes]
    for n in node_list:
        pool_id = p
        node_id = n
        print(f'Pool = {pool_id}, Node = {node_id}')
        fo_client = azure.batch.operations.FileOperations(service_client,
                                                          config=batch_client.config,
                                                          serializer=batch_client._serialize,
                                                          deserializer=batch_client._deserialize)
        files = fo_client.list_from_compute_node(pool_id,
                                                 node_id,
                                                 recursive=True,
                                                 file_list_from_compute_node_options=None,
                                                 custom_headers=None,
                                                 raw=False
                                                )

        for file in files:
            # Check to make sure it's not a directory. Directories do not have a last_modified property.
            if not file.is_directory:
                file_datetime = file.properties.last_modified.replace(tzinfo=None)
                file_age_in_seconds = (program_datetime - file_datetime).total_seconds()
                # Delete anything older than a day in the workitems directory.
                if file_age_in_seconds > 86400 and file.name.startswith('workitems'):
                    print(f'{file_age_in_seconds} : {file.name}')
                    fo_client.delete_from_compute_node(pool_id, node_id, file.name)
0 голосов
/ 18 января 2019

Я инженер Azure Data Factory. Мы использовали пакетный пакет Azure ранее 2018-12-01.8.0, поэтому пакетные задачи, созданные через ADF, по умолчанию имели бесконечный срок хранения, как упоминалось ранее. Мы внедряем исправление по умолчанию для периода хранения для пакетных задач, созданных через ADF, до 30 дней в будущем, а также вводим свойство retentionTimeInDays в typeProperties настраиваемого действия, которое клиенты могут установить в своих конвейерах ADF, чтобы переопределить это значение по умолчанию. , Когда это будет развернуто, документация на https://docs.microsoft.com/en-us/azure/data-factory/transform-data-using-dotnet-custom-activity#custom-activity будет обновлена ​​с более подробной информацией. Спасибо за ваше терпение.

0 голосов
/ 14 января 2019

Очистка задач выполняется либо при удалении задачи, либо по истечении времени хранения задач (https://docs.microsoft.com/en-us/rest/api/batchservice/task/add#taskconstraints). Любая из них должна решить возникшую проблему.

Примечание. Время хранения по умолчанию было уменьшено с бесконечного до 7 дней в последнем API REST (2018-12-01.8.0), чтобы разрешить очистку задачи по умолчанию. Задачи, созданные с помощью версий, предшествующих этому, не будут иметь этого нового значения по умолчанию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...