分区或位置更改时 AWS EMR Spark 作业读取 Glue Athena table
AWS EMR Spark job reading Glue Athena table while partition or location change
我创建了一个 AWS EMR Hadoop 集群,其中 'AWS Glue Data Catalog' 用于 'for Spark table metadata'。因此,在 Spark 作业或 spark-shell 中,我可以编写使用 Glue/Athena 数据库和 tables.
的 Spark SQL
如果在 EMR 中的 Spark 作业 运行 正在读取此 table 的内容时更改 Athena table 位置会发生什么情况?
假设我在名为 "my_db" 的 Glue 数据库中有一个名为 "item" 的 Athena table。 Athena table 位置指向存储包含数据的 Parquet 文件的 S3 文件夹。此文件夹是 s3://my_bucket/item_2020_03_02
.
EMR 中的 spark 作业 运行 已启动并处理读取 table 内容的 Spark SQL 字符串:
Dataset<Row> df = spark.sql("select * from my_db.item");
df.write().parquet("some_location_in_emr_hdfs");
几毫秒后,有人在 AWS Athena Web 控制台中运行此 SQL 查询:
ALTER TABLE my_db.item SET LOCATION 's3://my_bucket/item_2020_03_03'
Athena table 数据的先前位置既未删除也未更改。存储桶 s3://my_bucket/item_2020_03_02
未更改。
Spark 作业中发生了什么?
它是否愉快地继续读取 Athena table 启动时的数据:s3://my_bucket/item_2020_03_02
?
或者它是否会面临数据不一致,因为部分数据将从 s3://my_bucket/item_2020_03_02
(旧位置)读取,部分数据从 s3://my_bucket/item_2020_03_03
(新位置)读取?
或者会抛出一些 AWS 错误?
理想情况下不应该有任何错误。如果您的 Spark 作业已经是 运行,并且在 Athena 中执行更改为 table 时读取了之前的位置,那么 Spark 最终会将数据从 s3://my_bucket/item_2020_03_02
写入 some_location_in_emr_hdfs
。
如果甚至在 spark 开始读取 table 数据之前就执行了更改,那么它将从新位置读取数据。
根据在 Athena 中对 table 实际执行更改的时间,它会从旧位置或新位置读取。
我创建了一个 AWS EMR Hadoop 集群,其中 'AWS Glue Data Catalog' 用于 'for Spark table metadata'。因此,在 Spark 作业或 spark-shell 中,我可以编写使用 Glue/Athena 数据库和 tables.
的 Spark SQL如果在 EMR 中的 Spark 作业 运行 正在读取此 table 的内容时更改 Athena table 位置会发生什么情况?
假设我在名为 "my_db" 的 Glue 数据库中有一个名为 "item" 的 Athena table。 Athena table 位置指向存储包含数据的 Parquet 文件的 S3 文件夹。此文件夹是 s3://my_bucket/item_2020_03_02
.
EMR 中的 spark 作业 运行 已启动并处理读取 table 内容的 Spark SQL 字符串:
Dataset<Row> df = spark.sql("select * from my_db.item");
df.write().parquet("some_location_in_emr_hdfs");
几毫秒后,有人在 AWS Athena Web 控制台中运行此 SQL 查询:
ALTER TABLE my_db.item SET LOCATION 's3://my_bucket/item_2020_03_03'
Athena table 数据的先前位置既未删除也未更改。存储桶 s3://my_bucket/item_2020_03_02
未更改。
Spark 作业中发生了什么?
它是否愉快地继续读取 Athena table 启动时的数据:s3://my_bucket/item_2020_03_02
?
或者它是否会面临数据不一致,因为部分数据将从 s3://my_bucket/item_2020_03_02
(旧位置)读取,部分数据从 s3://my_bucket/item_2020_03_03
(新位置)读取?
或者会抛出一些 AWS 错误?
理想情况下不应该有任何错误。如果您的 Spark 作业已经是 运行,并且在 Athena 中执行更改为 table 时读取了之前的位置,那么 Spark 最终会将数据从 s3://my_bucket/item_2020_03_02
写入 some_location_in_emr_hdfs
。
如果甚至在 spark 开始读取 table 数据之前就执行了更改,那么它将从新位置读取数据。
根据在 Athena 中对 table 实际执行更改的时间,它会从旧位置或新位置读取。