hbase写ES丢数据参数调优总结

通过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。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值