Я пытаюсь понять плюсы и минусы одного из подходов, которые я часто слышу в своем рабочем пространстве.
Spark во время записи данных в таблицу Hive (InsertInto) выполняет следующие действия:
- Запись в промежуточную папку
- Перемещение данных в таблицу кустов с помощью фиксатора вывода.
Теперь я вижу, что люди жалуются, что описанный выше двухэтапный подход отнимает много времени и, следовательно, прибегает к
1) Write files directly to HDFS
2) Refresh metastore for Hive
И я вижу людей, сообщающих о значительном улучшении этого подхода.
Но почему-то я еще не уверен, что это безопасный и правильный метод. Разве это не компромисс для Automiticy? (Либо полная запись таблицы, либо отсутствие записи)
Что если произойдет сбой исполнителя, записывающего файл в HDFS? Я не вижу способа полностью вернуть наполовину законченные записи.
Я также думаю, что Spark сделал бы это, если бы это был правильный способ, не так ли?
Мои вопросы верны? Видите ли вы что-то хорошее в вышеуказанном подходе? Прокомментируйте, пожалуйста.