我正在尝试使用sqoop将数据从MySQL导入HBase。 MySQL表中有大约900万条记录,大小接近1.2GB。 hadoop簇的复制因子是3 以下是我面临的问题:
导入hbase后的数据大小超过20 GB!理想情况下 应该接近,比如5GB(1.2G * 3 +一些开销)
HBase表的VERSIONS定义为1.如果我导入相同的内容 来自MySQL的表,文件大小在/ hbase / 增加(几乎翻倍)。虽然HBase表中的行数 保持不变。这似乎很奇怪,因为我插入相同的行 HBase,因此文件大小应该保持不变,类似于行 计数值。
据我所知,如果我导入相同的行集,第二种情况下的文件大小不应该增加,因为为每个条目维护的max版本应该只有一个。
任何帮助都将受到高度赞赏。
答案 0 :(得分:3)
根据这个blog
,这取决于所以计算记录大小:KeyValue格式所需的固定部分 =密钥长度+值长度+行长+ CF长度+时间戳+密钥值=(4 + 4 + 2 + 1 + 8 + 1)= 20字节
KeyValue格式所需的变量部分=行+列族+列 限定符+值
所需的总字节数=固定部分+可变部分
因此,对于上面的示例,让我们计算记录大小:第一列 = 20 +(4 + 4 + 10 + 3)= 41字节第二列= 20 +(4 + 4 + 9 + 3)= 40字节第三列= 20 +(4 + 4 + 8 + 6)= 42字节< / p>
上例中row1的总大小= 123字节
要存储10亿条此类记录,所需空间= 123 * 10亿= ~123 GB
我认为你的计算非常不正确,也许与我们分享您的架构设计,我们可以计算出数学。
答案 1 :(得分:1)