数据工厂自定义活动(ADF V2)中的并行任务

时间:2019-01-17 05:19:55

标签: azure-data-factory-2 azure-batch

我正在使用批处理服务在ADF v2中运行自定义代码活动。每当运行此命令时,尽管我有两个以上的parallel.Invoke方法正在运行,但它仅在我的批处理作业中创建一个CloudTask。有没有一种方法可以从ADF的一个“自定义活动”创建多个任务,以便处理可以分布在“批处理池”中的所有节点上

我有两个节点的固定池。每个节点的“最大任务数”也设置为8,“调度”策略也设置为“传播”。我在使用Multiple Parallel.Invoke的管道中只有一个Custom Task.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);

而且看起来我们无法通过在ADF的自定义活动中使用.NET API批量创建CloudTasks

我想实现什么?

我在SQL Server表中有数据,我想通过水平或垂直切片(通过选择行或列)对其进行不同的转换。我想在Parallel中运行这些转换(希望有多个CloudTask实例,以便每个实例可以独立地在特定列上操作,并在转换后加载它 放入另一个表)。但是问题在于,我们似乎无法在ADF中使用.NET批处理服务API,唯一的方法似乎是在我的Data Factory管道中具有多个自定义活动。

1 个答案:

答案 0 :(得分:0)

应用程序需要部署在批处理池中的每个节点上,并且需要通过使用cmd调用应用程序来创建CloudTasks

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