Azure Batch 和在 Azure 存储中创建容器文件夹
Azure Batch and Creating Containers Folder in Azure Storage
我有一个 c# 控制台应用程序,它 运行 在 Azure Batch 池中的一个节点上。控制台应用程序写入节点上的 stdout.txt 并在链接到池的批处理帐户的 Azure 存储帐户中创建此文件的副本,这一切都正常。
为了实现这一点,我关注了网页:
https://docs.microsoft.com/en-us/azure/batch/batch-task-output-file-conventions.
如果我创建并 运行 一个名为 'jobid001' 的池作业和一个名为 'Task001' 的链接任务(该任务 运行 是控制台应用程序),那么一个名为'job-jobid001' 已创建,看起来像一个名为 'Task001' 的子文件夹 - 这都是在链接到池批处理帐户的存储帐户下正确创建的,如下所示...
下面的 c# 代码在 Az 存储帐户中创建作业容器,并设置要将批处理节点上的 stdout.txt 内容写入(异步)到匹配文件上的文件Az 存储帐户 - 这一切正常。
// Parse the connection string and return a reference to the storage account.
CloudStorageAccount storageAccount = CloudStorageAccount.Parse(account_url);
// Create a folder in Azure for the standard ouput log files to be copied to
string containerName = "job-" + _jobId;
containerName = containerName.ToLower();
CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient();
CloudBlobContainer container = blobClient.GetContainerReference(containerName);
container.CreateIfNotExists();
TaskOutputStorage taskOutputStorage = new TaskOutputStorage(storageAccount, _jobId, _taskId);
TimeSpan stdoutFlushDelay = TimeSpan.FromSeconds(3);
// The primary task logic is wrapped in a using statement that sends updates to
// the stdout.txt blob in Storage every 15 seconds while the task code runs.
using (ITrackedSaveOperation stdout =
await taskOutputStorage.SaveTrackedAsync(
TaskOutputKind.TaskLog,
logFilePath,
"stdout.txt",
TimeSpan.FromSeconds(15)))
{
// MAIN C# CONSOLE CODE THAT DOES WORK HAS BEEN REMOVED
// We are tracking the disk file to save our standard output, but the
// node agent may take up to 3 seconds to flush the stdout stream to
// disk. So give the file a moment to catch up.
await Task.Delay(stdoutFlushDelay);
}
我想实现的是在根容器'MyAppLogFiles'下的Az存储账户中模拟一个文件夹结构。根容器将有一个模拟的子文件夹结构:年、月、日,然后是 jobid - 我如何通过增强上面的 c# 代码来实现这一点? (年、月、日等是作业的 运行 日期时间)
Az 容器
-> MyAppLogFiles
->2020
->05
->31
->job-jobid001
->Task001
stdout.txt
我刚刚浏览了Microsoft.Azure.Batch.Conventions.Files的源代码(但没有尝试),您可以尝试以下步骤:
1.In 您的代码,将容器名称设置为 MyAppLogFiles.
2.In这行代码:TaskOutputStorage taskOutputStorage = new TaskOutputStorage(storageAccount, _jobId, _taskId);
,你可以为_taskId传递这个变量“2020/05/31/job-jobid001/Task001”。引用的源代码是here.
我有一个 c# 控制台应用程序,它 运行 在 Azure Batch 池中的一个节点上。控制台应用程序写入节点上的 stdout.txt 并在链接到池的批处理帐户的 Azure 存储帐户中创建此文件的副本,这一切都正常。
为了实现这一点,我关注了网页: https://docs.microsoft.com/en-us/azure/batch/batch-task-output-file-conventions.
如果我创建并 运行 一个名为 'jobid001' 的池作业和一个名为 'Task001' 的链接任务(该任务 运行 是控制台应用程序),那么一个名为'job-jobid001' 已创建,看起来像一个名为 'Task001' 的子文件夹 - 这都是在链接到池批处理帐户的存储帐户下正确创建的,如下所示...
下面的 c# 代码在 Az 存储帐户中创建作业容器,并设置要将批处理节点上的 stdout.txt 内容写入(异步)到匹配文件上的文件Az 存储帐户 - 这一切正常。
// Parse the connection string and return a reference to the storage account.
CloudStorageAccount storageAccount = CloudStorageAccount.Parse(account_url);
// Create a folder in Azure for the standard ouput log files to be copied to
string containerName = "job-" + _jobId;
containerName = containerName.ToLower();
CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient();
CloudBlobContainer container = blobClient.GetContainerReference(containerName);
container.CreateIfNotExists();
TaskOutputStorage taskOutputStorage = new TaskOutputStorage(storageAccount, _jobId, _taskId);
TimeSpan stdoutFlushDelay = TimeSpan.FromSeconds(3);
// The primary task logic is wrapped in a using statement that sends updates to
// the stdout.txt blob in Storage every 15 seconds while the task code runs.
using (ITrackedSaveOperation stdout =
await taskOutputStorage.SaveTrackedAsync(
TaskOutputKind.TaskLog,
logFilePath,
"stdout.txt",
TimeSpan.FromSeconds(15)))
{
// MAIN C# CONSOLE CODE THAT DOES WORK HAS BEEN REMOVED
// We are tracking the disk file to save our standard output, but the
// node agent may take up to 3 seconds to flush the stdout stream to
// disk. So give the file a moment to catch up.
await Task.Delay(stdoutFlushDelay);
}
我想实现的是在根容器'MyAppLogFiles'下的Az存储账户中模拟一个文件夹结构。根容器将有一个模拟的子文件夹结构:年、月、日,然后是 jobid - 我如何通过增强上面的 c# 代码来实现这一点? (年、月、日等是作业的 运行 日期时间)
Az 容器
-> MyAppLogFiles
->2020
->05
->31
->job-jobid001
->Task001
stdout.txt
我刚刚浏览了Microsoft.Azure.Batch.Conventions.Files的源代码(但没有尝试),您可以尝试以下步骤:
1.In 您的代码,将容器名称设置为 MyAppLogFiles.
2.In这行代码:TaskOutputStorage taskOutputStorage = new TaskOutputStorage(storageAccount, _jobId, _taskId);
,你可以为_taskId传递这个变量“2020/05/31/job-jobid001/Task001”。引用的源代码是here.