Apache spark 为什么Spark Streaming会将每个卡夫卡消息保存为单个文件?
我已经配置了Spark Streaming以从Kafka接收数据,如下所示 我将Spark Streaming的持续时间配置为20秒,并尝试使用DStream方法Apache spark 为什么Spark Streaming会将每个卡夫卡消息保存为单个文件?,apache-spark,spark-streaming,Apache Spark,Spark Streaming,我已经配置了Spark Streaming以从Kafka接收数据,如下所示 我将Spark Streaming的持续时间配置为20秒,并尝试使用DStream方法saveAsTextFile 我成功地运行了应用程序,它成功地从Kafka接收数据,并每隔20秒将消息保存到HDFS。但我对输出布局感到困惑。每20秒就会创建一个前缀为savastextfile参数指定的目录,其中包含一些前缀为“part-”的输出文件,如“part-00001” 但是,每个输出文件中只有一个消息内容。卡夫卡数据流似乎将
saveAsTextFile
我成功地运行了应用程序,它成功地从Kafka接收数据,并每隔20秒将消息保存到HDFS。但我对输出布局感到困惑。每20秒就会创建一个前缀为savastextfile
参数指定的目录,其中包含一些前缀为“part-”的输出文件,如“part-00001”
但是,每个输出文件中只有一个消息内容。卡夫卡数据流似乎将收到的每条消息保存到HDFS中的单个输出文件中。我期待着将多条消息保存到一个输出文件中
顺便说一句,我使用的是Spark独立部署,并且只有一个worker不,这肯定不是它的工作方式;那太疯狂了。每个批处理间隔创建一个目录。内容是
部分-*
文件,其中包含在该时间间隔内发送的所有消息。每个流任务创建一个文件,基本上是流RDD的分区数。在调用saveAsTextFile
方法之前,将RDD重新分区为1。您将获得单个输出文件。顺便说一句,这将增加更多的计算开销 是,每个流任务创建一个文件。我检查了web ui,发现saveAsTextFile阶段是通过多个任务执行的。spark似乎将阶段分割为多个线程中运行的多个任务。而且,正是配置的持续时间和消息速率使它看起来像是为每条消息创建了一个文件。不管怎样,谢谢你,肖恩,我根据你的提示发现,每个流媒体任务都会创建一个文件。你能添加代码重现你所面临的问题吗?