我正在使用Microsoft.Azure.DataLake.Store驱动程序将某些数据记录到Gen1 Azure Datalake存储中。
我正在像这样认证和创建客户端:
var adlCreds = await ApplicationTokenProvider.LoginSilentAsync(tenant, clientId, secret);
var adlClient = AdlsClient.CreateClient(dlUrl, adlCreds);
然后像这样使用ConcurrentAppendAsync
写入文件(文件名只是一个例子):
var textBytes = Encoding.UTF8.GetBytes(appendText);
await client.ConcurrentAppendAsync("test/myFile.json", true, textBytes, 0, textBytes.Length);
大多数情况下,这是可行的,但是我看到间歇性错误记录了该错误:
CONCURRENTAPPEND失败,出现未知错误:底层 连接已关闭:预期会保持活动状态的连接 已被服务器关闭。
发生这种情况时,并发追加操作将失败,并且不会保存数据。
正在运行的服务在.NET Framework 4.6.1上。我正在缓存和重用as far as I can tell is OK的凭据对象(30分钟)和AdlsClient(5分钟),所以我不确定问题出在哪里。
答案 0 :(得分:0)
问题之一可能是由于在同一文件流上使用了“创建”和“ ConcurrentAppend”。 ADLS文档提到它们不能在同一文件上使用。如果同时使用它们,请尝试将“创建”命令更改为“ ConcurrentAppend”,因为后者可以用于创建文件(如果不存在)。