【问题标题】:Spark stream unable to read files created from flume in hdfsSpark 流无法读取从 hdfs 中的水槽创建的文件
【发布时间】:2015-08-23 17:32:32
【问题描述】:

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

【问题讨论】:

    标签: hadoop apache-spark hdfs spark-streaming flume-ng


    【解决方案1】:

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

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

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

    HTH

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

        有了spark2,现在你可以直接将你的spark流连接到flume,见官方docs,然后在进程结束时在HDFS上写一次。

         import org.apache.spark.streaming.flume._
         val flumeStream = FlumeUtils.createStream(streamingContext, [chosen machine's hostname], [chosen port])
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2015-02-13
          • 2019-10-25
          • 2017-06-14
          • 2016-07-21
          • 2021-06-18
          • 2016-12-03
          • 1970-01-01
          • 2021-06-25
          相关资源
          最近更新 更多