Azure Data Lake HDFS上载文件大小限制

时间:2019-01-10 17:36:30

标签: rest azure-data-lake

有人知道通过Azure HDFS Rest API上传文件的最大大小吗? (https://docs.microsoft.com/en-us/azure/data-lake-store/data-lake-store-data-operations-rest-api)。

我发现某个地方有256MB,有些地方有32MB,所以很奇怪。

还是其他SDK的类似限制?

2 个答案:

答案 0 :(得分:1)

在测试中,我发现最大文件大小限制在28MB到30MB之间。

使用Azure Data Lake Storage REST API,创建28MB的文件没有问题。但是,当我尝试创建30MB的文件时,收到404未找到错误。

以下参考符合我观察到的文件大小限制和404错误。这些引用是关于SDK的,但也可能是SDK在后台也调用了REST API。我的测试是直接调用REST API。

答案 1 :(得分:0)

几个月前,我一直在努力解决同一问题,结果是位于ADLS前面的IIS将maxAllowedContentLength设置为默认值30000000字节(或28.6Mb)。从本质上讲,这意味着每当我们要推送大于30Mb的任何内容时,该请求就永远不会到达ADL,因为IIS在此之前会抛出404.13。 Reference

正如链接中已经建议的那样,ADLS有一个带有4-MB buffer的驱动程序,我自己在使用.NET SDK,下面的代码对我很有帮助

public async Task AddFile(byte[] content, string path)
{
        const int fourMb = 4 * 1024 * 1024;
        var buffer = new byte[fourMb];
        using (var stream = new MemoryStream(content))
        {
            if (!_adlsFileSystemClient.FileSystem.PathExists(_account, path))
            {
                _adlsFileSystemClient.FileSystem.Create(_account, path);
            }

            int bytesToRead;
            while ((bytesToRead = stream.Read(buffer, 0, buffer.Length)) > 0)
            {
                if (bytesToRead < fourMb)
                {
                    Array.Resize(ref buffer, bytesToRead);
                }
                using (var s = new MemoryStream(buffer))
                {
                    await _adlsFileSystemClient.FileSystem.AppendAsync(_account, path, s);
                }
                //skipped for brevity