使用「 AWS Glue 合資料目錄」做為星火 SQL 的中繼存放區 - Amazon EMR

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

使用「 AWS Glue 合資料目錄」做為星火 SQL 的中繼存放區

使用 Amazon EMR 5.8.0 版或更新版本,您可以將 Spark SQL 設定為使用 AWS Glue 資料目錄做為其中繼存放區。若您需要持久的中繼存放區或由不同叢集、服務、應用程式或 AWS 帳戶分享的中繼存放區,我們建議使用此組態。

AWS Glue 是一種全受管的擷取、轉換和載入 (ETL) 服務,可讓您輕鬆分類資料、清理資料、充實資料,以及在各種資料存放區之間可靠地移動資料,並具有成本效益。 AWS Glue 資料型錄提供跨多種資料來源和資料格式的統一中繼資料儲存庫,與 Amazon EMR 以及 Amazon RDS、Amazon Redshift、紅移頻譜、Athena,以及與 Apache Hive 中繼存放區相容的任何應用程式整合。 AWS Glue 編目器可以從 Amazon S3 中的來源資料自動推斷結構描述,並將相關的中繼資料存放在資料目錄中。如需有關資料目錄的詳細資訊,請參閱 AWS Glue 開發人員指南中的填入AWS Glue 資料型錄

AWS Glue 需另行收費。資料目錄中的中繼資料每月儲存和存取費率, AWS Glue ETL 工作和爬行者程式執行階段按小時計費,以及每個佈建的開發端點每分鐘計費的小時費率。Data Catalog 可讓您免費儲存多達一百萬個物件。如果您存放超過一百萬個物件,之後每 100,000 個物件會向您收費 1 美元。Data Catalog 中的物件是資料表、分割區或資料庫。如需詳細資訊,請參閱 Glue 定價

重要

如果您在 2017 年 8 月 14 日之前使用 Amazon Athena 或 Amazon Redshift 頻譜建立資料表,資料庫和資料表會儲存在 Athena 管理的目錄中,該目錄與 Glue 資料目錄是分開的 AWS 。若要將 Amazon EMR 與這些表格整合,您必須升級至 AWS Glue 資料型錄。如需詳細資訊,請參閱 Amazon Athena 使用者指南中的升級至 AWS Glue 資料目錄

將 AWS Glue 資料型錄指定為中繼存放區

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

注意

使用 AWS Glue 數據目錄的選項也可與齊柏林飛艇一起使用,因為齊柏林飛艇與 Spark SQL 組件一起安裝。

New console
使用新主控台將 AWS Glue 資料目錄指定為 Spark 中繼存放區
  1. 登入並開啟 Amazon EMR 主控台 AWS Management Console,網址為 https://console.aws.amazon.com/emr

  2. 在左側導覽窗格中的 EC2 上的 Amazon EMR 下,選擇叢集,然後選擇建立叢集

  3. 應用程式套件下方,選擇 Spark自訂。如果您自訂叢集,確保選取 Zeppelin 或 Spark 作為您的其中一個應用程式。

  4. AWS Glue Data Catalog 設定下方,選取用於 Spark 資料表中繼資料核取方塊。

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

  6. 若要啟動您的叢集,請選擇建立叢集

Old console
使用舊主控台將 AWS Glue 資料目錄指定為 Spark 中繼存放區
  1. 導覽至新的 Amazon EMR 主控台,然後從側邊導覽選取切換至舊主控台。如需有關切換至舊主控台時預期情況的詳細資訊,請參閱使用舊主控台

  2. 選擇 Create cluster (建立叢集),然後選擇 Go to advanced options (前往進階選項)

  3. 針對 Release (版本),選擇 emr-5.8.0 或更新版本。

  4. Release (版本) 下,選擇 SparkZeppelin

  5. AWS Glue Data Catalog 設定下方,選取用於 Spark 資料表中繼資料

  6. 選擇適用於您叢集的其他選項,選擇 Next (下一步),然後設定適合您應用程式的其他叢集選項。

AWS CLI
若要將 AWS Glue 資料型錄指定為 Spark 中繼儲存庫,請使用 AWS CLI

如需使用 AWS CLI 和 Amazon EMR API 指定組態分類的詳細資訊,請參閱設定應用程式

  • 使用以下範例中顯示的 spark-hive-site 分類來為 hive.metastore.client.factory.class 指定值:

    [ { "Classification": "spark-hive-site", "Properties": { "hive.metastore.client.factory.class": "com.amazonaws.glue.catalog.metastore.AWSGlueDataCatalogHiveClientFactory" } } ]

    若要在不同的 AWS 帳戶中指定資料目錄,請新增hive.metastore.glue.catalogid屬性,如下列範例所示。使用 Data Catalog 的 AWS 帳戶取代 acct-id

    [ { "Classification": "spark-hive-site", "Properties": { "hive.metastore.client.factory.class": "com.amazonaws.glue.catalog.metastore.AWSGlueDataCatalogHiveClientFactory", "hive.metastore.glue.catalogid": "acct-id" } } ]

IAM 許可

叢集的 EC2 執行個體設定檔必須具有 AWS Glue 動作的 IAM 許可。此外,如果您啟用 AWS Glue 資料目錄物件的加密,也必須允許角色加密、解密和產生 AWS KMS key 用於加密的資料。

AWS Glue 動作的權限

如果您將預設的 EC2 執行個體設定檔用於 Amazon EMR,就不需要採取任何動作。附加到的AmazonElasticMapReduceforEC2Role受管理策略EMR_EC2_DefaultRole允許所有必要的 AWS Glue 動作。但是,如果您指定自訂 EC2 執行個體設定檔和許可,則必須設定適當的 AWS Glue 動作。使用 AmazonElasticMapReduceforEC2Role 受管政策做為起點。如需詳細資訊,請參閱《Amazon EMR 管理指南》中的叢集 EC2 執行個體的服務角色 (EC2 執行個體設定檔)

加密和解密 AWS Glue 資料目錄的權限

您的執行個體設定檔需要許可,以便使用您的金鑰來加密和解密資料。如若下列兩個陳述式均適用,則您需要設定這些許可:

  • 您可以使用 AWS Glue 的受管理金鑰為 Glue 資料目錄物件啟用加密。 AWS

  • 您可以使用與 AWS Glue 資料型錄 AWS 帳戶 相同的叢集。

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

[ { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "kms:Decrypt", "kms:Encrypt", "kms:GenerateDataKey" ], "Resource": "arn:aws:kms:region:acct-id:key/12345678-1234-1234-1234-123456789012" } ] } ]

如需 AWS Glue 資料目錄加密的詳細資訊,請參閱 G AWS lue 開發人員指南中的加密資料目錄

資源型許可

如果您在 Amazon EMR 中搭配 Hive、Spark 或 Presto 使用 AWS Glue, AWS Glue 會支援以資源為基礎的政策來控制對資料目錄資源的存取。這些資源包含資料庫、資料表、連線和使用者定義的函數。如需詳細資訊,請參閱《AWS Glue 開發人員指南》中的 AWS Glue 資源政策

使用以資源為基礎的政策限制從 Amazon EMR 內部存取 AWS Glue 時,您在許可政策中指定的主體必須是與建立叢集時指定的 EC2 執行個體設定檔相關聯的角色 ARN。例如,對於附加至目錄的以資源為基礎的政策,您可以使用以下範例所示的格式指定叢集 EC2 執行個體的預設服務角色 ARNPrincipalEMR_EC2_ DefaultRole 做為:

arn:aws:iam::acct-id:role/EMR_EC2_DefaultRole

帳戶識別碼可以與 AWS Glue 帳戶 ID 不同。這可讓您從不同帳戶中的 EMR 叢集進行存取。您可以指定多個主體,每個主體都來自不同的帳戶。

使用 AWS Glue Data Catalog 時的考量

使用 AWS Glue 資料目錄做為 Spark 的中繼存放區時,請考慮下列項目:

  • 擁有預設資料庫,無需在建立表格時會導致的位置 URI。為了解決此問題,當您使用 LOCATION 時,請使用 s3://EXAMPLE-DOC-BUCKET 條款來指定儲存貯體的位置 (例如 CREATE TABLE)。或者建立預設資料庫以外之資料庫內的表格。

  • 不支援從 AWS Glue 中重新命名資料表。

  • 當您建立 Hive 資料表而未指定 LOCATION 時,資料表資料將儲存在 hive.metastore.warehouse.dir 屬性指定的位置。依預設,該位置在 HDFS 中。如果另一個叢集需要存取該資料表,除非它對建立資料表的叢集具有足夠的許可,否則存取將會失敗。此外,由於 HDFS 儲存是暫時性的,若叢集終止,資料表資料將會丟失,還必須重新建立資料表。我們建議您LOCATION在使用 AWS Glue 建立 Hive 資料表時,在 Amazon S3 中指定。或者,您可以使用 hive-site 組態分類在 Amazon S3 中指定 hive.metastore.warehouse.dir 的位置,該位置將套用到全部 Hive 資料表。如果表格是在 HDFS 位置建立的,而建立該表格的叢集仍在執行中,您可以從 AWS Glue 內將表格位置更新至 Amazon S3。如需詳細資訊,請參閱 Glue 開發人員指南中的在 AWS Glu AWS e 主控台上使用表格

  • 不支援包含引號和撇號的分割區值,例如,PARTITION (owner="Doe's").

  • emr-5.31.0 及更高版本不支援資料欄統計資料

  • 不支援使用 Hive 授權。或者,您可以考慮使用 AWS Glue 資源型政策。如需詳細資訊,請參閱針對 Amazon EMR 存取 AWS Glue 資料型錄使用以資源為基礎的政策