Spark 流无法读取从 hdfs 中的 flume 创建的文件
Spark stream unable to read files created from flume in hdfs
我创建了一个实时应用程序,在其中使用 flume 将数据流从网络日志写入 hdfs,然后使用 spark 流处理该数据。但是当 flume 在 hdfs 中写入和创建新文件时,spark 流无法处理这些文件。如果我使用 put 命令将文件放入 hdfs 目录,则 spark stream 能够读取和处理文件。任何有关相同的帮助都会很棒。
您自己检测到问题:当数据流继续时,HDFS 文件 "locked" 无法被任何其他进程读取。相反,正如您所经历的那样,如果您放入一批数据(那是您的文件,一批,而不是流),一旦上传就可以读取了。
无论如何,作为 Spark 流方面的专家,从 Spark Streaming Programming Guide,概述部分看来,您没有执行正确的部署。我的意思是,从那里显示的图片来看,流式传输(在本例中由 Flume 生成)似乎必须直接发送到 Spark Streaming 引擎;然后将结果放入HDFS。
然而,如果您想维护您的部署,即 Flume -> HDFS -> Spark,那么我的建议是在临时 HDFS 文件夹中创建小批量数据,一旦小批量准备就绪,将新数据存储在第二个小批量中,将第一个批量传递给 Spark 进行分析。
HTH
除了 frb 的回答:这是正确的 - 使用 Flume 的 Spark Streaming 充当 Avro RPC 服务器 - 您需要配置指向您的 Spark Streaming 实例的 AvroSink。
使用 spark2,现在您可以直接将 spark streaming 连接到 flume,查看官方 docs,然后在过程结束时在 HDFS 上写入一次。
import org.apache.spark.streaming.flume._
val flumeStream = FlumeUtils.createStream(streamingContext, [chosen machine's hostname], [chosen port])
我创建了一个实时应用程序,在其中使用 flume 将数据流从网络日志写入 hdfs,然后使用 spark 流处理该数据。但是当 flume 在 hdfs 中写入和创建新文件时,spark 流无法处理这些文件。如果我使用 put 命令将文件放入 hdfs 目录,则 spark stream 能够读取和处理文件。任何有关相同的帮助都会很棒。
您自己检测到问题:当数据流继续时,HDFS 文件 "locked" 无法被任何其他进程读取。相反,正如您所经历的那样,如果您放入一批数据(那是您的文件,一批,而不是流),一旦上传就可以读取了。
无论如何,作为 Spark 流方面的专家,从 Spark Streaming Programming Guide,概述部分看来,您没有执行正确的部署。我的意思是,从那里显示的图片来看,流式传输(在本例中由 Flume 生成)似乎必须直接发送到 Spark Streaming 引擎;然后将结果放入HDFS。
然而,如果您想维护您的部署,即 Flume -> HDFS -> Spark,那么我的建议是在临时 HDFS 文件夹中创建小批量数据,一旦小批量准备就绪,将新数据存储在第二个小批量中,将第一个批量传递给 Spark 进行分析。
HTH
除了 frb 的回答:这是正确的 - 使用 Flume 的 Spark Streaming 充当 Avro RPC 服务器 - 您需要配置指向您的 Spark Streaming 实例的 AvroSink。
使用 spark2,现在您可以直接将 spark streaming 连接到 flume,查看官方 docs,然后在过程结束时在 HDFS 上写入一次。
import org.apache.spark.streaming.flume._
val flumeStream = FlumeUtils.createStream(streamingContext, [chosen machine's hostname], [chosen port])