gpt4 book ai didi

apache-spark - Spark 在 Glacier 中部分读取 S3 中的分区数据

转载 作者:行者123 更新时间:2023-12-03 01:45:45 25 4
gpt4 key购买 nike

我在 S3 中有一个 parquet 数据集,按日期 (dt) 分区,最旧的日期存储在 AWS Glacier 中以节省一些钱。例如,我们有...

s3://my-bucket/my-dataset/dt=2017-07-01/    [in glacier]
...
s3://my-bucket/my-dataset/dt=2017-07-09/ [in glacier]
s3://my-bucket/my-dataset/dt=2017-07-10/ [not in glacier]
...
s3://my-bucket/my-dataset/dt=2017-07-24/ [not in glacier]

我想读取这个数据集,但仅限于冰川中尚未存在的日期子集,例如:

val from = "2017-07-15"
val to = "2017-08-24"
val path = "s3://my-bucket/my-dataset/"
val X = spark.read.parquet(path).where(col("dt").between(from, to))

不幸的是,我有一个异常(exception)

java.io.IOException: com.amazon.ws.emr.hadoop.fs.shaded.com.amazonaws.services.s3.model.AmazonS3Exception: The operation is not valid for the object's storage class (Service: Amazon S3; Status Code: 403; Error Code: InvalidObjectState; Request ID: C444D508B6042138)

当某些分区位于 Glacier 中时,我似乎 Spark 不喜欢分区数据集。我总是可以具体读取每个日期,在末尾添加包含当前日期和 reduce(_ union _) 的列,但它很难看,而且应该没有必要。

即使使用 Glacier 中的旧数据,是否有任何提示可以读取数据存储中的可用数据?

最佳答案

您收到的错误与 Apache Spark 无关,您收到异常是因为 Glacier 存储类中的短 S3 对象中的 Glacier 服务无法以与普通对象相同的方式访问,需要先从 Glacier 检索它们可以读取。

Apache Spark 无法直接处理映射到 S3 的冰川存储 TABLE/PARTITION。

java.io.IOException:com.amazon.ws.emr.hadoop.fs.shaded.com.amazonaws.services.s3.model.AmazonS3Exception:The operation is not valid for the object's storage class (Service:Amazon S3; Status Code: 403; Error Code: InvalidObjectState; RequestID: C444D508B6042138)

当 S3 从 S3 存储类移动任何对象时

  • 标准,

  • STANDARD_IA,

  • REDUCED_REDUNDANCY

    对于 GLACIER 存储类,您的对象 S3 已存储在 Glacier 中,但该对象不可见向您收取费用,S3 将仅收取 Glacier 存储费率。

它仍然是一个 S3 对象,但具有 GLACIER 存储类别。

When you need to access one of these objects, you initiate a restore,which temporary copy into S3 .

将数据移至 S3 存储桶并读取到 Apache Spark 将解决您的问题。

注意:Apache Spark、AWS athena 等无法直接从 Glacier 读取对象,如果尝试将收到 403 错误。

If you archive objects using the Glacier storage option, you mustinspect the storage class of an object before you attempt to retrieveit. The customary GET request will work as expected if the object isstored in S3 Standard or Reduced Redundancy (RRS) storage. It willfail (with a 403 error) if the object is archived in Glacier. In thiscase, you must use the RESTORE operation (described below) to makeyour data available in S3.

关于apache-spark - Spark 在 Glacier 中部分读取 S3 中的分区数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45798074/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com