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

Posted 大愚若智_

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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。

以上是关于hbase写ES丢数据参数调优总结的主要内容,如果未能解决你的问题,请参考以下文章

Hbase调优

Hbase调优

HBase原理 | HBase Compaction介绍与参数调优

HBase最佳实践-CMS GC调优(从gc本身参数调优)

实时即未来,大数据项目车联网之原始数据实时ETL任务HBase调优

实时即未来,大数据项目车联网之原始数据实时ETL任务HBase调优