0

我正在尝试编写一个自定义 .NET 活动,它将从 Azure 数据工厂运行。它将执行两项任务,一个接一个:

  1. 它将每天从 FTP 服务器下载 grib2 文件(grib2 是气象数据的自定义压缩)
  2. 它将在下载每个文件时解压缩。

到目前为止,我已经设置了一个带有两个节点的池的 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 存储?

还有,如何控制同时下载多少个文件,同时解压多少个?

4

0 回答 0