

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

# Presto on Amazon EMR 注意事项
<a name="emr-presto-considerations"></a>

运行 [Presto](https://aws.amazon.com/big-data/what-is-presto/) on Amazon EMR 时应注意以下限制。

## Presto 命令行可执行文件
<a name="emr-presto-command-line-cli"></a>

在 Amazon EMR 中，PrestoDB 和 Trino 均使用相同的命令行可执行文件 `presto-cli`，如以下示例所示。

```
presto-cli --catalog hive
```

## 不可配置的 Presto 部署属性
<a name="emr-presto-deployment-config"></a>

您使用的 Amazon EMR 版本决定了可用的 Presto 部署配置。有关这些配置属性的更多信息，请参阅 Presto 文档中的 [部署 Presto](https://prestodb.io/docs/current/installation/deployment.html)。下表显示了 Presto `properties` 文件的不同配置选项。


| 文件 | 可配置 | 
| --- | --- | 
|  `log.properties`  |  PrestoDB：在 Amazon EMR 版本 4.0.0 及更高版本中可配置。使用 `presto-log` 配置分类。  | 
|  `config.properties`  |  PrestoDB：在 Amazon EMR 版本 4.0.0 及更高版本中可配置。使用 `presto-config` 配置分类。  | 
|  `hive.properties`  |  PrestoDB：在 Amazon EMR 版本 4.1.0 及更高版本中可配置。使用 `presto-connector-hive` 配置分类。  | 
|  `node.properties`  |  PrestoDB：在 Amazon EMR 版本 5.6.0 及更高版本中可配置。使用 `presto-node` 配置分类。  | 
|  `jvm.config`  |  不可配置。  | 

## PrestoDB 安装
<a name="emr-prestodb-prestosql"></a>

继续使用应用程序名称 *Presto* 在集群上安装 PrestoDB。

您可以安装 PrestoDB 或 Trino，但不能在同一个集群上同时安装两者。如果在尝试创建集群时同时指定了 PrestoDB 和 Trino，则会出现验证错误，并且集群创建请求将会失败。

## EMRFS 和 PrestoS3 配置 FileSystem
<a name="emr-presto-prestos3"></a>

使用 Amazon EMR 版本 5.12.0 及更高版本时，PrestoDB 可以使用 EMRFS。有关更多信息，请参阅*《Amazon EMR 管理指南》*中的[使用 EMR 文件系统（EMRFS）](https://docs.aws.amazon.com/emr/latest/ReleaseGuide/emr-fs)。在早期版本的 Amazon EMR 中，PrestoS3 FileSystem 是唯一的配置选项。

您可以使用安全配置为 Amazon S3 中的 EMRFS 数据设置加密。您还可以使用 IAM 角色处理 EMRFS 对 Amazon S3 的请求。有关更多信息，请参阅《Amazon EMR 管理指南》**中的[了解加密选项](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-data-encryption-options.html)和[为处理 EMRFS 对 Amazon S3 的请求配置 IAM 角色](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-emrfs-iam-roles.html)。

**注意**  
如果您使用 Amazon EMR 版本 5.12.0 查询 Amazon S3 中的底层数据，则可能会出现 Presto 错误。这是因为 Presto 无法从 `emrfs-site.xml` 提取配置分类值。解决方法是在 `usr/lib/presto/plugin/hive-hadoop2/` 下创建一个 `emrfs` 子目录，并在 `usr/lib/presto/plugin/hive-hadoop2/emrfs` 中创建一个指向现有 `/usr/share/aws/emr/emrfs/conf/emrfs-site.xml` 文件的符号链接。然后重新启动 presto-server 进程（首先执行 `sudo presto-server stop`，然后执行 `sudo presto-server start`）。

你可以覆盖 EMRFS 的默认值，改用 Pre FileSystem stoS3。为此，请使用 `presto-connector-hive` 配置分类将 `hive.s3-file-system-type` 设置为 `PRESTO`，如以下示例所示。有关更多信息，请参阅 [配置应用程序](emr-configure-apps.md)。

```
[
   {
      "Classification": "presto-connector-hive",
      "Properties": {
         "hive.s3-file-system-type": "PRESTO"
      }
   }
]
```

如果您使用 PrestoS3FileSystem，请使用`presto-connector-hive`配置分类来配置 Pre FileSystem stoS3 属性。有关可用属性的更多信息，请参阅 Presto 文档中“Hive 连接器”部分的 [Amazon S3 配置](https://prestodb.io/docs/current/connector/hive.html#amazon-s3-configuration)。这些设置不适用于 EMRFS。

## 终端用户模拟的默认设置
<a name="emr-presto-end-user-impersonation"></a>

默认情况下，Amazon EMR 版本 5.12.0 及更高版本支持通过终端用户模拟来访问 HDFS。有关更多信息，请参阅 Presto 文档中的[终端用户模拟](https://prestodb.io/docs/current/connector/hive-security.html#end-user-impersonation)。要使用 `presto-config` 配置分类更改此设置，请将 `hive.hdfs.impersonation.enabled` 属性设置为 `false`。

## Presto Web 界面的默认端口
<a name="emr-presto-default-web-port"></a>

默认情况下，Amazon EMR 将 Presto 协调器上的 Presto Web 界面配置为使用端口 8889（针对 PrestoDB 和 Trino）。要更改端口，请使用 `presto-config` 配置分类设置 `http-server.http.port` 属性。有关更多信息，请参阅 Presto 文档的*部署 Presto* 部分中的[配置属性](https://prestodb.io/docs/current/installation/deployment.html#config-properties)。

## 某些版本中的 Hive 存储桶执行问题
<a name="emr-presto-bucket-execution"></a>

Presto 发行版 152.3 存在一个与 Hive 存储桶执行有关的问题，此问题在某些情况下可能会显著降低 Presto 的查询性能。Amazon EMR 版本 5.0.3、5.1.0 和 5.2.0 包含此版本的 Presto。要解决此问题，请使用 `presto-connector-hive` 配置分类将 `hive.bucket-execution` 属性设置为 `false`，如以下示例所示。

```
[
   {
      "Classification": "presto-connector-hive",
      "Properties": {
         "hive.bucket-execution": "false"
      }
   }
]
```