我有一个从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
提交新工作?谢谢你的帮助
答案 0 :(得分:0)
我认为你的filepath
对你的流媒体工作保持不变,它会不断解析同一个目录s3://parsed-data/2017-04-17/
。您需要指向您的根目录,即s3://parsed-data/
,如果有新日期s3://parsed-data/2017-04-18/
,它应该能够获取新数据。另请参阅此SO帖子。