2

我创建了一个实时应用程序,在该应用程序中,我使用 Flume 从博客将数据流写入 hdfs,然后使用 spark 流处理该数据。但是,当水槽在 hdfs 中写入和创建新文件时,火花流无法处理这些文件。如果我使用 put 命令将文件放入 hdfs 目录,则火花流能够读取和处理文件。任何有关相同的帮助都会很棒。

4

3 回答 3

3

您自己发现了问题:当数据流继续时,HDFS 文件被“锁定”并且不能被任何其他进程读取。相反,正如您所经历的那样,如果您放入一批数据(即您的文件,一批,而不是流),一旦上传它就可以被读取。

无论如何,并且不是 Spark 流方面的专家,从Spark Streaming 编程指南的概述部分看来,您没有执行正确的部署。我的意思是,从那里显示的图片来看,流(在这种情况下由 Flume 生成)似乎必须直接发送到 Spark Streaming 引擎;然后将结果放入 HDFS。

不过,如果您想维护您的部署,即 Flume -> HDFS -> Spark,那么我的建议是在临时 HDFS 文件夹中创建小批量数据,一旦小批量准备好,立即存储新数据minibatch,将第一批传递给 Spark 进行分析。

高温高压

于 2015-06-11T09:20:28.240 回答
1

除了 frb 的回答:这是正确的 - 带有 Flume 的 SparkStreaming 充当 Avro RPC 服务器 - 您需要配置一个指向您的 SparkStreaming 实例的 AvroSink。

于 2015-06-12T13:51:10.337 回答
0

使用 spark2,现在您可以将 spark 流直接连接到水槽,查看官方文档,然后在流程结束时在 HDFS 上写入一次。

 import org.apache.spark.streaming.flume._
 val flumeStream = FlumeUtils.createStream(streamingContext, [chosen machine's hostname], [chosen port])
于 2017-11-23T15:12:32.533 回答