

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

# 读取还原的对象
<a name="emr-hadoop-read-restore-objects"></a>

 在 Amazon EMR 7.2.0 及更高版本中，您可以使用 `S3A` 协议从表的 S3 位置读取还原的 Glacier 对象。以前发行版中的引擎不区分 Glacier 和 Glacier Deep Archive 文件，这意味着，如果您尝试使用 `S3A` 访问正在进行的 Glacier 文件，则会获得 `AmazonS3Exception`。如果存档的 Glacier 文件仍在还原中，则此读取操作将忽略这些文件。要启用此行为，请使用设置 `fs.s3a.glacier.read.restored.objects`。此设置可以是三个值：
+ **READ\$1ALL**：此值表示 Amazon EMR 不应考虑从 Amazon S3 检索的存储类。这是默认行为。
+ **SKIP\$1ALL\$1GLACIER**：此值表示 Amazon EMR 应忽略使用 Glacier 存储类标记的任何 S3 对象，并检索所有其他对象。这是 Amazon EMR 对 Glacier 对象的默认行为。
+ **READ\$1RESTORED\$1GLACIER\$1OBJECTS**：此值指示 Amazon EMR 应检查 Glacier 对象的还原状态。如果 Amazon EMR 可以还原对象，则可以像读取普通 S3 对象一样读取。否则，Amazon EMR 会忽略 Amazon Glacier 中的对象

## 示例
<a name="emr-hadoop-read-restore-objects-examples"></a>

**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>
```

## 注意事项
<a name="emr-hadoop-read-restore-objects-considerations"></a>

从 Amazon Glacier 读取还原的对象时，请注意以下事项：
+ 只有使用 `S3A` 方案或 `S3AFileSystem` 访问数据时，才能读取还原的对象。
+ 读取还原的 Glacier 对象时，Amazon EMR 不会还原对象本身。为此，必须使用 AWS CLI 或 SD AWS K。