layzhishang 2020-08-28 09:56 采纳率: 0%
浏览 73

hadoop-hbase作为实时接口返传数据时如何保证数据高可用性?

各位老师,单位现在要引入hbase数据库作为数据存储,并将数据通过接口方式返回给查询方。目前的场景是这样的,数据每日全量加载,以每日最新的数据为有效数据,数据量在500万左右。

前期做了一定尝试和探索,做出了以下调整:

  1. rowkey是用户id,查询方通过用户id直接查询。由于一开始没有加入分区,发现频繁写入数据后,hbase的数据会出现短暂的不可读,报region is not online的错误。从网上查询后,说是hbase数据量到一定程度,会自动分裂,针对此问题,我们强制在建表时设定了 no split 策略,并按照首位 进行 {10,20,30,。。。}的预分区。
  2. 数据是每日全量加载,通过定时任务将所有数据put到hbase。但是每日的数据和历史的数据rowkey不完全一致,比如新增用户或者失效用户。新增用户其实问题不大,直接put到库里就可以。但是失效用户其实应该是被删除的。考虑到尽量保证数据24h小时可用,目前的想法是根据时间戳和加载时间做一下判断,单独启一个删除的定时任务,在每日加载做完后,执行这个删除任务,将过期数据删除掉。

针对上述场景,目前我们遇到了一下问题:

  1. 分裂策略方面,no split策略目前在查询层面表现还是比较稳定的,不会出现region is not online的问题,但是这种方法可持续强吗?有更好的方法吗?

  2. 删除方面,我们在测试的时候试过频繁写入并按照时间戳标签删除,这期间出现过一段短时间的数据不可读,一直报节点不可用,大概过了5分钟恢复了一部分数据的可读性,又过了几分钟大部分数据可读了。网上搜了下,多是说这期间hbase在做compact操作,导致数据的短时间不可用。这个compact策略我们怎么才能很好的避免其对数据可读性的影响?

  3. 另外就是删除操作的具体实现,我们目前每次做删除操作时,会全表scan所有数据找到rowkey,再根据rowkey和时间戳去表中删除,这种思路感觉有些绕路,每次scan的速度也不是很快。应对这种删除场景各位老师有什么好的实现思路吗?

新人第一次提问,不周之处还望多多包涵,在此先谢过大家了。

  • 写回答

1条回答 默认 最新

  • zqbnqsdsmd 2020-08-28 11:05
    关注
    评论

报告相同问题?

悬赏问题

  • ¥15 drone 推送镜像时候 purge: true 推送完毕后没有删除对应的镜像,手动拷贝到服务器执行结果正确在样才能让指令自动执行成功删除对应镜像,如何解决?
  • ¥15 求daily translation(DT)偏差订正方法的代码
  • ¥15 js调用html页面需要隐藏某个按钮
  • ¥15 ads仿真结果在圆图上是怎么读数的
  • ¥20 Cotex M3的调试和程序执行方式是什么样的?
  • ¥20 java项目连接sqlserver时报ssl相关错误
  • ¥15 一道python难题3
  • ¥15 牛顿斯科特系数表表示
  • ¥15 arduino 步进电机
  • ¥20 程序进入HardFault_Handler