#sql #sql-server #apache-spark
#sql #sql-сервер #apache-spark
Вопрос:
У нас есть задание ETL, запущенное на spark, которое считывает данные с SQL Server. Затем в фрейме данных выполняются некоторые преобразования путем применения mappartition и создается новый фрейм данных с другой схемой. Выполняются некоторые дальнейшие преобразования, и, наконец, результирующий фрейм данных должен быть записан обратно в SQL Server.
Мой вопрос: предположим, что при вставке данных в SQL Server, скажем, в 8 разделах, один из узлов spark выходит из строя, как spark обеспечит целостность данных? Другие разделы вставили бы данные в базу данных, и в момент сбоя данные в базе данных несовместимы.
Будет ли spark только заново создавать сбойный раздел, применяя все преобразования?
В случае повторного сбоя, каково будет состояние данных других разделов в базе данных?
Комментарии:
1. Я считаю, что Spark не совместим с ACID, если только вы не используете Delta Lake в Azure, поэтому он не будет обеспечивать согласованность по дизайну. С этим остается разобраться разработчику.
Ответ №1:
Краткий ответ.
Если вы не установили флажок,
- затем, поскольку вы не читаете из источника, который может отслеживать первоначально использованные файлы — в случае повторного вычисления из источника — например, таблицы Hive,
- произойдет повторное вычисление, и результаты могут отличаться при последующем восстановлении после сбоя узла — если только этот источник не является статическим.
С помощью .cache и / или контрольной точки, которые все еще можно прочитать где-то еще,
- насколько я понимаю, вы получите тот же результат.
Сложно протестировать имхо.
Дополнительные баллы
Кэширование ПОСЛЕ ВСЕХ примененных преобразований не является стандартной процедурой. Это дорого. Более того, из-за проблем с памятью и даже хранилищем Spark может удалить раздел и вернуться к исходному коду, поэтому данные могут отличаться от предыдущего вызова обработки. И, если вы сохраняете и эти узлы выходят из строя до записи, вы потеряли кеш. Та же ситуация.
Комментарии:
1. Да, я кэширую данные после применения всех преобразований. Также, пожалуйста, ответьте на этот вопрос, если, скажем, я записываю фрейм данных на sql server в 8 разделах, и 1 раздел завершается сбоем, в то время как другие завершаются успешно, как будет поддерживаться согласованность данных в базе данных?
2. добавлены некоторые аспекты. Нужно видеть общую картину.