Azure批处理NodeFiles到Blob Stotage

时间:2015-10-12 20:22:10

标签: azure azure-blob-storage azure-batch

我在Microsoft Azure Batch Services上运行任务,其中每个任务在节点上创建一组文件。我必须将这些文件复制到Blob存储。

从vm创建和管理任务,该vm不属于批处理池

我能够访问节点文件,我可以将内容写入blob存储,但这意味着我将文件作为字符串存储在我的驱动vm上并将其上传到blobstorage。

        var container = BlobClient.GetContainerReference(containerName);
        container.CreateIfNotExists();
        var content = nodeFile.ReadAsString();
        var blob = container.GetBlockBlobReference(nodeFile.Name);
        blob.UploadText(content);

为了防止额外的流量,有人知道我可以直接将文件上传到BlobStorage吗?

我无法控制任务中的exe,因此直接从任务中上传不是一个选项

1 个答案:

答案 0 :(得分:0)

更新后的答案2017-10-27:

现在,您可以使用task output files直接上传任务,其中API版本大于或等于2017-05-01虚拟机配置池。

原始回答:

如果能够在bat / cmd文件或shell脚本中包装可执行文件,则可以直接从计算节点上载到存储。如果您的VM是Windows,则可以使用AzCopy;如果您的VM是Linux(或Windows),则可以在程序退出后使用blobxfer来传输文件。您需要将程序作为计算节点启动任务的一部分进行安装,作为作业准备任务的一部分进行安装,或将其作为资源文件的一部分(如果是AzCopy)包含在内,以便它可用于您的任务。

例如在Windows节点上:

   @echo off
   myprogram.exe arg1 arg2
   set /a rc=%ERRORLEVEL%
   REM assuming return code of 0 is success
   IF %rc% EQU 0 (
       AzCopy.exe <azcopy args>
   )
   exit /b %rc%

例如在Linux节点上:

    #!/usr/bin/env bash
    set -e
    # your program below
    myprogram arg1 arg2
    # invoke blobxfer to transfer output data to storage, see docs for more info
    blobxfer <blobxfer args>