У меня есть приложение pyspark Amazon Elasti c Map Reduce (EMR), которое пишет в S3 с использованием метода rdd.write.csv
. Это работает 99,999% времени. К сожалению, 0,001% времени мы получаем внутреннюю ошибку S3 во время записи.
Ошибка происходит на рабочих узлах 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. Это может все еще взломать sh, но, по крайней мере, я могу повторить попытку, не убивая мою pyspark
программу.
Мы также видим случайные ошибки в aws s3 cp --recursive s3://bucket/prefix/file local/file
. Опять же, процент отказов составляет около 0,001%.
Амазонка говорит, что мы должны повторить попытку. Проблема в том, что нет способа повторить rdd.write.csv
, когда ошибки происходят на рабочих узлах. Или есть?