【问题标题】:Can a batch task read files on a file share?批处理任务可以读取文件共享上的文件吗?
【发布时间】:2017-10-09 23:26:37
【问题描述】:

我与(您猜对了)很多文件共享文件。我想创建一个批处理作业,该作业会装载此文件共享和每个文件中的读取,并并行处理每个文件(每个都作为批处理任务)。

这可能与 python 和 azure 批处理有关吗?任何展示如何做到这一点的教程都会很棒。

【问题讨论】:

  • 您能否说明您是否尝试挂载 Azure 文件共享以及哪个操作系统/平台?
  • 操作系统是ubuntu,是的,azure batch创建的VM/节点需要挂载文件共享。
  • Azure 文件共享是指Azure File Storage 正确的。你在装这个吗?
  • 是的,文件共享,而不是 Blob 存储。

标签: python azure-batch


【解决方案1】:

您可以通过以下两种方式之一执行此操作。请注意,以下仅适用于 Linux。 Windows 用户将需要使用 User Identities 遵循稍微不同的方法。

  1. 使用池的StartTask 对象在计算节点级别装载文件共享。请参阅Azure File documentation,了解如何在 Linux 上为您的发行版执行此操作。启动任务可以:
    • 直接挂载文件共享,即调用mount -t cifs ...。这将通过重新启动来工作,因为每次重新启动时都会重新运行 StartTask。
    • 修改/etc/fstab 以添加条目到自动挂载。请注意,您必须使此操作具有幂等性,因为 StartTask 每次重新启动时都会重新运行。
  2. 使用作业的JobPreparationTask 对象在作业级别装载文件共享。您在此处指定的命令只会对作业下的每个任务运行一次。您可能还应该将作业的JobReleaseTask 指定为unmount 共享以进行清理。

确保在您选择的任何路径中,为任务(通常是超级用户)提供适当的提升权限,以便进程可以执行挂载或修改/etc/fstab

如果您使用第一个选项,则无论是否在该节点上运行需要它的作业,安装都将始终可供计算节点使用。每种方法都有优点和缺点。您的要求,无论是合规性,还是技术(例如),都应该可以帮助您做出选择。

【讨论】:

  • 太好了,那么文件共享将安装在哪里?例如,如果我使用linux命令并告诉它挂载到/home/mounts/data,那么FS会挂载到data吗?
  • Batch 计算节点不会更改/拦截挂载命令。它在系统上运行,就好像您以交互方式提供它一样。只要目标目录存在(如果不存在,您需要在挂载之前先mkdir 它),挂载应该可以工作。您应该研究安装到 known compute node location(例如 $AZ_BATCH_NODE_SHARED_DIR/data),这可能有助于您完成任务,而不是硬编码位置。
  • 谢谢,使用$AZ_BATCH_NODE_SHARED_DIR 是个好主意。我会试试看。
  • 请注意:如果您要使用 /etc/fstab 路由,则 $AZ_BATCH_NODE_SHARED_DIR 变量将不可用,因为这些挂载发生在 Azure Batch 任务上下文之外。这些环境变量仅在进程在 Azure Batch 任务上下文中执行 shell 时可用(所有任务,包括 StartTask 和 JobPrep/JobRelease 都将设置这些环境变量)。
  • 谢谢,我要走第一条路线。事实证明,从文件读取/写入文件很棘手,因为我不知道 EV 指向哪里。想我会创建一个用户,登录并将其转储到控制台。
猜你喜欢
  • 1970-01-01
  • 2023-03-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多