Для обработки огромного количества данных мы хотели использовать Azure Data Lake Gen2 Storage с Azure Batch. Вот что я попробовал:
Я создал пул, задание и загруженный файл в файловую систему озера данных (ссылка взята из Документы Microsoft ). Когда пакет Задача попыталась загрузить файл ресурса из файловой системы озера данных, но не удалось. Вот код:
var poolId = Guid.NewGuid().ToString(); //using poolId for fileSystem, pool, and job
var sharedKeyCredential = new StorageSharedKeyCredential(storageAccountName, storageAccountKey);
string dfsUri = "https://" + storageAccountName + ".dfs.core.windows.net";
DataLakeServiceClient DataLakeServiceClient = new DataLakeServiceClient(new Uri(dfsUri), sharedKeyCredential);
//Create File System
await DataLakeServiceClient.CreateFileSystemAsync(poolId);
//Create Directory
DataLakeFileSystemClient fileSystemClient = DataLakeServiceClient.GetFileSystemClient(poolId);
await fileSystemClient.CreateDirectoryAsync("my-directory");
//Upload File To FileSystem
DataLakeDirectoryClient directoryClient = fileSystemClient.GetDirectoryClient("my-directory");
DataLakeFileClient fileClient = directoryClient.GetFileClient(fileName);
await fileClient.UploadAsync(filePath);
//Pool, Job Created (keeping JobId = poolId), Now adding task to the Job
using (var batchClient = BatchClient.Open(new BatchTokenCredentials(batchAccountUrl, tokenProvider)))
{
var inputFile = ResourceFile.FromUrl(fileClient.Uri.AbsoluteUri, fileName);
var task = new CloudTask(TaskId, CommandLine)
{
UserIdentity = new UserIdentity(new AutoUserSpecification(elevationLevel: ElevationLevel.Admin, scope: AutoUserScope.Task)),
ResourceFiles = new List<ResourceFile> { inputFile }, //Add resource file
OutputFiles = CreateOutputFiles(batchStorageAccount, poolId) //any *.txt file
};
batchClient.JobOperations.AddTask(poolId, task);
}
После добавления задачи я получаю ResourceContainerAccessDenied
Ошибка - это означает, что у файла, который был загружен в хранилище, задача BatchService не имела прав доступа к файлу.
Когда я пытаюсь использовать контейнеры хранения, пакетная служба работает должным образом. В случае StorageContainers аутентификация выполняется с использованием токена SAS. Но в этом случае я не могу понять, как использовать токен SAS или как аутентифицировать хранилище для BatchService для доступа к файлу ресурса в узле.
Любая другая альтернатива для файловой системы озера данных Gen2 может Также будь полезным.