

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 搭配 Glue Data Catalog AWS 使用 Presto
<a name="emr-presto-glue"></a>

使用 Amazon EMR 發行版本 5.10.0 及更新版本，您可以將 AWS Glue Data Catalog 指定為 Presto 的預設 Hive 中繼存放區。若您需要持久的中繼存放區或由不同叢集、服務、應用程式或 AWS 帳戶帳戶共用的中繼存放區，建議使用此組態。

AWS Glue 是一種全受管的擷取、轉換和載入 (ETL) 服務，可讓您以簡單且經濟實惠的方式分類資料、清理資料、擴充資料，並在各種資料存放區之間可靠地移動資料。 AWS Glue Data Catalog 提供跨各種資料來源和資料格式的統一中繼資料儲存庫，與 Amazon EMR 以及 Amazon RDS、Amazon Redshift、Redshift Spectrum、Athena 以及與 Apache Hive 中繼存放區相容的任何應用程式整合。 AWS Glue 爬蟲程式可以從 Amazon S3 中的來源資料自動推斷結構描述，並將相關聯的中繼資料存放在 Data Catalog 中。如需 Data Catalog 的詳細資訊，請參閱《[Glue AWS 開發人員指南》中的填入 Glue Data Catalog](https://docs.aws.amazon.com/glue/latest/dg/populate-data-catalog.html)。 *AWS *

Glue AWS 會另外收費。儲存和存取 Data Catalog 中中繼資料的每月費率、Glue ETL AWS 任務和爬蟲程式執行時間每分鐘計費的每小時費率，以及每個佈建開發端點每分鐘計費的每小時費率。Data Catalog 可讓您免費儲存多達一百萬個物件。如果您存放超過一百萬個物件，之後每 100,000 個物件會向您收費 1 美元。Data Catalog 中的物件是資料表、分割區或資料庫。如需詳細資訊，請參閱 [Glue 定價](https://aws.amazon.com/glue/pricing)。

**重要**  
如果您在 2017 年 8 月 14 日之前使用 Amazon Athena 或 Amazon Redshift Spectrum 建立資料表，資料庫和資料表會存放在 Athena 受管目錄中，這與 AWS Glue Data Catalog 不同。若要將 Amazon EMR 與這些資料表整合，您必須升級至 AWS Glue Data Catalog。如需詳細資訊，請參閱《*Amazon Athena 使用者指南*》中的[升級至 AWS Glue Data Catalog](https://docs.aws.amazon.com/athena/latest/ug/glue-upgrade.html)。

## 將 AWS Glue Data Catalog 指定為中繼存放區
<a name="emr-presto-glue-configure"></a>

您可以使用 AWS AWS 管理主控台 AWS CLI或 Amazon EMR API，將 Glue Data Catalog 指定為中繼存放區。當使用 CLI 或 API 時，您要使用 Presto 的組態分類來指定 Data Catalog。此外，使用 Amazon EMR 5.16.0 及更新版本時，您可以使用組態分類在不同的 中指定資料目錄 AWS 帳戶。在使用主控台時，您可以透過**進階選項**或**快速選項**指定 Data Catalog。

------
#### [ Console ]

**使用新主控台將 AWS Glue Data Catalog 指定為 Hive 中繼存放區**

1. 登入 AWS 管理主控台，並在 https：//[https://console.aws.amazon.com/emr](https://console.aws.amazon.com/emr) 開啟 Amazon EMR 主控台。

1. 在左側導覽窗格中的 **EC2 上的 EMR** 下方，選擇**叢集**，然後選擇**建立叢集**。

1. 在**應用程式套件**下方，選擇 **Presto**。

1. 在 **AWS Glue Data Catalog 設定**下方，選取**用於 Presto 資料表中繼資料**核取方塊。

1. 選擇適用於您的叢集的任何其他選項。

1. 若要啟動您的叢集，請選擇**建立叢集**。

------
#### [ CLI ]

**使用 將 AWS Glue Data Catalog 指定為預設 Hive 中繼存放區 AWS CLI**

如需了解在建立叢集時指定以下組態分類的範例，請參閱 [設定應用程式](emr-configure-apps.md)。

**Amazon EMR 5.16.0 版及更高版本**
+ 將 `hive.metastore` 屬性設定為 `glue`，如以下 JSON 範例中所示。

  ```
  [
    {
      "Classification": "presto-connector-hive",
      "Properties": {
        "hive.metastore": "glue"
      }
    }
  ]
  ```

  若要在不同的 中指定 Data Catalog AWS 帳戶，請新增 `hive.metastore.glue.catalogid` 屬性，如下列 JSON 範例所示。使用 Data Catalog 的 AWS 帳戶取代 `{{acct-id}}`。使用 Amazon EMR 版本 5.15.0 和更高版本時，無法在另一個 AWS 帳戶 中使用 Data Catalog。

  ```
  [
    {
      "Classification": "presto-connector-hive",
      "Properties": {
        "hive.metastore": "glue",
        "hive.metastore.glue.catalogid": "{{acct-id}}"
      }
    }
  ]
  ```

  **Amazon EMR 5.10.0 到 5.15.0**

  將 `hive.metastore.glue.datacatalog.enabled` 屬性設定為 `true`，如以下 JSON 範例中所示：

  ```
  [
    {
      "Classification": "presto-connector-hive",
      "Properties": {
        "hive.metastore.glue.datacatalog.enabled": "true"
      }
    }
  ]
  ```

  **使用 PrestoSQL (Trino) 的 Amazon EMR 6.1.0 及更高版本**

  從 EMR 版本 6.1.0 開始，PrestoSQL 也支援 Glue 作為預設的 Hive 中繼存放區。使用 `prestosql-connector-hive` 組態分類並且將 `hive.metastore` 屬性設定為 `glue`，如以下 JSON 範例所示。

  Amazon EMR 版本 6.4.0 及更高版本使用新名稱 Trino，而非 PrestoSQL。如果您使用 Trino，請使用 `trino-connector-hive` 取代以下組態分類中的 `{{prestosql-connector-hive}}`。

  ```
  [
    {
      "Classification": "{{prestosql-connector-hive}}",
      "Properties": {
        "hive.metastore": "glue"
      }
    }
  ]
  ```

若要在長期執行的叢集上切換中繼存放區，您可以透過手動方式，首先連線到主節點，接著在 `/etc/presto/conf/catalog/hive.properties` 檔案中直接編輯屬性值，然後重新啟動 Presto 伺服器 (`sudo restart presto-server`)，再來就是為您的發行版本設定適合的值。如果是在 Amazon EMR 5.15.0 和更早版本使用此方法，請確定 `hive.table-statistics-enabled` 已設為 `false`。當使用發行版本為 5.16.0 及更新版本時，這個設定不是必要設定；但無論使用哪種版本，都不支援表格和分割區統計資訊。

------

## IAM 許可
<a name="emr-hive-glue-permissions"></a>

叢集的 EC2 執行個體描述檔必須具有 Glue 動作的 IAM AWS 許可。此外，如果您啟用 AWS Glue Data Catalog 物件的加密，也必須允許該角色加密、解密和產生 AWS KMS key 用於加密的 。

### Glue AWS 動作的許可
<a name="emr-hive-glue-permissions-actions"></a>

如果您將預設的 EC2 執行個體設定檔用於 Amazon EMR，就不需要採取任何動作。連接到 的 `AmazonElasticMapReduceforEC2Role`受管政策`EMR_EC2_DefaultRole`允許所有必要 AWS 的 Glue 動作。不過，如果您指定自訂 EC2 執行個體描述檔和許可，則必須設定適當的 AWS Glue 動作。使用 `AmazonElasticMapReduceforEC2Role` 受管政策做為起點。如需詳細資訊，請參閱《Amazon EMR 管理指南》**中的[叢集 EC2 執行個體的服務角色 (EC2 執行個體設定檔)](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-iam-role-for-ec2.html)。

### 加密和解密 Glue Data Catalog AWS 的許可
<a name="emr-hive-glue-permissions-encrypt"></a>

您的執行個體設定檔需要許可，以便使用您的金鑰來加密和解密資料。如若下列兩個陳述式均適用，則您*不*需要設定這些許可：
+ 您可以使用 Glue AWS 的受管金鑰啟用 AWS Glue Data Catalog 物件的加密。
+ 您可以使用與 Glue Data Catalog AWS AWS 帳戶 位於相同 中的叢集。

否則，您必須新增以下陳述式至附接至您的 EC2 執行個體設定檔的許可政策。

如需 AWS Glue Data Catalog 加密的詳細資訊，請參閱《*AWS Glue 開發人員指南*》中的[加密您的資料目錄](https://docs.aws.amazon.com/glue/latest/dg/encrypt-glue-data-catalog.html)。

### 資源型許可
<a name="emr-hive-glue-permissions-resource"></a>

如果您在 AWS Amazon EMR 中使用 Glue 搭配 Hive、Spark 或 Presto， AWS Glue 支援以資源為基礎的政策來控制對 Data Catalog 資源的存取。這些資源包含資料庫、資料表、連線和使用者定義的函數。如需詳細資訊，請參閱《AWS Glue 開發人員指南》**中的 [AWS Glue 資源政策](https://docs.aws.amazon.com/glue/latest/dg/glue-resource-policies.html)。

使用資源型政策限制從 AWS Amazon EMR 內存取 Glue 時，您在許可政策中指定的委託人必須是與建立叢集時指定的 EC2 執行個體描述檔相關聯的角色 ARN。例如，對於附接至型錄的資源型政策，您可以使用下列範例所示的格式，將叢集 EC2 執行個體的預設服務角色的角色 ARN ({{EMR\_EC2\_DefaultRole}}) 指定為 `Principal`：

```
arn:aws:iam::{{acct-id}}:role/{{EMR_EC2_DefaultRole}}
```

{{acct-id}} 可以與 Glue AWS 帳戶 ID 不同。這可讓您從不同帳戶中的 EMR 叢集進行存取。您可以指定多個主體，每個主體都來自不同的帳戶。

## 使用 Glue Data Catalog AWS 時的考量事項
<a name="emr-presto-glue-knownissues"></a>

使用 AWS Glue Data Catalog 做為具有 Presto 的中繼存放區時，請考慮下列項目：
+ 不支援從 Glue AWS 中重新命名資料表。
+ 當您建立 Hive 資料表而未指定 `LOCATION` 時，資料表資料將儲存在 `hive.metastore.warehouse.dir` 屬性指定的位置。依預設，該位置在 HDFS 中。如果另一個叢集需要存取該資料表，除非它對建立資料表的叢集具有足夠的許可，否則存取將會失敗。此外，由於 HDFS 儲存是暫時性的，若叢集終止，資料表資料將會丟失，還必須重新建立資料表。當您使用 Glue 建立 Hive 資料表時，建議您在 Amazon S3 AWS `LOCATION`中指定 。或者，您可以使用 `hive-site` 組態分類在 Amazon S3 中指定 `hive.metastore.warehouse.dir` 的位置，該位置將套用到全部 Hive 資料表。如果在 HDFS 位置建立資料表，且建立資料表的叢集仍在執行中，您可以從 Glue 內將資料表位置更新為 AWS Amazon S3。如需詳細資訊，請參閱《[Glue AWS 開發人員指南》中的在 Glue 主控台上使用資料表](https://docs.aws.amazon.com/glue/latest/dg/console-tables.html)。 *AWS *
+ 不支援包含引號和撇號的分割區值，例如，`PARTITION (owner="Doe's").`
+ emr-5.31.0 及更高版本不支援[資料欄統計資料](https://cwiki.apache.org/confluence/display/Hive/StatsDev#StatsDev-ColumnStatistics)。
+ 不支援使用 [Hive 授權](https://cwiki.apache.org/confluence/display/Hive/LanguageManual+Authorization)。或者，您可以考慮使用 [AWS Glue 資源型政策](https://docs.aws.amazon.com/glue/latest/dg/glue-resource-policies.html)。如需詳細資訊，請參閱[使用資源型政策來存取 AWS Glue Data Catalog](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-iam-roles-glue.html)。