每次触发后如何更新HDFS文件?

时间:2019-01-12 15:48:57

标签: apache-spark hdfs spark-structured-streaming

我正在尝试将处理后的数据写入HDFS位置。经过长时间的尝试和错误方法后,我将数据写入HDFS位置,但是现在的问题是,每当我向目录中添加新文件(指向readStream)时,旧文件就会在HDFS位置进行处理和更新

让我说我已经开始流式传输并且我在目录中添加了file-1.csv ...什么都没有写到HDFS位置..然后我添加了file-2.csv ..仍然没有将其写入HDFS ,接下来我添加了file-3.csv ..这一次,file-1.csv的已处理文件正在写入HDFS ...

File 1 - no prcess
File 2 - no process
File 3 - process and written file 1 data to HDFS
file4 - process and written file 2 data to HDFS 

即使是结构化流,也不确定为什么会发生

有人可以解决这个问题吗?

我的输出命令如下:

FetRepo
  .writeStream
  .outputMode("append")
  .partitionBy("data_dt")
  .format("csv")
  .trigger(Trigger.ProcessingTime("10 seconds"))
  .option("path", "hdfs://ffff/apps/hive/warehouse/area.db/fin_repo/")
  .start

1 个答案:

答案 0 :(得分:0)

问自己“我多久添加一次文件?”以及这有什么关系 Trigger.ProcessingTime("10 seconds")?使用该配置,您不应期望10秒之内会发生任何事情。

要查看的另一件事是,您使用outputMode("append")仅输出自上次触发以来添加的聚合(组)的行。

来自Basic Concepts

  

附加模式-仅自上次触发以来在结果表中附加的新行将被写入外部存储。

请注意(引用相同的文档):“这仅适用于预期结果表中现有行不会更改的查询。”