hadoop - 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)
解决方案
我认为您可能会感到惊讶的主要事情是 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 主体放在一列中,具体取决于您计划如何访问它。
推荐阅读
- android - 我可以尝试创建登录页面,但在状态电子邮件上出现错误
- r - 在 R 中生成 pca 图
- python - Selenium 通过 pip3 安装,但使用 import selenium 时找不到名为 selenium 的模块
- javascript - 如何获取url参数并将其设置为文本框onload的默认值
- c# - 如何在asp.net Core中的每次批量操作后发送进度成功消息
- javascript - javascript while循环问题,break不会停止循环
- java - 如何将 Java json 对象发送到 R 函数?
- reactjs - 在 React Query 中,如果我在组件中使用两个 mutate 函数,如何获取数据?
- json - JSON-Schema 有条件地向项目添加属性
- ios - 带有 .mov 的媒体文件不在 Cordova 应用程序中播放