hbase批量加载中的奇怪行为

jgwigjjp  于 2021-06-02  发布在  Hadoop
关注(0)|答案(1)|浏览(373)

我正在尝试将20k文件批量加载到一个hbase表中。平均文件大小为400kb。但是,有些文件的大小高达70mb。所有文件的总大小为11gb。这种方法是标准的,在调用loadincremenalfiles之后发出键值对。当我对随机抽取的10个文件运行代码时,一切正常。我注意到生成的hfiles的大小是文件本身大小的1.3倍。然而,当我为所有20k文件运行相同的代码时,我得到的hfiles加起来是400gb大小。是数据本身的36倍。除了表数据之外,hfiles还包含索引和元数据,但即便如此,还有什么能解释如此巨大的大小增长呢?

zzwlnbp8

zzwlnbp81#

我发现了空间急剧增加背后的原因。
这就是我的Map器发出的键值对的样子(输入是一个序列文件)。

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对此进行了讨论

相关问题