Apache Flume 可能有助于实时读取日志。
Flume 提供日志收集和传输到使用 Spark Streaming 分析所需信息的应用程序。
1. 从official site 下载Apache Flume 或按照here 的说明进行操作
2. 设置并运行 Flume
修改 Flume 安装目录(FLUME_INSTALLATION_PATH\conf)下的flume-conf.properties.template,这里需要提供日志source、channel和sinks(输出)。有关设置的更多详细信息here
有一个启动flume的例子,它从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
您也可以启动提供智能日志收集的 java 应用程序(在字段中输入“java path_to_main_class arguments”),而不是 windows 脚本。例如,如果文件被实时修改,您可以使用来自 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