首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >hbase数据大小增加

问hbase数据大小增加
EN

Stack Overflow用户
提问于 2013-09-06 11:14:47
回答 2查看 1.9K关注 0票数 0

我试图使用sqoop将数据从MySQL导入到HBase。MySQL表中大约有900万条记录,大小接近1.2GB。hadoop集群的复制因子为3。

以下是我所面临的问题:

  1. 导入hbase后的数据大小超过20 GB!理想情况下,它应该接近,比如说5GB (1.2G*3 +一些开销)
  2. HBase表的版本被定义为1,如果我再次从MySQL导入相同的表,那么/hbase/ size中的文件大小(几乎翻倍)。尽管HBase表中的行计数保持不变。这看起来很奇怪,因为我在HBase中插入了相同的行,因此文件大小应该保持不变,类似于行计数值。

就我的理解而言,第二种情况下的文件大小不应该增加,如果我要导入与为每个条目维护的最大版本相同的行集,则只应该增加一个。

任何帮助都将不胜感激。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-09-06 20:34:32

在HBase中,“一些开销”可能会变得相当大,因为每个值还存储键、家族、限定符、时间戳、版本和值本身--您应该努力使键、家族和限定符尽可能短。

此外,您可能希望使用压缩- 斯巴比是一个很好的选择(您可以看到这个职位之间的压缩比较)

关于你的第二个问题。当您再次复制表时,您将得到每个值的另一个副本。其他版本将在压缩后清除。这是因为HBase将其数据存储在Hadoop中,因此一旦写入,文件就成为只读文件。压缩创建只包含所需数据的新文件,并删除不需要的数据/文件。

票数 1
EN

Stack Overflow用户

发布于 2013-09-06 11:23:24

这取决于,根据这个博客

因此,要计算记录大小: KeyValue格式所需的固定部分=键长+值长度+行长+ CF长度+时间戳+键值=(4+4+2+1+8+ 1) = 20字节 KeyValue格式所需的可变部分=行+列族+列限定符+值 所需总字节=固定部分+可变部分 因此,对于上面的例子,让我们计算记录大小:第一列= 20 + (4 +4+ 10 + 3) = 41 Bytes第二列= 20 + (4 +4+9+ 3) = 40 Bytes第三列= 20 + (4 +4+8+ 6) = 42 Bytes 上面示例中row1的总大小= 123 Bytes 要存储10亿这样的记录,所需的空间= 123 *10亿=~ 123 GB

我假设你的计算是非常不正确的,也许与我们分享你的模式设计,我们可以计算出数学。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18656483

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档