Как обрабатывать внутренние ошибки сервера S3 при rdd.write.csv на Amazon EMR? - PullRequest
0 голосов
/ 30 марта 2020

У меня есть приложение 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, когда ошибки происходят на рабочих узлах. Или есть?

1 Ответ

0 голосов
/ 28 апреля 2020

Свойство fs.s3.maxRetries по умолчанию равно 4:

$ hdfs getconf -confKey fs.s3.maxRetries
4
$

Увеличение этого значения на большее приведет к увеличению числа повторных попыток.

...