使用Apache Spark流的实时日志处理

问题描述 投票:9回答:3

我想创建一个可以实时读取日志并使用apache spark处理它的系统。如果我应该使用类似kafka或flume的日志将日志传递到Spark流,还是应该使用套接字传递日志,我感到困惑。我查看了Spark Streaming文档Spark stream example中的示例程序。但是,如果有人可以引导我以更好的方式将日志传递到火花流,我将不胜感激。对我来说,这真像是一块新草皮。

apache-spark apache-kafka flume spark-streaming
3个回答
4
投票

Apache Flume可能有助于实时读取日志。Flume提供日志收集并传输到应用程序,在此应用程序中,Spark Streaming用于分析所需的信息。

1。official site下载Apache Flume或按照here的说明进行操作>

2。

设置并运行Flume 从安装Flume的目录(FLUME_INSTALLATION_PATH \ conf)修改flume-conf.properties.template,在这里您需要提供日志源,通道和接收器(输出)。有关设置here的更多详细信息

有一个启动水槽的示例,该水槽从Windows主机上运行的ping命令收集日志信息并将其写入文件:

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应用程序,并通过传递相应参数的应用程序调用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 arguments”)。例如,如果文件是实时修改的,则可以使用Apache Commons IO中的Tailer。要配置Flume传输日志信息,请阅读此article

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集成了风暴和Apache Spark。两者都有其优点和缺点。

对于Storm Kafka集成,请看here

对于Apache Spark Kafka集成,请看here

尽管这是一个古老的问题,但发布了来自Databricks的链接,其中有一篇分步介绍了Spark并涉及许多领域的日志分析的出色文章。

https://databricks.gitbooks.io/databricks-spark-reference-applications/content/logs_analyzer/index.html

希望这会有所帮助。


3
投票

您可以将Apache Kafka用作日志的队列系统。生成日志的系统(例如websever)会将日志发送到Apache KAFKA。然后,您可以使用Apache Storm或Spark流媒体库从KAFKA主题中读取并实时处理日志。


-1
投票

尽管这是一个古老的问题,但发布了来自Databricks的链接,其中有一篇分步介绍了Spark并涉及许多领域的日志分析的出色文章。

© www.soinside.com 2019 - 2024. All rights reserved.