使用C#Azure Datalake Gen1客户端的间歇性错误“基础连接已关闭”

时间:2019-09-16 10:03:55

标签: c# .net azure azure-data-lake

我正在使用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分钟),所以我不确定问题出在哪里。

1 个答案:

答案 0 :(得分:0)

问题之一可能是由于在同一文件流上使用了“创建”和“ ConcurrentAppend”。 ADLS文档提到它们不能在同一文件上使用。如果同时使用它们,请尝试将“创建”命令更改为“ ConcurrentAppend”,因为后者可以用于创建文件(如果不存在)。