3. 调试
3.1. 使用ssc.textFileStream()的风险
曾经在一篇Blog上看到ssc.textFileStream()监控一个文件夹和用flume监控的效果差不多,于是抱着能少一个组件就少一个的念头,使用ssc.textFileStream()来测试程序功能,发现以下问题:
1、有时候程序能正常跑完,有时候不能
2、不能跑完的报以下错误:
16/02/24 14:23:53 ERROR scheduler.JobScheduler: Error running job streaming job 1456295030000 ms.0
org.apache.spark.SparkException: Job aborted due to stage failure: Task 0 in stage 103.0 failed 4 times, most recent failure: Lost task 0.3 in stage 103.0 (TID 689, host-9-60): java.io.FileNotFoundException: File does not exist: dir/20160217152630.txt._COPYING
Caused by: org.apache.hadoop.ipc.RemoteException(java.io.FileNotFoundException): File does not exist: dir/20160217152630.txt._COPYING
经过询问大神,发现应该是当上传文件到/dir/中时,hadoop会生成中间文件XXX._COPYING,这时如果ssc.textFileStream()恰好发现了中间文件就会把它读进来,但是当文件上传完毕后该中间文件会被改名,于是就报错说找不到了。
重要:改用的组件还是得用啊,上flume/kafuka