首页 > 解决方案 > Nifi Hbase数据插入比原始数据占用更多空间

问题描述

我正在使用 Nifi 实时进行数据转换,处理后的数据存储在 Hbase 中。我puthbasejson用于将数据存储在 hbase 中。存储row key/id时我使用的是uuid. 但是在 nifi 数据来源或在线工具中单个 JSON 的原始数据大小为 390 字节。但是对于 1500 万条数据,它的大小是 55 GB,因此单条记录的数据大小是 3.9 KB。

所以,我不知道数据是如何存储的,为什么存储在 hbase 中的数据大小大于原始数据大小以及如何在 Hbase 和 Nifi 中减少或优化(如果需要任何更改)。

JSON:

{"_id":"61577d7aba779647060cb4e9","index":0,"guid":"c70bff48-008d-4f5b-b83a-f2064730f69c","isActive":true,"balance":"$3,410.16","picture":"","age":40,"eyeColor":"green","name":"Delia Mason","gender":"female","company":"INTERODEO","email":"deliamason@interodeo.com","phone":"+1 (892) 525-3498","address":"682 Macon Street, Clinton, Idaho, 3964","about":"","registered":"2019-09-03T06:00:32 -06:-30"}

在 nifi 中重现的步骤:

generate flowfile--->PuthbaseJSON(uuid rowkey)

Update1:​​存储在 hbase 中的数据: 在此处输入图像描述

标签: hadoophbaseapache-nifi

解决方案


我认为您可能会感到惊讶的主要事情是 Hbase 将表的每一列存储为单独的记录。

假设您的 UUID 平均为 40 个字符,字段 1、2 和 3 可能每个平均为 5,并且可能添加了长度为 15 的时间戳。

现在最初您将拥有大小为 40+5+5+5+15 = 70 的数据量并且在根据屏幕截图存储每行之后,三列将变为 3*(40+5+15)=180 和如果您有更小或更多的字段,则此效果会增加。

我从你的截图和这篇文章中得到了这个理解:https ://dzone.com/articles/how-to-improve-apache-hbase-performance-via-data-s

现在,如果您想减少占用空间,显而易见的方法是减少开销。我相信这篇文章推荐序列化,但也许也可以将整个 json 主体放在一列中,具体取决于您计划如何访问它。


推荐阅读