AWS Чтение задания EMR Spark Склеивает таблицу Athena при изменении раздела или расположения - PullRequest
0 голосов
/ 03 марта 2020

Я создал кластер AWS EMR oop с каталогом AWS Glue Data, который используется для "метаданных таблицы Spark". Следовательно, в заданиях Spark или в spark-shell я могу написать Spark SQL, который использует базы данных и таблицы Glue / Athena.

Что произойдет, если кто-либо изменит местоположение таблицы Athena, когда задание Spark, запущенное в EMR, чтение содержимого этой таблицы?

Давайте представим, что у меня есть таблица Athena с именем "item" в базе данных Glue с именем "my_db". Расположение таблицы Athena указывает на папку S3, в которой хранятся файлы Parquet, содержащие данные. Эта папка s3://my_bucket/item_2020_03_02.

Запущено задание на запуск в EMR, и обработана строка Spark SQL, которая считывает содержимое таблицы:

Dataset<Row> df = spark.sql("select * from my_db.item");
df.write().parquet("some_location_in_emr_hdfs");

Через несколько миллисекунд после того, как кто-то запускает этот SQL запрос в AWS Athena Web Console:

ALTER TABLE my_db.item SET LOCATION 's3://my_bucket/item_2020_03_03'

Предыдущее расположение данных таблицы Athena не удаляется и не изменяется. Ведро s3://my_bucket/item_2020_03_02 не изменилось.

Что происходит в задании Spark?

Счастливо ли оно продолжает читать данные, которые были данными таблицы Athena, когда оно началось: s3://my_bucket/item_2020_03_02 ?

Или он столкнется с несогласованностью данных, поскольку часть данных будет считана из s3://my_bucket/item_2020_03_02 (старое местоположение), а часть данных из s3://my_bucket/item_2020_03_03 (новое местоположение)?

Или будет выдана какая-то AWS ошибка?

1 Ответ

0 голосов
/ 04 марта 2020

В идеале не должно быть ошибок. Если ваше задание на искру уже запущено и вы прочитали предыдущее местоположение, когда вы выполнили изменение в таблице в Афине, тогда спарк завершит запись данных от s3://my_bucket/item_2020_03_02 до some_location_in_emr_hdfs.

Если изменение выполняется даже до спарка Начните читать данные таблицы, затем он будет читать данные из нового местоположения.

Либо он будет читать из старого или нового местоположения в зависимости от того, когда фактически было выполнено изменение таблицы в Афине.

...