1

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

任务是从不属于批处理池的虚拟机创建和管理的

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

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

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

我无法控制任务中的 exe,因此不能直接从任务中上传它

4

1 回答 1

0

更新答案 2017-10-27:

您现在可以使用 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>
于 2016-08-11T14:53:41.513 回答