我有一个使用rdd.write.csv
方法写入S3的pyspark Amazon Elastic Map Reduce(EMR)应用程序。 99.999%的时间有效。不幸的是,在写入过程中出现内部S3错误的概率为0.001%。
错误发生在EMR工作节点上。我们无法使用Python try / catch语句来捕获它。
以下是我们收到的错误消息的示例:
Caused by: com.amazon.ws.emr.hadoop.fs.shaded.com.amazonaws.services.s3.model.AmazonS3Exception: Internal Server Error
(Service: Amazon S3; Status Code: 500; Error Code: 500 Internal Server Error;
Request ID: F0AFDAB32ADEF5EC; S3 Extended Request ID: aHJpZ0drMEZOREl5b0lUQWI2YkRKWFZWT2hCbnhFUmlDeVlLV2JFOFlVM2ljU1ZINmxFdDVZMTVweEMxNWQK4=),
S3 Extended Request ID: aHJpZ0drMEZOREl5b0lUQWI2YkRKWFZWT2hCbnhFUmlDeVlLV2JFOFlVM2ljU1ZINmxFdDVZMTVweEMxNWQK4=
除了写HDFS,然后使用子进程将文件从HDFS复制到S3之外,我没有看到其他任何明显的解决方案。那可能仍然会崩溃,但是至少我可以重试它而不会杀死我的pyspark
程序。
我们也看到aws s3 cp --recursive s3://bucket/prefix/file local/file
中偶尔出现的错误。同样,故障率约为0.001%。
亚马逊说我们应该重试。问题是,当工作节点上发生错误时,无法重试rdd.write.csv
。还是在那里?
[C0属性默认为4:
fs.s3.maxRetries
将其增加到更大的数目将增加重试的次数。