Почему Spark портит часть 2 из нескольких частей - PullRequest
0 голосов
/ 10 апреля 2020

У меня есть отличная работа, которая после завершения загружает вывод на S3 в формате json.

dataframe.write.mode(SaveMode.Overwrite).json(file_path)

Вчера, хотя один загруженный json был неполным, остальные jsons выглядели нормально, как обычно , Ниже приведен фрагмент журналов об этом одном файле. Я извлек их из 2 файлов журнала из множества созданных для этого задания.

файл журнала 1

20/04/07 13:12:41 INFO MultipartUploadOutputStream: uploadPart: partNum 1 of 's3://bucket/part-00072-50d3246e-e18c-4058-9e1c-ad714305c92f-c000.json' from local file '/mnt/s3/emrfs-5360609960688228490/0000000000', 134217728 bytes in 5577 ms, md5: qg7f22UwVchHRejYe+41GQ== md5hex: aa0edfdb653055c84745e8d87bee3519
20/04/07 13:12:43 INFO MultipartUploadOutputStream: uploadPart: partNum 2 of 's3://bucket/part-00072-50d3246e-e18c-4058-9e1c-ad714305c92f-c000.json' from local file '/mnt/s3/emrfs-5360609960688228490/0000000001', 69266128 bytes in 1322 ms, md5: hOJmAWIoAMs2EtyBCuUw2g== md5hex: 84e26601622800cb3612dc810ae530da
20/04/07 13:12:44 INFO Executor: Finished task 72.0 in stage 549.0 (TID 413542). 212642 bytes result sent to driver
20/04/07 13:12:44 INFO DefaultMultipartUploadDispatcher: Completed multipart upload of 2 parts 203483856 bytes
20/04/07 13:12:44 INFO SparkHadoopMapRedUtil: No need to commit output of task because needsTaskCommit=false: attempt_20200407131212_0549_m_000072_0

файл журнала 2

20/04/07 13:12:37 INFO Executor: Running task 72.1 in stage 549.0 (TID 413637)
20/04/07 13:12:44 INFO Executor: Executor is trying to kill task 72.1 in stage 549.0 (TID 413637), reason: another attempt succeeded
20/04/07 13:12:44 INFO MultipartUploadOutputStream: uploadPart: partNum 2 of 's3://bucket/part-00072-50d3246e-e18c-4058-9e1c-ad714305c92f-c000.json' from local file '/mnt/s3/emrfs-3565489585808272492/0000000001', 1 bytes in 43 ms, md5: y7GE3Y4FyXCeXcrtqgSVzw== md5hex: cbb184dd8e05c9709e5dcaedaa0495cf
20/04/07 13:12:45 INFO MultipartUploadOutputStream: uploadPart: partNum 1 of 's3://bucket/part-00072-50d3246e-e18c-4058-9e1c-ad714305c92f-c000.json' from local file '/mnt/s3/emrfs-3565489585808272492/0000000000', 134217728 bytes in 1395 ms, md5: qg7f22UwVchHRejYe+41GQ== md5hex: aa0edfdb653055c84745e8d87bee3519
20/04/07 13:12:46 INFO DefaultMultipartUploadDispatcher: Completed multipart upload of 2 parts 134217729 bytes
20/04/07 13:12:46 INFO Executor: Executor interrupted and killed task 72.1 in stage 549.0 (TID 413637), reason: another attempt succeeded

Как видно из журналов, вторая задача захотела остановиться сама, когда узнала, что первая загрузила файл. Но он не смог выполнить откат полностью и, в свою очередь, закончил перезаписью частичными данными (1 байт). Это json теперь выглядит так

{"key": "v}

вместо

{"key": "value"}

, и это заставляет читателя json выдавать исключение. Я пытался найти эту проблему, но не вижу никого, кто бы писал об этом. Кто-нибудь сталкивался здесь с этой проблемой? Это ошибка в искре? Как я могу преодолеть это?

...