hbase批量加载中的奇怪行为

时间:2017-05-08 18:37:03

标签: hadoop mapreduce hbase

我正在尝试将20k文件批量加载到hbase表中。平均文件大小为400kb。但是有些文件大到70mb。放在一起的所有文件的总大小为11gb。 该方法是标准的,在调用loadIncremenalFiles之后发出键值对。 当我为10个文件的随机样本运行代码时,一切正常。我注意到生成的hfiles的大小是文件本身大小的1.3倍。 但是,当我为所有20k文件运行相同的代码时,我得到的hfiles,放在一起,大小为400gb。数据本身的36倍。 除了表格数据之外,HFile还包含索引和元数据,但即便如此,可以解释这种大幅增加的原因吗?

1 个答案:

答案 0 :(得分:1)

我发现了空间急剧增加背后的原因。

这是我的映射器发出键值对的样子(输入是序列文件)。

public void map(Text key, BytesWritable value, Context context)
....
byte[] row = Bytes.toBytes(rowID);
hKey.set(row);
kv=getKV(familyRaw, Bytes.toBytes("content"), value.getBytes());

问题在于电话value.getBytes()。它返回一个用零填充的字节数组。将其更改为value.copyBytes()可修复此行为。

这在HADOOP-6298

中讨论