Обработка большого количества небольших пакетов данных в Spark и запись их в HDFS - PullRequest
0 голосов
/ 07 ноября 2019

В настоящее время у меня есть настройка кластера Hadoop, доступ к которой осуществляется через бэкэнд Java / Springboot. Бэкэнд использует Apache Spark для чтения данных из кластера и их анализа. До этого момента все приложения записывают свои данные в Hadoop самостоятельно. Теперь мне нужно интегрировать источник данных, который создает массив JSON каждые 30 секунд (описывая состояние физических объектов), и записывать эти данные в hdfs для последующего анализа. Однако мне также нужно, чтобы последняя версия полученных данных была доступна в бэкэнде Java.

Я попытался сделать это с помощью Apache Spark, встроенного в бэкэнд: получить данные с помощью вызова REST, преобразовать JSON в RDD и затем записать их в Hadoop, сохраняя при этом последний пакет данных, доступный в бэкенде длязвонки на лету. Проблема заключается в том, что размер данных составляет всего от 50 до 150 КБ, и что каждый пакет данных становится новым файлом в Hadoop после того, как Spark записывает его в hdfs. Как я понимаю, множество маленьких файлов в hadoop быстро увеличивают использование памяти для кластеров Hadoop Namenode, чего я хотел бы избежать. Я бы хотел избежать хранения всех этих данных в памяти бэкэнда до достижения размера блока hdfs, поскольку бэкэнд время от времени перезапускается, теряя данные.

Есть ли лучший способ справиться с этимситуация?

...