为什么Spark Streaming将每个Kafka消息保存为单个文件?

时间:2015-04-19 13:58:47

标签: apache-spark spark-streaming

我已将Spark Streaming配置为在Kafka Integration Guide之后接收来自Kafka的数据。

我将Spark Streaming的持续时间配置为20秒,并尝试使用DStream方法saveAsTextFile

将每20秒收到的消息保存到HDFS

我成功运行了应用程序,它成功地从Kafka接收数据并将每20秒消息保存到HDFS。但我对输出布局感到困惑。每隔20秒就会创建一个由saveAsTextFile参数指定的前缀的目录,其中包含一些带有前缀"部分 - "的输出文件。例如" part-00001"

但是,每个输出文件中只有一个消息内容。似乎Kafka DStream将收到的每条消息保存到HDFS中的单个输出文件中。我期待将多条消息保存到一个输出文件中。

顺便说一句,我正在使用Spark Standalone部署并且只有一名工作人员

2 个答案:

答案 0 :(得分:1)

不,这当然不是它的工作原理;那会很疯狂。每个批处理间隔创建一个目录。内容为part-*个文件,其中包含在该时间间隔内发送的所有消息。每个流任务创建一个文件,基本上是流RDD的分区数。

答案 1 :(得分:0)

在调用saveAsTextFile方法之前,

将rdd重新分区为1。你会得到单个输出文件。顺便说一下,它会增加更多的计算开销!!