Я хочу создать систему, в которой я могу читать журналы в реальном времени и использовать apache spark для их обработки. Я не понимаю, следует ли мне использовать что-то вроде kafka или flume для передачи журналов для искрового потока или я должен передавать журналы с помощью сокетов. Я просмотрел образец программы в документации по потоковой передаче искры - Пример потока Spark < / а>. Но я буду благодарен, если кто-нибудь подскажет, как лучше передавать логи в Spark Stream. Для меня это что-то новое.
обработка журналов в реальном времени с использованием потоковой передачи Apache Spark
Ответы (3)
Apache Flume может помочь читать журналы в реальном времени. Flume обеспечивает сбор и передачу журналов в приложение, где Spark Streaming используется для анализа необходимой информации.
1. Загрузите Apache Flume с официального сайта или следуйте инструкциям со страницы здесь
2. Настройте и запустите Flume, измените flume-conf.properties.template из каталога, в котором установлен Flume (FLUME_INSTALLATION_PATH \ conf), здесь вам нужно указать источник журналов, канал и приемники (вывод). Подробнее о настройке здесь
Вот пример запуска flume, который собирает информацию журнала из команды ping, запущенной на хосте Windows, и записывает ее в файл:
flume-conf.properties
agent.sources = seqGenSrc
agent.channels = memoryChannel
agent.sinks = loggerSink
agent.sources.seqGenSrc.type = exec
agent.sources.seqGenSrc.shell = powershell -Command
agent.sources.seqGenSrc.command = for() { ping google.com }
agent.sources.seqGenSrc.channels = memoryChannel
agent.sinks.loggerSink.type = file_roll
agent.sinks.loggerSink.channel = memoryChannel
agent.sinks.loggerSink.sink.directory = D:\\TMP\\flu\\
agent.sinks.loggerSink.serializer = text
agent.sinks.loggerSink.appendNewline = false
agent.sinks.loggerSink.rollInterval = 0
agent.channels.memoryChannel.type = memory
agent.channels.memoryChannel.capacity = 100
Чтобы запустить пример, перейдите к FLUME_INSTALLATION_PATH и выполните
java -Xmx20m -Dlog4j.configuration=file:///%CD%\conf\log4j.properties -cp .\lib\* org.apache.flume.node.Application -f conf\flume-conf.properties -n agent
ИЛИ вы можете создать свое Java-приложение с библиотеками flume в пути к классам и вызвать экземпляр org.apache.flume.node.Application из приложения, передавая соответствующие аргументы.
Как настроить Flume для сбора и транспортировки журналов?
Вы можете использовать какой-нибудь скрипт для сбора логов из указанного места
agent.sources.seqGenSrc.shell = powershell -Command
agent.sources.seqGenSrc.command = your script here
вместо сценария Windows вы также можете запустить приложение Java (введите аргументы java path_to_main_class в поле), которое обеспечивает сбор интеллектуальных журналов. Например, если файл изменяется в реальном времени, вы можете использовать Tailer из Apache Commons IO. Чтобы настроить Flume для передачи информации журнала, прочтите эту статью
3. Получите поток Flume из исходного кода и проанализируйте его с помощью Spark. Взгляните на образец кода из github https://github.com/apache/spark/blob/master/examples/src/main/java/org/apache/spark/examples/streaming/JavaFlumeEventCount.java
Вы можете использовать Apache Kafka в качестве системы очередей для ваших журналов. Система, которая сгенерировала ваши журналы, например, websever, отправит журналы в Apache KAFKA. Затем вы можете использовать потоковую библиотеку apache storm или spark для чтения из темы KAFKA и обработки журналов в реальном времени.
Вам необходимо создать поток журналов, который вы можете создать с помощью Apache Kakfa. Доступна интеграция для kafka с Storm и Apache Spark. у обоих есть свои плюсы и минусы.
Интеграцию Storm Kafka см. здесь а>
Для интеграции Apache Spark Kafka посмотрите здесь
Хотя это старый вопрос, разместить ссылку из Databricks, где есть отличная пошаговая статья для анализа журналов с помощью Spark с учетом многих областей.
Надеюсь это поможет.