自定义.NET活动,用于从Azure Batch运行可执行文件和复制输出文件到blob

时间:2017-08-12 06:35:18

标签: c# azure azure-batch custom-activity

我正在尝试在Azure中创建一个自定义.NET活动,它创建一个VM池和一个处理池节点上文件提取的作业。到目前为止,我有所有这些的代码,但我不知道如何将处理后的文件从节点下载回blob存储。我正在运行的excutable是带有dll的第三方exe,我无法访问代码。 这是我的代码:

ResourceExhaustedError

此代码为具有启动任务的所有节点创建池和作业。 exe,ddls和要处理的文件将传递给节点。

我的问题是:如何将已处理的文件输出到blob存储? 如果VM上没有足够的磁盘空间来存储它们并复制它们,我如何将它们流式传输到blob?

1 个答案:

答案 0 :(得分:1)

您可以使用这种方式来保存任务输出:
https://docs.microsoft.com/en-us/azure/batch/batch-task-output-files

Azure Batch提供了多种持久化任务输出的方法。使用批处理服务API是一种最适合这些情况的便捷方法:

  • 您希望编写代码以在客户端应用程序中保留任务输出,而无需修改正在运行任务的应用程序。
  • 您希望在使用虚拟机配置创建的池中保留Batch任务和作业管理器任务的输出。
  • 您希望将输出保留为具有任意名称的Azure存储容器。
  • 您希望将输出保留到根据Batch File Conventions standard命名的Azure存储容器中。

示例项目:
https://github.com/Azure/azure-batch-samples/tree/master/CSharp/ArticleProjects/PersistOutputs

示例代码:

<!-- language: lang-cs -->
OutputFiles = new List<OutputFile>
{
    new OutputFile(
        filePattern: @"..\std*.txt",
        destination: new OutputFileDestination(new OutputFileBlobContainerDestination(
            containerUrl: containerUrl,
            path: taskId)),
        uploadOptions: new OutputFileUploadOptions(
            uploadCondition: OutputFileUploadCondition.TaskCompletion)),
    new OutputFile(
        filePattern: @"output.txt",
        destination: new OutputFileDestination(new OutputFileBlobContainerDestination(
            containerUrl: containerUrl,
            path: taskId + @"\output.txt")),
        uploadOptions: new OutputFileUploadOptions(
            uploadCondition: OutputFileUploadCondition.TaskCompletion)),
}