有人知道通过Azure HDFS Rest API上传文件的最大大小吗? (https://docs.microsoft.com/en-us/azure/data-lake-store/data-lake-store-data-operations-rest-api)。
我发现某个地方有256MB,有些地方有32MB,所以很奇怪。
还是其他SDK的类似限制?
答案 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