Параллельные задачи в настраиваемом действии фабрики данных (ADF V2)

Я запускаю пользовательский код в ADF v2 с помощью пакетной службы. Всякий раз, когда это запускается, он создает только одну CloudTask в моем пакетном задании, хотя у меня работает более двух десятков методов parallel.Invoke. Есть ли способ создать несколько задач из одного настраиваемого действия из ADF, чтобы обработка могла распространяться на все узлы в пуле пакетов?

У меня фиксированный пул с двумя узлами. Максимальное количество задач также установлено на 8 на узел, а политика планирования также установлена ​​на «Распространение». У меня есть только одна настраиваемая задача в моем конвейере с Multiple Parallel.Invoke (почти две дюжины). Я надеялся, что это создаст несколько CloudTasks и будет распространяться на оба моих узла, поскольку оба узла одноядерные. Похоже, когда каждое настраиваемое действие выполняется в ADF, оно создает только одну задачу (CloudTask) для пакетной службы.

Другой моей надеждой было использовать

https://docs.microsoft.com/en-us/azure/batch/tutorial-parallel-dotnet

и вручную создать CloudTasks в моем консольном приложении и создать несколько задач программно, а затем запустить это консольное приложение с помощью настраиваемого действия ADF, но CloudTask принимает JobId и Cmd. Хотел что-то вроде следующего, но вместо передачи taskCommandLine я хотел передать имя метода C # и параметры для выполнения

string taskId = "task" + i.ToString().PadLeft(3, '0');
string taskCommandLine = "ping -n " + rand.Next(minPings, maxPings + 
1).ToString() + " localhost";
CloudTask task = new CloudTask(taskId, taskCommandLine); 
// Wanted to do CloudTask task = new CloudTask(taskId, 
SomeMethod(args));
tasks.Add(task);

Также похоже, что мы не можем создавать CloudTasks с помощью .NET API для пакетной обработки в пользовательской активности ADF.

Чего я хотел достичь?

У меня есть данные в таблице SQL Server, и я хочу выполнить различные преобразования, разрезая их по горизонтали или вертикали (путем выбора строк или столбцов). Я хочу запустить эти преобразования в параллельном режиме (хочу иметь несколько экземпляров CloudTask, чтобы каждый из них мог независимо работать с определенным столбцом и после преобразования загружал его в другую таблицу). Но проблема в том, что похоже, что мы не можем использовать .NET Batch Service API в ADF, и единственный способ - иметь несколько настраиваемых действий в моем конвейере фабрики данных.


person InTheWorldOfCodingApplications    schedule 17.01.2019    source источник
comment
Выполняется ли одна и та же задача параллельно или несколько версий одной задачи параллельно?   -  person iamdave    schedule 17.01.2019
comment
У меня есть одна настраиваемая задача с несколькими Parallel.Invoke внутри моего кода и надеюсь, что это распространит выполнение между обоими моими узлами в пуле пакетов. Можем ли мы использовать .NET API для пакетной обработки в ADF для создания нескольких CloudTasks в рамках одного Custom Activity?   -  person InTheWorldOfCodingApplications    schedule 17.01.2019
comment
Привет, ты нашел решение для этого. Имеем дело с примерно тем же сценарием. Будем признательны за любые запросы.   -  person PREETI BANSAL    schedule 10.05.2020


Ответы (1)


Приложение необходимо развернуть на каждом узле в пуле пакетной обработки, а CloudTasks необходимо создать, вызвав приложение с помощью cmd.

CloudTask task =
new CloudTask(
    "MyTask",
    "cmd /c %AZ_BATCH_APP_PACKAGE_MyTask%\\myTask.exe -args -here");
person InTheWorldOfCodingApplications    schedule 21.01.2019