读取已恢复的对象 - Amazon EMR

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

读取已恢复的对象

在 Amazon 7.2.0 及更高EMR版本中,您可以使用S3A协议从表的 S3 位置读取已恢复的 Glacier 对象。先前版本中的引擎不区分 Glacier 和 Glacier Deep Archive 文件,这意味着AmazonS3Exception如果你尝试使用访问正在进行的 Glacier 文件,你就会得到一个。S3A如果存档的 Glacier 文件仍在恢复中,则此读取操作会忽略这些文件。要启用此行为,请使用设置fs.s3a.glacier.read.restored.objects。此设置可以是三个值:

  • READ_ ALL — 此值表示亚马逊EMR不应考虑从 Amazon S3 检索到的存储类别。这是默认行为。

  • SKIP_ ALL _ GLACIER — 此值表示 Amazon EMR 应忽略任何标有 Glacier 存储类的 S3 对象,并检索所有其他对象。这是 Amazon Athena 在 Glacier 对象方面的默认行为。

  • READ_ RESTORED GLACIER _ OBJECTS — 此值表示亚马逊EMR应检查 Glacier 对象的恢复状态。如果 Amazon EMR 可以恢复该对象,则您可以像普通的 S3 对象一样读取它们。否则,亚马逊EMR会忽略 S3 Glacier 中的对象

示例

Spark

要在使用 Spark 时读取已恢复的对象,请使用以下配置:

--conf spark.hadoop.fs.s3a.glacier.read.restored.objects=<value>

如果您使用 spark-sql,请改用以下配置;

spark-sql --conf spark.hadoop.fs.s3a.glacier.read.restored.objects=<value>

Flink

如果您使用 Flink,则可以在文件中flink-conf.yaml设置配置

fs.s3a.glacier.read.restored.objects: <value>

你也可以设置flink-conf分类:

[ { "Classification": "flink-conf", "Properties": { "fs.s3a.glacier.read.restored.objects":"<value>" } } ]

Hive

如果您使用 Hive,请在hive-site.xml文件中设置配置。

<property> <name>fs.s3a.glacier.read.restored.objects</name> <value><value></value> </property>

你也可以使用 Hive CLI 来设置属性--hiveconf

hive --hiveconf fs.s3a.glacier.read.restored.objects=<value>

注意事项

当您从 S3 Glacier 读取已恢复的对象时,请注意以下注意事项:

  • 只有使用S3A方案或来访问数据时,才能读取已恢复的对象。S3AFileSystem

  • 当您读取已恢复的 Glacier 对象时,Amazon EMR 不会恢复该对象本身。为此,必须使用 AWS CLI 或 AWS SDK。