Accumulo BatchWriter close() 永远卡住了

Accumulo BatchWriter close() stuck forever

比如我用BatchWriter写入accumulo时,我使用的代码如下:

BatchWriter writer =
    conn.createBatchWriter("table", memBuf, timeout, numThreads)

writer.add(mutation);
writer.close();

我发现当我有 "writer.add(mutation)" 时 java 代码卡在了 "writer.close()"。但是当我删除 "writer.add(mutation);" 时,它经历了 "writer.close()"。有谁知道如何解决 BatchWriter close() 问题?

检查 Accumulo 监视器是否有错误。如果你只添加一个突变,它会在你关闭 BatchWriter 时被发送到服务器(出于性能原因,突变被一起批处理)。您的客户端可能正在等待至少一个 TabletServer 的响应。

您还可以从您的客户端和您的 tabletserver(s) 收集堆栈转储,显示代码当前卡住的位置(例如使用 jstack)。

(注意:没有足够的代表添加评论)

额外的调试提示:使用 accumulo shell 可以打开调试模式(在 accumulo shell 中输入 debug);然后您可以尝试手动插入密钥,甚至只是简单扫描您要插入的行。调试信息将打印出 accumulo 正在与之通信以执行您的命令的服务器序列。这可以快速将您指向出现问题的主机。