使用 AWS Glue Data Catalog 作為 Hive 的中繼存放區 - Amazon EMR

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

使用 AWS Glue Data Catalog 作為 Hive 的中繼存放區

您可以使用 Amazon 5.8EMR.0 版或更新版本,將 Hive 設定為使用 AWS Glue Data Catalog 作為其中繼存放區。若您需要持久的中繼存放區或由不同叢集、服務、應用程式或 AWS 帳戶分享的中繼存放區,我們建議使用此組態。

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

AWS Glue 會另外收費。資料目錄中儲存和存取中繼資料的月費率、 AWS Glue ETL任務和爬蟲程式執行期每分鐘計費的小時費率,以及每個佈建開發端點每分鐘計費的小時費率。Data Catalog 可讓您免費儲存多達一百萬個物件。如果您存放超過一百萬個物件,則每 100,000 個物件超過一百萬個,就需要支付 1 USD美元的費用。Data Catalog 中的物件是資料表、分割區或資料庫。如需詳細資訊,請參閱 Glue 定價

重要

如果您在 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

將 AWS Glue Data Catalog 指定為中繼存放區

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

Console
使用主控台將 AWS Glue Data Catalog 指定為 Hive 中繼存放區
  1. 登入 AWS Management Console,然後在 https://console.aws.amazon.com/emr 開啟 Amazon EMR主控台。

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

  3. 應用程式套件 下,選擇 Core Hadoop HBaseCustom 。如果您自訂叢集,請務必選取 Hive 或 HCatalog作為其中一個應用程式。

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

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

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

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

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

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

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

    在 EMR 5.28.0、5.28.1、5.29.0 或 6.x 版上,如果您使用 AWS Glue Data Catalog 作為中繼存放區建立叢集,請將 hive.metastore.schema.verification 設定為 false。這可防止 Hive 和 HCatalog 對 My 驗證中繼存放區結構描述SQL。如果沒有此組態,主要執行個體群組會在 Hive 或 上重新設定後暫停HCatalog。

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

    如果您在 EMR 5.28.0、5.28.1 或 5.29.0 版上已有叢集,您可以使用hive.metastore.schema.verificationfalse下列資訊將主要執行個體群組設定為 :

    Classification = hive-site Property = hive.metastore.schema.verification Value = false

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

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

IAM 許可

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

AWS Glue 動作的許可

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

加密和解密 AWS Glue Data Catalog 的許可

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

  • 您可以使用 AWS Glue 的受管金鑰啟用 AWS Glue Data Catalog 物件的加密。

  • 您可以使用與 AWS Glue Data Catalog 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 Data Catalog 加密的詳細資訊,請參閱 AWS Glue 開發人員指南 中的加密您的資料目錄

資源型許可

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

使用資源型政策限制從 Amazon 內存取 AWS Glue 時EMR,您在許可政策中指定的主體必須是與建立叢集時指定的EC2執行個體設定檔ARN相關聯的角色。例如,對於連接至目錄的資源型政策,您可以為叢集EC2執行個體ARN的預設服務角色指定角色,EMR_EC2_DefaultRole 作為 Principal,使用下列範例中顯示的格式:

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

所以此 acct-id 可能與 AWS Glue 帳戶 ID 不同。這可啟用從不同帳戶中的EMR叢集存取。您可以指定多個主體,每個主體都來自不同的帳戶。

使用 AWS Glue Data Catalog 時的考量

使用 AWS Glue Data Catalog 作為 Hive 的中繼存放區時,請考慮下列項目:

  • 不支援JARs使用 Hive shell 新增輔助。作為解決方法,請使用hive-site組態分類來設定 hive.aux.jars.path 屬性,這會JARs將輔助新增至 Hive 類別路徑。

  • 不支援 Hive 交易

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

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

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

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

  • 不支援使用 Hive 授權。或者,您可以考慮使用 AWS Glue 資源型政策。如需詳細資訊,請參閱使用資源型政策進行 Amazon EMR Access to AWS Glue Data Catalog

  • 不支援 Hive 限制條件

  • 不支援 Hive 中的成本型優化

  • 不支援設定 hive.metastore.partition.inherit.table.properties

  • 不支援使用下列中繼存放區常數:BUCKET_COUNT, BUCKET_FIELD_NAME, DDL_TIME, FIELD_TO_DIMENSION, FILE_INPUT_FORMAT, FILE_OUTPUT_FORMAT, HIVE_FILTER_FIELD_LAST_ACCESS, HIVE_FILTER_FIELD_OWNER, HIVE_FILTER_FIELD_PARAMS, IS_ARCHIVED, META_TABLE_COLUMNS, META_TABLE_COLUMN_TYPES, META_TABLE_DB, META_TABLE_LOCATION, META_TABLE_NAME, META_TABLE_PARTITION_COLUMNS, META_TABLE_SERDE, META_TABLE_STORAGE, ORIGINAL_LOCATION

  • 當您使用述詞表達式時,明確值必須在比較運算子的右側,否則查詢可能失敗。

    • 正確SELECT * FROM mytable WHERE time > 11

    • 不正確SELECT * FROM mytable WHERE 11 > time

  • Amazon 5.32.0 和 6.3.0 版及更新EMR版本支援在述詞運算式中使用使用者定義的函數 (UDFs)。使用早期版本時,由於 Hive 嘗試優化查詢執行的方式,您的查詢可能會失敗。

  • 不支援暫時資料表

  • 我們建議您透過 Amazon 使用應用程式建立資料表,EMR而不是直接使用 AWS Glue 建立資料表。透過 AWS Glue 建立資料表可能會導致必要欄位遺失,並導致查詢例外狀況。

  • 在 EMR 5.20.0 或更新版本中,當 AWS Glue Data Catalog 用作中繼存放區時,Spark 和 Hive 會自動啟用平行分割區刪除。這項變更會平行執行多個請求來擷取分割區,從而大幅縮短查詢規劃時間。可同時執行的區段總數範圍介於 1 到 10 之間。預設值為 5,此為建議設定。您可以在 hive-site 組態分類中指定屬性 aws.glue.partition.num.segments 加以變更。如果發生限流,您可以透過將值變更為 1 以關閉該功能。如需詳細資訊,請參閱 AWS Glue 區段結構