Конвейеры фабрики данных Azure не работают, когда в источнике нет файлов

В настоящее время мы выполняем загрузку данных с локального сервера Hadoop в SQL DW [через ADF Staged Copy и локальный сервер DMG]. Мы заметили, что конвейеры ADF не работают - когда нет файлов в расположении локального сервера Hadoop [мы не ожидаем, что наши восходящие потоки будут отправлять файлы каждый день, и, следовательно, его действительный сценарий будет иметь НУЛЕВЫЕ файлы на локальном сервере Hadoop] .

У вас есть решение для такого сценария?

Сообщение об ошибке приведено ниже

Неудачное выполнение Операция копирования обнаружила ошибку пользователя: ErrorCode = UserErrorFileNotFound, 'Type = Microsoft.DataTransfer.Common.Shared.HybridDeliveryException, Message = Не удается найти файл' HDFS '. , Source = Microsoft.DataTransfer.ClientLibrary, '' Type = System.Net.WebException, Message = Удаленный сервер возвратил ошибку: (404) Not Found., Source = System, '.

Спасибо, Аравинд


person Aravind    schedule 10.03.2017    source источник


Ответы (3)


Это Требование можно решить, используя задачу метаданных ADFv2, чтобы проверить наличие файла и затем пропустить операцию копирования, если файл или папка не существует:

https://docs.microsoft.com/en-us/azure/data-factory/control-flow-get-metadata-activity

person Jason Horner    schedule 09.09.2018

У вас есть Input DataSet для вашего конвейера? Посмотрите, можете ли вы пропустить зависимость от набора входных данных.

person Nimesh Parikh    schedule 13.03.2017

Мммм, это непросто. Думаю, я проголосую за этот вопрос.

Пара вариантов, которые я могу здесь придумать ...

1) Я бы посоветовал лучше всего создать настраиваемое действие перед копированием, чтобы сначала проверить исходный каталог. Это могло бы обработать поведение, если файл не присутствует, а не просто выдать ошибку. Затем вы можете закодировать это, чтобы оно было немного более изящным, когда оно возвращается, и не блокирует последующие действия ADF.

2) Используйте PowerShell, чтобы проверить активность ADF на наличие ошибки отсутствующего файла. Затем просто установите срез набора данных в состояние «Пропущено» или «Готово», используя командлет для переопределения статуса.

Например:

Set-AzureRmDataFactorySliceStatus `
    -ResourceGroupName $ResourceGroup `
    -DataFactoryName $ADFName.DataFactoryName `
    -DatasetName $Dataset.OutputDatasets `
    -StartDateTime $Dataset.WindowStart `
    -EndDateTime $Dataset.WindowEnd `
    -Status "Ready" `
    -UpdateType "Individual"

Это, конечно, не идеально, но было бы быстрее разработать, чем настраиваемое действие с использованием службы автоматизации Azure.

Надеюсь это поможет.

person Paul Andrew    schedule 14.03.2017
comment
Я получаю ErrorCode = UserErrorInvalidParquetFile, 'Type = Microsoft.DataTransfer.Common.Shared.HybridDeliveryException. как пропустить все ошибки и продолжить обработку следующего файла, если он есть? - person Udhaya; 08.03.2019