MapReduce-HBase 新老集群迁移引发的对scan timeout思考

本文主要讨论了在新老HBase集群迁移过程中遇到的Java NoSuchMethodError、OutOfOrderScannerNextException和超时问题。问题源于库版本不匹配、scan caching设置不当以及客户端与RegionServer租约不匹配。解决方案包括更新库版本、调整scan caching值和理解RPC超时配置。此外,还提到了MapReduce任务超时的可能原因和优化策略。
摘要由CSDN通过智能技术生成

最近在进行新老测试环境集群的迁移,flume、HDFS、HBase、Hive都要迁,当更改了环境变量,启动语句,keytab等等配置后,笔者开始跑MR作业,但随即发现不同报了各种各样的错,总结如下:

 

 

1、java.lang.NoSuchMethodError

这个错误定位在scan.setCaching方法。原因是由于引用的pom文件里使用的是老版本的hbase-client库,因此将pom中的引用改为新集群对应client最新版本后重新编译,即可解决该问题。

 

2、OutOfOrderScannerNextException

问题复现代码位于:初始化hbase scan实例后,代码设置了scanCaching值为20000,而该值如果设置的偏大,可能导致了此时测试环境客户端获取数据超时。

client抛出的异常为:org.apache.hadoop.hbase.mapreduce.TableRecordReaderImpl: recovered from org.apache.hadoop.hbase.DoNotRetryIOException: Failed after retry of OutOfOrderScannerNextException: was there a rpc timeout?
at org.apache.hadoop.hbase.client.ClientScanner.next(ClientScanner.java:423)

RegionServer抛出的异常为:Caused by: org.apache.hadoop.hbase.exceptions.OutOfOrderScannerNextException: org.apache.hadoop.hbase.exceptions.OutOfOrderScannerNextException: Expected nextCallSeq: 1 But the nextCallSeq got from client: 0; request=scanner_id: 1558 number_of_rows: 100 close_scanner: false next_call_seq: 0
at org.apache.hadoop.hbase.regionserver.HRegionServer.scan(HRegionServer.java:3241)

原因是client的scan会多次向RS获取数据,为了保证数据没有漏掉与维持scan的顺序,client与RS都会做以下工作:
scan每次默认在client记录一个nextCallSeq,在接收到一批数据+1后供给scanRequest使用。
而RS端也会记录一个nextCallSeq,每当接收到scanRequest后将其加一。
但如果客户端获取数据超时,client的nextCallSeq没有+1。导致RegionServer与Client二者的nextCallSeq不匹配,则会复现该错误。

但考虑到

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值