扫描仪和计数调用上的 HBase shell“OutOfOrderScannerNextException”错误
Posted
技术标签:
【中文标题】扫描仪和计数调用上的 HBase shell“OutOfOrderScannerNextException”错误【英文标题】:HBase shell "OutOfOrderScannerNextException" error on scanner & count calls 【发布时间】:2014-10-18 08:38:40 【问题描述】:无论我运行扫描命令还是计数,都会弹出此错误并且错误消息对我来说没有意义。 它说什么以及如何解决?
org.apache.hadoop.hbase.exceptions.OutOfOrderScannerNextException: 预期的 nextCallSeq:1 但从客户端获得的 nextCallSeq:0; request=scanner_id: 788 number_of_rows: 100 close_scanner: false next_call_seq: 0
命令:
计数“表”,5000 扫描 'table', COLUMN => ['cf:cq'], FILTER => "ValueFilter(=, 'binaryprefix:somevalue')"
编辑:
我在 hbase-site.xml 中添加了以下设置
<property>
<name>hbase.rpc.timeout</name>
<value>1200000</value>
</property>
<property>
<name>hbase.client.scanner.caching</name>
<value>100</value>
</property>
没有影响
EDIT2:添加睡眠
Result[] results = scanner.next(100);
for (int i = 0; i < results.length; i++)
result = results[i];
try
...
count++;
...
Thread.sleep(10); // ADDED SLEEP
catch (Throwable exception)
System.out.println(exception.getMessage());
System.out.println("sleeping");
Edit2 后出现新错误:
org.apache.hadoop.hbase.client.ScannerTimeoutException: 101761ms passed since the last invocation, timeout is currently set to 60000
...
Caused by: org.apache.hadoop.hbase.UnknownScannerException: org.apache.hadoop.hbase.UnknownScannerException: Name: 31, already closed?
...
Caused by: org.apache.hadoop.hbase.ipc.RemoteWithExtrasException(org.apache.hadoop.hbase.UnknownScannerException): org.apache.hadoop.hbase.UnknownScannerException: Name: 31, already closed?
...
FINALLY BLOCK: 9900
Exception in thread "main" java.lang.RuntimeException: org.apache.hadoop.hbase.client.ScannerTimeoutException: 101766ms passed since the last invocation, timeout is currently set to 60000
...
Caused by: org.apache.hadoop.hbase.client.ScannerTimeoutException: 101766ms passed since the last invocation, timeout is currently set to 60000
...
Caused by: org.apache.hadoop.hbase.UnknownScannerException: org.apache.hadoop.hbase.UnknownScannerException: Name: 31, already closed?
...
Caused by: org.apache.hadoop.hbase.ipc.RemoteWithExtrasException(org.apache.hadoop.hbase.UnknownScannerException): org.apache.hadoop.hbase.UnknownScannerException: Name: 31, already closed?
...
【问题讨论】:
您使用的是哪个 HBase 版本? @Chiron hbase-0.98.6.1-hadoop1 在 Ubuntu 上独立 我正在运行另一个扫描命令,但问题仍然存在,我应该使用缓存吗? 这个问题真的没有答案吗? 【参考方案1】:编辑:通过使用下载的 hbase 附带的相同客户端版本(不是 maven 0.99),我能够解决这个问题。 服务器版本为 0.98.6.1 在 ./lib 文件夹中包含客户端 jars
别忘了附上zookeeper库
旧:
现在我做了两件事,改变了表连接 API (0.99)
Configuration conf = HBaseConfiguration.create();
TableName name = TableName.valueOf("TABLENAME");
Connection conn = ConnectionFactory.createConnection(conf);
Table table = conn.getTable(name);
然后当错误弹出时,我尝试重新创建连接
scanner.close();
conn.close();
conf.clear();
conf = HBaseConfiguration.create();
conn = ConnectionFactory.createConnection(conf);
table = conn.getTable(name);
table = ConnectionFactory.createConnection(conf).getTable(name);
scanner = table.getScanner(scan);
这可行,但在收到第一个错误后可能会变慢。扫描所有行非常慢
【讨论】:
【参考方案2】:这有时会在您进行大量删除时发生,您需要合并空白区域并尝试平衡您的区域
【讨论】:
【参考方案3】:也可能是由磁盘损坏引起的。在我的情况下,它并没有损坏到 Ambari、HDFS 或我们的监控服务注意到它,而是损坏到无法服务于一个区域。
使用该磁盘停止区域服务器后,扫描工作。
我通过在调试模式下运行 hbase shell 找到了 regionserver:
hbase shell -d
然后一些区域服务器出现在输出中,其中一个脱颖而出。
然后我在主机上运行dmesg
来查找故障磁盘。
【讨论】:
以上是关于扫描仪和计数调用上的 HBase shell“OutOfOrderScannerNextException”错误的主要内容,如果未能解决你的问题,请参考以下文章