HBase 表大小比 hadoop hdfs 中的文件大得多

Posted

技术标签:

【中文标题】HBase 表大小比 hadoop hdfs 中的文件大得多【英文标题】:HBase table size is much bigger than the file in hadoop hdfs 【发布时间】:2012-12-13 07:39:25 【问题描述】:

最近我使用hadoop批量加载将数据放入hbase 首先,我调用HDFS API将数据写入hadoop hdfs中的文件,总共7000,000行数据,大小为503MB。 其次,我使用 org.apache.hadoop.hbase.mapreduce.ImportTsvorg.apache.hadoop.hbase.mapreduce.LoadIncrementalHFiles 将数据放入 hbase。

我做的最重要的事情是使用bulkload工具将数据放入hbase,完成bulkload后,我发现hbase表是1.96GB。 hdfs 复制为 1。 我不知道为什么。

【问题讨论】:

你比较大小如何? 我生成7000,000行数据并将数据写入windows XP文件系统的file.txt,文件大小为503MB。当我将 7000,000 行数据直接放入 hbase 时,大小为 1.96GB。我设置hdfs复制1,hbase表复制和hdfs复制没有关系吗?你知道如何设置 hbase 复制吗? 【参考方案1】:

存储数据有一些开销,因为您必须存储列限定符的名称等,但不是 4 倍的开销。我有一些想法,但绝对不介意听到更多关于数据性质的细节,也许还有桌面上的统计数据。

您的表中是否打开了压缩?如果数据是在 HDFS 中压缩的,但在加载后它没有被压缩,这可能会导致问题。 也许 HBase 出于某种原因不尊重您的复制因子。去hadoop fs -dus /path/to/hbase/table/data 看看会返回什么。 您的列限定符是否很大?例如,colfam1:abc 非常小,不会占用太多空间,但colfam1:abcdefghijklmnopqrstuvwxyz 会占用大量空间!

【讨论】:

当我转到“hadoop fs -dus /path/to/hbase/table/data”时,它返回的大小是2108510118。限定符包括:asset:customer_name,asset:asset_id,asset: amount,asset:transaction_date,asset:settlement_date 我的表没有压缩,压缩是导致问题的唯一因素?最后我尝试对我的表进行压缩,操作是:首先我使用“create'pendings',NAME=>'asset',COMPRESSION=>'GZ'”创建表。其次,我使用 bulkload 将数据放入表中。但是压缩不起作用,数据大小和以前一样。 2020308035/(1024*1024)=1926MB, 1926/3=642MB,考虑到hbase表的一些开销,如果hbase表存储503MB数据,可能642MB是对的。我设置hdfs复制1、hbase表复制和hdfs复制没有关系吗? 当我使用bulkload将数据放入hbase时,replication为1,但是当我使用eclipse客户端放数据时,replication为3。但是hbase表的总大小是一样的。

以上是关于HBase 表大小比 hadoop hdfs 中的文件大得多的主要内容,如果未能解决你的问题,请参考以下文章

hbase中用啥来区分多版本的数据

Hadoop 部署之 HBase

HBase

hbase(一) : HTable

hbase小技巧

HBase结合MapReduce批量导入(HDFS中的数据导入到HBase)