HBase支持的数据格式有哪些

HBase支持的数据格式有哪些,第1张

最近处理了一个客户端scan超时问题,记录在此,希望能够帮助到遇到同样问题的同学。

问题的错误堆栈如下面所示:

javalangRuntimeException:

orgapachehadoophbaseclientScannerTimeoutException: 76745ms passed

since the last invocation, timeout is currently set to 60000

at

orgapachehadoophbaseclientAbstractClientScanner$1hasNext(AbstractClientScannerjava:97)

~[hbase-client-112jar:112]

at

commogujiefulldumptaskHBaseUtilscanTable(HBaseUtiljava:109)

~[fulldump-indexbuildingcomponent-10-SNAPSHOTjar:na]

at

commogujiefulldumptaskHbaseScanner$Taskrun(HbaseScannerjava:114)

[fulldump-indexbuildingcomponent-10-SNAPSHOTjar:na]

at javalangThreadrun(Threadjava:745) [na:180_60]

业务方报告超时错误后,我们按惯常的思路对服务端进行了排查,包括对更改表配置,对表数据进行major

compact *** 作等等,但是,经过对集群及表结构的一阵调整之后,超时错误仍然存在。解决问题的最好出发点就是分析源码,看看问题出在哪里,于是决定阅

读源码,找到错误的根节点。

从上面的异常可以看出错误出现在orgapachehadoophbaseclientScannerTimeoutException中,进入源码看看这个错误在哪里被打印。

在客户端的ClientScanner类的loadcache方法,我们找到了错误输出的地方,代码片段如下所示:

在上面的代码中,lastNext是前一次调用loadcache时的

系统时间,scannerTimeout是用户设置的超时时间。每次进入loadcache函数的时候,都会将当前的时间与前两者之和做对比,如果当前时

间大于了两者之和,则会报出Timeout错误。好啦,错误的原因已经知道了,解决方法就是增大scannerTimeout。scannerTimeout是由hbaseclientscannertimeoutperiod控制的,默认值是60s,我们将上述配置增大到120s之后,问题解决,不再发生超时错误。

这个问题深入思考一下,为什么会有这么一个错误。loadcache的

作用是将服务端的数据缓存到本地,客户端中维护一个LinkedList<Result>类型的变量cache用于缓存从服务端region

中拉下的数据。客户端的scanner迭代时调用的next实际上是从这个cache中取的数据,直到cache中的数据被消费空,此时,会重新调用

loadcache开始新一轮从服务端拉取数据。

以上就是关于HBase支持的数据格式有哪些全部的内容,包括:HBase支持的数据格式有哪些、调度工具(ETL+任务流)、四、HBase客户端等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/9716308.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-01
下一篇2023-05-01

发表评论

登录后才能评论

评论列表(0条)

    保存