regionserver日志如下
追查源码发现在WAL split时(WAL split是指RS异常挂掉后,其他RS会对该RS的WAL做relplay),WAL split时先将该WAL加载到内存,解析为entry,判断每个entry里的cell数据是否属于meta表
若属于meta表,则跳过该entry 若不是,则将该entry加入entryBuffers,等待后续重新加载到新region上
遍历cell的逻辑如下图所示
判断cell的逻辑中会cell和public static final byte [] METAFAMILY = Bytes.toBytes("METAFAMILY"),做比较。解析cell时需要将bytes数组转换为short类型
java中每个short为16位,每个byte为8位,所以bytes数组长度不能小于2
异常显示待转换的short数组长度为1,不符合转换条件,抛出异常。导致RS不断重启
解决办法:
移除split不不成功的WAL,问题解决,RS恢复正常
这个操作会暂时丢部分(量级非常小)数据,解决办法是:
待rs恢复正常后,将移除的WAL移回原目录,master进行切换,新master会重新加载WAL目录,并解析WAL(该操作待验证)。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。