使用apache spark streaming进行实时日志处理

时间:2015-02-22 07:03:13

标签: apache-spark apache-kafka flume spark-streaming

我想创建一个系统,我可以实时读取日志,并使用apache spark来处理它。如果我应该使用像kafka或flume这样的东西将日志传递给火花流,或者我应该使用套接字传递日志,我感到很困惑。我已经在火花流文档中找到了一个示例程序 - Spark stream example。但如果有人能指导我将日志传递给火花流,我将不胜感激。它对我来说是一种新的草皮。

3 个答案:

答案 0 :(得分: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

或者您可以在类路径中创建具有flume库的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

的代码示例

答案 1 :(得分:2)

您可以将Apache Kafka用作日志的队列系统。生成日志的系统,例如websever,会将日志发送到Apache KAFKA。然后你可以使用apache storm或spark streaming library来实时读取KAFKA主题和进程日志。

您需要创建日志流,您可以使用Apache Kakfa创建日志流。 kafka可以集成风暴和apache火花。两者都有其优点和缺点。

对于Storm Kafka Integration,请查看here

对于Apache Spark Kafka Integration,请查看here

答案 2 :(得分:-1)

虽然这是一个老问题,但是发布了来自Databricks的链接,该链接有一个很好的分步文章,用于Spark的日志分析考虑了很多方面。

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

希望这有帮助。