执行期间更新Spark Streaming变量

时间:2017-04-18 21:51:02

标签: scala apache-spark spark-streaming

我有一个从S3目录中读取ELB日志的spark流式传输作业, s3://elb-data/2017-04-17/, 解析它们并将它们转换为ORC,然后将它们存储在一个新目录中:s3://parsed-data/2017-04-17/。这是我的代码:

val streamContext = new StreamingContext(sc, Seconds(30))
val rawLogFormat = new SimpleDateFormat("yyyy/MM/dd/")
val rawLogDate = rawLogFormat.format(new java.util.Date())
val filepath = args(0) + rawLogDate
val parsedLog = streamContext.textFileStream(filepath)

val jsonRows = parsedLog.mapPartitions(lines => {
  val txfm = new LogLine2Json
  lines.map(line =>
    try{
      txfm.parseLine(line)
    }
    catch {
      case e: Exception => {println(line); "";}
    }
  )
})

在新的一天开始时,AWS会自动将日志放入一个新目录,我希望我的流媒体作业可供参考。 (s3://elb-logs/2017-04-18/)但是,我注意到,一旦我的工作到了04/17数据的末尾,它就会停止查看新文件。有没有办法在代码执行时更新此变量?或者这是否要求我通过spark-submit提交新工作?谢谢你的帮助

1 个答案:

答案 0 :(得分:0)

我认为你的filepath对你的流媒体工作保持不变,它会不断解析同一个目录s3://parsed-data/2017-04-17/。您需要指向您的根目录,即s3://parsed-data/,如果有新日期s3://parsed-data/2017-04-18/,它应该能够获取新数据。另请参阅此SO帖子。