2012-12-13 59 views
3

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

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

+0

如何比较尺寸? – Tariq

+0

我生成7000,000行数据并将数据写入Windows XP文件系统的file.txt,文件大小为503MB。当我直接将7000,000行数据放入hbase时,大小为1.96GB。我设置hdfs复制1,hbase表复制与hdfs复制无关吗?你知道如何设置hbase复制吗? – sabrina

回答

3

由于您必须存储列限定符等的名称,但不能存储4倍开销,所以存储数据时会有一些开销。我有一些想法,但绝对不会介意关于数据性质和桌面统计数据的更多细节。

  • 您的表格中是否打开了压缩?如果数据是在HDFS中压缩的,但在加载之后,它不会被压缩,这可能会导致问题。
  • 也许HBase出于任何原因不尊重你的复制因素。去做一个hadoop fs -dus /path/to/hbase/table/data,看看会有什么回报。
  • 您的列限定符相当大吗?例如,colfam1:abc非常小,不会占用太多空间,但colfam1:abcdefghijklmnopqrstuvwxyz将在事物的宏伟计划中占据相当大的空间!
+0

感谢您的回答。 – sabrina

+0

当我转到“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将数据放入表中。 但压缩不起作用,数据大小与以前相同。 – sabrina

+0

2020308035 /(1024 * 1024)= 1926MB,1926/3 = 642MB,考虑到hbase表的一些开销,如果在hbase表中存储503 MB数据,可能642 MB是正确的。我设置hdfs复制1,hbase表复制是否有与hdfs复制无关? – sabrina

相关问题