通过ES对百亿级hbase数据构建索引,在读取Hbase至写入hbase过程中,发现有写入缓慢及数据丢失的现象,经过本人排查、调优后的一些经验总结如下,方便遇到相关问题的同学参考: hbase写ES丢数据总结 1、ES连接池打满 新的ES写入线程获取连接时会失败,旧的连接在提交Bulk时可能出错 DO: 1、增加重试及休眠时间随重试次数延长 2、减少并发打开ES连接的线程数,原来64个线程同时读写hbase至ES,减少至32个 2、hbase获取连接失败、hbase scan过程中发生错误 DO: 1、遇到错误及异常重试,休眠时间随重试次数延长 2、增加错误处理队列,一般Hbase读错误发生在hbase region进行分裂合并期间,短时间内重试能成功的几率不大 增加错误处理队列后,统一在每次发生错误的时间延迟一至2小时、等待该region分裂合并完成。再进行重试 3、hbase参数调优: cacheSize由原来设定的40000减值20000,batchSzie要求增加至500或以上 MaxResultSize由默认的2Mb增加至20Mb,使得scan RPC次数减少及一个RESULT被拆分成多个Result实例的概率降低 (被拆分成多个的原因是前一个RPC读取Result时,cacheSize超过阈值或者RPC的数据大小超过MaxResultSize,那么 这个Result的剩余的列会放到下一个rpc操作读取。从client端视角来看,就是读到了rowkey相同的两个Result实例, 这两个Result实例rowkey相同但是cell即列是不一样的 且在scan顺序中位置是相邻的) 4、写ES的client代码改造,经过第三步Hbase调优后,仍然会有部分的Result会被拆分成多个Result实例,发生的概率在千分之几,每个实例只保存有该Result 的部分列。由于写ES时采用的写入覆盖操作,导致这部分数据写入ES后只会留有部分字段即最后一次写入的Result实例。 由于被拆分后位置是相邻的,scan到当前RESULT实例时,与上一个RESULT实例比较rowkey,相同则把RESULT实例内容合并后再写入ES。
hbase 数据备份恢复 hbase数据丢失
转载本文章为转载内容,我们尊重原作者对文章享有的著作权。如有内容错误或侵权问题,欢迎原作者联系我们进行内容更正或删除文章。

提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
分布式数据库 HBase实践
07 手机云服务数据存储
数据存储 云服务 -
HBase数据的备份与恢复
1、备份停止HBase服务后,使用distcp命令运行MapReduce任务进行备份,将数据备份到另一个地方,可
HBase数据的备份与恢复 linux hdfs 数据