分享

Hbase数据如何快速导入导出

blackmoon 发表于 2015-6-17 17:06:15 [显示全部楼层] 回帖奖励 阅读模式 关闭右栏 2 85250
本帖最后由 blackmoon 于 2015-6-17 17:06 编辑

各位好,我又来问问题了,场景是这样的,在Hbase中存储数据,然后希望当其中一些数据长时间没有使用时将其冷却,导出到更廉价的存储上,等到有计算需求的时候再加载回来,然后问题是如何快速的从Hbase中导入导出数据?

我测试了几种方法(测试时的数据量很小):
1. hbase export & import
操作简单,数据量上去速度应该会成为问题。

2.importtsv & bulk load
参考了论坛上的这篇文章:http://www.aboutyun.com/thread-9497-1-1.html
使用pig导出成csv,然后importtsv封装成hfile,最后使用bulk load导入,采用这种办法的话导出时多花一些时间做好封装,导入时应该会快一些,导入的时间长短相对来说更为重要

3.disable & hdfs cp & bulk load
既然bulk load是直接mv hfile,那么我就直接把hbase里的文件挪出来,需要的时候再bulk load:
disable table 后直接hdfs mv到了另一个目录,然后enable table & truncate table,需要时bulk load。

上面几种都测试通过,从速度上应该是第三种更快一些,然后就有几个问题:

(1)disable table时,如果该表仍然有数据在Memstore中,会不会自动flush到数据文件?不是的话如何手工flush?
(2)当数据量大的时候会不会有我在小数据量测试时无法再现的问题?
(3)是否还有其他更好的方案?

已有(2)人评论

跳转到指定楼层
starrycheng 发表于 2015-6-17 18:59:05
手工可以进行flush操作,在hbase shell调用flush,可以针对某个表或者某个region进行flush:
hbase(main):010:0> help 'flush'
Flush all regions in passed table or pass a region row to
flush an individual region.  For example:

  hbase> flush 'TABLENAME'
  hbase> flush 'REGIONNAME'

楼主这个方案是你们公司定的,还是谁来定的?
这个方案数据量小还可以,大了这个就太麻烦了。
唯一正统的方案,是提高查询效率。
hbase提高查询效率方法很多,当然也可以选择其它框架:
hbase+solr
hbase二级索引
这些方案都可以试试

回复

使用道具 举报

blackmoon 发表于 2015-6-18 10:44:25
starrycheng 发表于 2015-6-17 18:59
手工可以进行flush操作,在hbase shell调用flush,可以针对某个表或者某个region进行flush:
hbase(main): ...

这个方案主要是解决对存储和计算资源需求不成比例的问题,机器就那么多,但是经常参与计算的数据只是全部数据的一部分,因此需要把不常用的数据放到另外的地方。

现在数据量比较小,还没做性能方面的测试,现在我一个人在做技术调研,最近才自己部署了一套做测试,还处于验证功能需求的阶段。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条