#hadoop #hbase #apache-nifi
Вопрос:
Я выполняю преобразование данных в реальном времени с помощью Nifi, и после обработки данные хранятся в Hbase. Я использую puthbasejson
для хранения данных в hbase. При хранении row key/id
я использую is uuid
. Но исходный размер данных в провонансе данных nifi или в онлайн-инструменте для одного JSON составляет 390 байт. Но для 15 миллионов данных размер, который он занимает, составляет 55 ГБ, в соответствии с чем размер данных для одной записи составляет 3,9 КБ.
Итак, я не понимаю, как хранятся данные, почему размер данных, хранящихся в 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)
Комментарии:
1. Можете ли вы запросить данные hbase, чтобы узнать, что там на самом деле?
2. @OneCricketeer Спасибо за ответ!!, я обновил скриншот данных, хранящихся в hbase, с помощью команды сканирования в вопросе.
3. Похоже, вы повторяете данные
4. Хорошо, хорошо, Hbase генерирует ключ строки и строку «подробности», плюс метку времени для каждой пары ключ/значение json, так почему бы размер не был больше, чем ваш ввод?
5. А также, когда я проверял размер одного json=(размер таблицы в байтах)/(количество пакетов). Итак, для 10 000 значение составляло 300 байт, затем для 10 миллионов это было 3 кб, я не понимаю, почему оно увеличивается. И для этой таблицы я включил быстрое сжатие, в противном случае оно занимает больше места, чем указанные выше значения.
Ответ №1:
Я думаю, что главное, что вас может удивить, — это то, что 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 в один столбец, в зависимости от того, как вы планируете получить к нему доступ.