对于使用spark streaming
的日志处理,我使用了socketStream
和textFileStream
API。通过socketStream,在特定端口上使用nc -lk
,我们可以读取附加日志文件,并通过textFileStream,可以读取目录中添加的任何新文件,并可以进行累积处理。
我正在寻找一个单个日志文件,它随着时间的推移而增长,如何将相同的日志文件读入:DStream或任何Spark RDD
句柄,然后处理它cummulatively。我不打算使用nc -lk
,因为它可能不是一般方法。 Spark中是否有任何方法或API,我们可以在其中收听日志文件,对它的任何添加内容都将被读取并处理成RDD
格式?
答案 0 :(得分:1)
我认为Spark中没有本地API可以监控single
日志文件并立即获取连续增量日志内容(1.6版本之前)
但似乎netcat模式(接收连续增量日志的tail和netnet管道)在套接字流和Kafka流中都很普遍。
使用spark socket流连接到流水线netcat。
tail -f xxx.log | nc -lk 9999
或使用spark Kafka流连接到流水线kafkacat。
kafkacat是Apache Kafka的通用非JVM生产者和使用者 0.8,把它想象成卡夫卡的netcat。
https://github.com/edenhill/kafkacat
tail -f /var/log/syslog | kafkacat -b mybroker -t syslog -z snappy
注意:从stdin读取消息,使用snappy压缩生成'syslog'主题。