Как использовать Azure Data Lake Gen2 для Azure Пакетного обслуживания? - PullRequest
0 голосов
/ 02 апреля 2020

Для обработки огромного количества данных мы хотели использовать 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 не имела прав доступа к файлу. ResourceContainerAccessDenied

Когда я пытаюсь использовать контейнеры хранения, пакетная служба работает должным образом. В случае StorageContainers аутентификация выполняется с использованием токена SAS. Но в этом случае я не могу понять, как использовать токен SAS или как аутентифицировать хранилище для BatchService для доступа к файлу ресурса в узле.

Любая другая альтернатива для файловой системы озера данных Gen2 может Также будь полезным.

...