我正在尝试编写一个自定义 .NET 活动,它将从 Azure 数据工厂运行。它将执行两项任务,一个接一个:
- 它将每天从 FTP 服务器下载 grib2 文件(grib2 是气象数据的自定义压缩)
- 它将在下载每个文件时解压缩。
到目前为止,我已经设置了一个带有两个节点的池的 Azure Batch - Windows Server 机器,用于运行 FTP 下载。节点正在将 grib2 文件下载到 blob 存储容器。
到目前为止,自定义应用程序的代码如下所示:
using System;
using System.Collections.Generic;
using System.Linq;
using Microsoft.Azure;
using Microsoft.Azure.Management.DataFactories.Models;
using Microsoft.Azure.Management.DataFactories.Runtime;
namespace ClassLibrary1
{
public class Class1 : IDotNetActivity
{
public IDictionary string, string Execute(
IEnumerable linkedServices,
IEnumerable datasets,
Activity activity,
IActivityLogger logger)
{
logger.Write("Start");
//Get extended properties
DotNetActivity dotNetActivityPipeline = (DotNetActivity)activity.TypeProperties;
string sliceStartString = dotNetActivityPipeline.ExtendedProperties["SliceStart"];
//Get linked service details
Dataset inputDataset = datasets.Single(dataset = dataset.Name == activity.Inputs.Single().Name);
Dataset outputDataset = datasets.Single(dataset = dataset.Name == activity.Outputs.Single().Name);
/*
DO FTP download here
*/
logger.Write("End");
return new Dictionary string, string();
}
}
}
到目前为止,我的代码可以正常工作,并且我已将文件下载到我的 blob 存储帐户中。现在我已经下载了文件,我想让批处理池的节点解压缩文件并将解压缩的文件放在我的 blob 存储中以进行进一步处理。为此,使用了 wgrib2.exe,它带有一些 dll 文件。我已经将应用程序包所需的可执行文件和所有 dll 文件压缩并上传到我的池中。如果我是正确的,当每个节点加入池时,这个可执行文件将被提取并可供调用。
我的问题是:如何编写自定义 .NET 活动,以便文件由池的节点下载,并且在下载每个文件后,对每个文件运行解压缩命令以将其转换为 csv 文件?命令行如下所示:
wgrib2.exe downloadedfileName.grb2 -csv downloadedfileName.csv
如何获取每个下载文件的名称句柄,如何在节点上处理它并将其保存回 blob 存储?
还有,如何控制同时下载多少个文件,同时解压多少个?