Я не знаю, как построить архитектуру для последующего использования:Спарк Архитектура для обработки небольших двоичных файлов, сохраненных в HDFS
У меня есть веб-приложение, в котором пользователи могут загружать файлы (PDF & PPTX) и каталоги, чтобы быть обработанный. После завершения загрузки веб-приложение поместит эти файлы и каталоги в HDFS, а затем отправьте сообщения на kafka с указанием пути к этим файлам.
Spark Application считывает сообщения с потоковой передачи kafka, собирает их на master (driver) и после этого обрабатывает их. Сначала я собираю сообщения, потому что мне нужно переместить код на данные, а не перемещать данные, где получено сообщение. Я понял, что искра назначает задание исполнителю, у которого уже есть файл локально.
У меня проблемы с kafka, потому что я был вынужден собрать их сначала по вышеуказанной причине, и когда вы хотите создать катастрофу для приложения checkpoint, потому что вы пытаетесь ссылаться на SparkContext из широковещательной переменной ", даже если код запускается перед добавлением checkpointing (я использую sparkContext там, потому что мне нужно сохранять данные в ElasticSearch и PostgreSQL. Я не знаю, как именно я могу сделать обновление кода в этих условиях.
Я читал о проблемах с небольшими файлами хаопа, и я понимаю, какие проблемы В этом случае я читал, что HBase - лучшее решение для сохранения небольших файлов, чем просто сохранение в hdfs. Другая проблема в проблемах с небольшими файлами hasoop - это большое количество копий и редукторов, созданных для вычислений, но я не понимаю, там в искру ,
Что такое лучшая архитектура для этого варианта использования? Как выполнять расписание работы? Это кафка для этого? или мне нужно использовать другую услугу, такую как rabbitMQ или что-то еще? Существуют ли какие-либо методы для добавления заданий в запущенное приложение Spark через некоторый REST API? Как наилучшим образом сохранить файлы? Лучше использовать Hbase, потому что у меня небольшие файлы (< 100MB)? Или мне нужно использовать SequenceFile? Я думаю, что SequenceFile не для моего использования, потому что мне нужно перерабатывать некоторые файлы случайным образом.
Какая архитектура лучше всего подходит для этого случая использования?
Спасибо!
Большое спасибо за ваш ответ! У меня есть вопрос: Я мог бы использовать Flume для проглатывания данных, это хорошая идея, но как я могу переработать по требованию некоторые файлы, уже добавленные в HDFS? Я думаю, что моя архитектура плохая, потому что это своего рода ETL на пакетных файлах, и она не основана на потоковой передаче, но мне нужно запускать некоторые алгоритмы в пакетных файлах по требованию, и я не знаю, как добавлять задания в искру без очереди (это плохая идея). Как можно добавить работу в искру? Спасибо – Cosmin