【问题标题】:Delete unflushed file from Azure Data Lake Gen 2从 Azure Data Lake Gen 2 中删除未刷新的文件
【发布时间】:2020-02-13 15:30:36
【问题描述】:

要先将文件上传到 ADL,您需要:

  • 使用 ?resource=file 参数执行 put 请求(这会在 ADL 上创建一个文件)
  • 使用?action=append&position=<N> 参数将数据附加到文件中
  • 最后,您需要使用?action=flush&position=<FILE_SIZE> 刷新数据

我的问题是:

如果不刷新(写入)数据,有没有办法告诉服务器数据应该存在多长时间。

由于您需要先创建一个文件才能将数据写入其中,因此可能会出现无法刷新的情况,并且您在数据湖中遇到了一个空文件。

我在Microsoft documentation 上找不到任何关于此的内容。

任何信息将不胜感激。

【问题讨论】:

    标签: azure azure-data-lake azure-data-lake-gen2


    【解决方案1】:

    更新 0219:

    如果您只调用append api,而不调用flush api,则未提交的数据将在7天内保存在azure中。

    未提交的数据将在7天后自动删除,无法从您端删除。


    原文:

    Azure Datalake Storage Gen2 的 SDK 已经准备就绪,您可以使用它来操作 ADLS Gen2 比使用 rest api 更容易。

    如果您使用的是 .NET/c#,则有一个适用于 Azure Datalake Storage Gen2 的 SDK:Azure.Storage.Files.DataLake

    这里是如何使用这个SDK操作ADLS Gen2的官方文档,下面的c#代码用于ADLS Gen2的删除文件/上传文件:

            static void Main(string[] args)
            {
                string accountName = "xxx";
                string accountKey = "xxx";
    
                StorageSharedKeyCredential sharedKeyCredential =
            new StorageSharedKeyCredential(accountName, accountKey);
    
                string dfsUri = "https://" + accountName + ".dfs.core.windows.net";
    
                DataLakeServiceClient dataLakeServiceClient = new DataLakeServiceClient
                    (new Uri(dfsUri), sharedKeyCredential);
    
                DataLakeFileSystemClient fileSystemClient = dataLakeServiceClient.GetFileSystemClient("w22");
                DataLakeDirectoryClient directoryClient = fileSystemClient.GetDirectoryClient("t2");
    
                // use this line of code to delete a file
                //directoryClient.DeleteFile("22.txt");
    
    
                //use the code below to upload a file
                //DataLakeFileClient fileClient = directoryClient.CreateFile("22.txt");
                //FileStream fileStream = File.OpenRead("d:\\foo2.txt");
    
                //long fileSize = fileStream.Length;
                //fileClient.Append(fileStream, offset: 0);
                //fileClient.Flush(position: fileSize);
    
                Console.WriteLine("**completed**");
                Console.ReadLine();
            }
    

    对于 Java,请参阅此doc

    对于 Python,请参阅此doc

    【讨论】:

    • 我的问题不是如何上传文件,我已经可以做到了。我需要更多关于未刷新文件会发生什么以及如何删除它们的信息。
    • @3Jumph,好的。我想确认您想知道未提交的数据(通过附加操作)将在 azure 中存在多长时间?以及如何删除未提交的数据(不是空文件)?
    • 年轻,是的,我对数据的变化很感兴趣。我还想知道如果文件未刷新,是否有办法删除文件(REST API 删除操作除外)。我希望这能解决问题
    • @3Jumph,我已经更新了我的答案。如果您还有更多问题,请告诉我:)
    • 能否请您指出信息的来源?之后我就不需要其他任何东西了。
    猜你喜欢
    • 2019-09-23
    • 2020-11-22
    • 2023-03-04
    • 1970-01-01
    • 2022-11-10
    • 2020-09-22
    • 2021-05-20
    • 1970-01-01
    • 2021-03-26
    相关资源
    最近更新 更多