简介明了添加如下配置:
--conf spark.files.ignoreCorruptFiles=true
如果大家对怎么找到这个问题,以及最终解决的全过程感兴趣,请继续往下看:
在大数据处理过程中,必然会存在这样的问题,要处理的源文件可能由于网络传输等各种原因导致上传上来的文件不完整,那么遇到这种问题该如何处理呢?
如题在处理大数据问题时候,由于读取gzip文件使用的是如下代码来读取的:
#FilePaths为文件读取的路径
lines = sc.textFile(FilePaths)
由于FilePaths路径下面的文件众多,在我的项目中一个文件夹下有7000个文件,再上传过程中,每个一段时间就会有个别文件上传或者什么原因,导致.gz文件不完整,从而不能解压
如图1.点击err.log查看错误原因
图2位错误原因:
可以初步猜测可能是*.5328.gz文件不完整导致的,那么就用命令
#将文件下载到本地服务器上
hadoop fs -get oss://sssss5328.gz ./
然后利用如下命令解压
gunzip xxxx5328.gz
得到如下显示:
gzip: xxxx_5328.log.gz: invalid compressed data–format violated
由此可断定就是gz文件错误导致的,那么如何解决呢?
方案1.自己写代码排除错误的gz,思路如下:
1.遍历文件夹下的所有文件:
sc.textFile()报错,在catch中删除该文件
2.删除完错误文件以后,在进行具体的逻辑操作
方案2.推荐
通过查看google查看:
https://gist.github.com/jfrazee/a6421d0b7c1b0ec26c07
文中提到修改一个配置就可以跳过错误文件:
原文如下:
your method hava an error where you deal with a big data
you can also use this conf to do it。
.set(“spark.files.ignoreCorruptFiles”, “true”)
翻译过来就是我可以在sparkConf中这么设置
参考上面的提醒,我在spark-submit脚本上添加了如下配置,果然跳过了不全的gzip文件,
添加的配置为:
--conf spark.files.ignoreCorruptFiles=true
修改前的spark-submit脚本如下:
spark-submit --deploy-mode cluster --master yarn --conf spark.executor.memoryOverhead=2000 --conf spark.hadoop.mapreduce.fileoutputcommitter.algorithm.version=2 --conf spark.network.timeout=300s --conf spark.executor.heartbeatIntervals=100s oss://taobao-com/test_jar/test.py 2020031102 1
修改后如下:
spark-submit --deploy-mode cluster --master yarn --conf spark.executor.memoryOverhead=2000 --conf spark.files.ignoreCorruptFiles=true --conf spark.hadoop.mapreduce.fileoutputcommitter.algorithm.version=2 --conf spark.network.timeout=300s --conf spark.executor.heartbeatIntervals=100s oss://taobao-com/test_jar/test.py 2020031102 1