Параллельные задачи в пользовательской операции фабрики данных (ADF V2) - PullRequest
0 голосов
/ 17 января 2019

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

Я исправил пул с двумя узлами. Максимальные задачи также установлены на 8 для узла, а политика планирования также установлена ​​на «Распространение». У меня есть только одна пользовательская задача в моем конвейере с Multiple Parallel.Invoke (почти две дюжины). Я надеялся, что это создаст несколько облачных задач и будет распределен по обоим моим узлам, так как оба узла являются одноядерными. Похоже, что когда каждое пользовательское действие выполняется в 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);

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

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

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

1 Ответ

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

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

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