Azure 批量节点文件到 Blob 存储

标签 azure azure-blob-storage azure-batch

我正在 Microsoft Azure 批处理服务上运行任务,其中每个任务都会在节点上创建一组文件。我必须将这些文件复制到 Blob 存储。

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

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

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

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

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

最佳答案

更新答案2017年10月27日:

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

原始答案:

如果您能够将可执行文件封装在 bat/cmd 文件或 shell 脚本中,则可以直接从计算节点上传到存储。您可以使用AzCopy如果您的虚拟机是 Windows 或 blobxfer如果您的虚拟机是Linux(或Windows),则可以在程序退出后传输文件。您需要将程序安装为计算节点启动任务的一部分,安装为作业准备任务的一部分,或者将其包含在资源文件中(如果是 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>

关于Azure 批量节点文件到 Blob 存储,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33089562/

相关文章:

asp.net - Windows Azure。获取唯一的应用程序实例 ID

c# - Service Fabric 中的应用程序洞察?

azure - 我可以配置 Azure Batch 以使用 Nvidia VM 镜像吗?

azure - Azure Batch 中的任务需要哪些 DLL?

python - 从 azure blob 并行读取多个文件

c# - Azure Blob 存储 .NET 客户端请求超时

python-3.x - 如何将机器学习模型 pickle 存储到 azure blob 并检索它/

c# - 从 url 下载文件并保存到 blob

c# - 使用Azure Batch Restful API创建azure批处理池,遇到异常

c# - Azure Web应用程序负载平衡超时问题,获取 HTTP 状态 500 和子状态 121