我有一个Spark Streaming作业输出一些当前存储在HDFS中的日志,我想用logstash处理它们。不幸的是,虽然有一个插件可以在hdfs中写入logstash,但实际上从hdfs 读取是不可能的。
我已经搜索了一个链接这两个部分的解决方案,但是就python api的Spark流程而言,存储内容的唯一方法是将其作为文本文件写入hdfs,所以我必须从hdfs中读取! 我无法在本地保存它们,因为Spark在群集上运行,我不想从每个节点获取所有数据。
目前我运行一个非常脏的脚本,每2秒复制一次hdfs目录的内容。但这种解决方案显然不能令人满意。
有人知道一个可以帮我发送Spark输出到Logstash的软件吗?
提前致谢!
编辑:我使用Python& Spark 1.6.0
答案 0 :(得分:0)
这似乎是使用Kafka的完美工作。在Spark Streaming作业中,写入Kafka,然后使用Logstash中的记录。
stream.foreachRDD { rdd =>
rdd.foreachPartition { partition =>
val producer = createKafkaProducer()
partition.foreach { message =>
val record = ... // convert message to record
producer.send(record)
}
producer.close()
}
}