執行 EMR Serverless 任務時使用 Hive 組態 - Amazon EMR

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

執行 EMR Serverless 任務時使用 Hive 組態

您可以在 type 參數設定為 的應用程式上執行 Hive 任務HIVE。任務必須與與 Amazon EMR 發行版本相容的 Hive 版本相容。例如,當您在具有 Amazon EMR 6.6.0 版的應用程式上執行任務時,您的任務必須與 Apache Hive 3.1.2 相容。如需每個版本的應用程式版本資訊,請參閱Amazon EMR Serverless 發行版本

Hive 任務參數

當您使用 StartJobRun API 執行 Hive 任務時,您必須指定下列參數。

Hive 任務執行時間角色

使用 executionRoleArn指定應用程式用來執行 Hive 任務之 IAM 角色的 ARN。此角色必須包含下列許可:

  • 從 S3 儲存貯體或資料所在的其他資料來源讀取

  • 從 Hive 查詢檔案和 init 查詢檔案所在的 S3 儲存貯體或字首讀取

  • 讀取和寫入您的 Hive Scratch 目錄和 Hive Metastore 倉儲目錄所在的 S3 儲存貯體

  • 寫入您打算寫入最終輸出的 S3 儲存貯體

  • 將日誌寫入S3MonitoringConfiguration指定 的 S3 儲存貯體或字首

  • 如果您使用 KMS 金鑰來加密 S3 儲存貯體中的資料,則存取 KMS 金鑰

  • 存取 AWS Glue Data Catalog

如果您的 Hive 任務讀取或寫入來自其他資料來源的資料,請在此 IAM 角色中指定適當的許可。如果您未將這些許可提供給 IAM 角色,您的任務可能會失敗。如需詳細資訊,請參閱Amazon EMR Serverless 的任務執行期角色

Hive 任務驅動程式參數

使用 jobDriver為任務提供輸入。任務驅動程式參數只接受您要執行之任務類型的一個值。當您指定 hive做為任務類型時,EMR Serverless 會將 Hive 查詢傳遞至 jobDriver 參數。Hive 任務具有下列參數:

  • query – 這是 Amazon S3 中您要執行之 Hive 查詢檔案的參考。

  • parameters – 這些是您要覆寫的其他 Hive 組態屬性。若要覆寫屬性,請將它們以 的形式傳遞至此參數--hiveconf property=value。若要覆寫變數,請將它們以 的形式傳遞至此參數--hivevar key=value

  • initQueryFile – 這是 init Hive 查詢檔案。Hive 會在您的查詢之前執行此檔案,並且可以使用它來初始化資料表。

Hive 組態覆寫參數

使用 configurationOverrides覆寫監控層級和應用程式層級組態屬性。此參數接受具有下列兩個欄位的 JSON 物件:

  • monitoringConfiguration – 使用此欄位指定您希望 EMR Serverless 任務存放 Hive 任務日誌的 Amazon S3 URL (s3MonitoringConfiguration)。請確定您建立此儲存貯體時,與 AWS 帳戶 託管您應用程式的儲存貯體相同,且與您執行任務 AWS 區域 的儲存貯體相同。

  • applicationConfiguration – 您可以在此欄位中提供組態物件,以覆寫應用程式的預設組態。可以使用速記語法,以提供組態或參考 JSON 檔案中物件的組態。組態物件是由分類、屬性和選用的巢狀組態所組成。屬性由您想要在檔案中覆寫的設定組成。您可以在單一 JSON 物件中,為多個應用程式指定多個分類。

    注意

    可用的組態分類因特定 EMR Serverless 版本而異。例如,自訂 Log4j spark-driver-log4j2和 的分類spark-executor-log4j2僅適用於 6.8.0 版和更新版本。

如果您在應用程式覆寫和 Hive 參數中傳遞相同的組態,Hive 參數會優先。下列清單會將組態從最高優先順序排名為最低優先順序。

  • 您使用 作為 Hive 參數一部分提供的組態--hiveconf property=value

  • 當您啟動任務時,您作為應用程式一部分提供的組態會覆寫 。

  • 您在建立應用程式runtimeConfiguration時作為 的一部分提供的組態。

  • Amazon EMR 為版本指派的最佳化組態。

  • 應用程式的預設開放原始碼組態。

如需在應用程式層級宣告組態,以及在任務執行期間覆寫組態的詳細資訊,請參閱EMR Serverless 的預設應用程式組態

Hive 任務屬性

下表列出您在提交 Hive 任務時必須設定的強制性屬性。

設定 描述
hive.exec.scratchdir EMR Serverless 在 Hive 任務執行期間建立暫存檔案的 Amazon S3 位置。
hive.metastore.warehouse.dir Hive 中受管資料表資料庫的 Amazon S3 位置。

下表列出選用的 Hive 屬性及其預設值,您可以在提交 Hive 任務時覆寫這些屬性。

設定 描述 預設值
fs.s3.customAWSCredentialsProvider 您要使用的 AWS 登入資料提供者。 com.amazonaws.auth.DefaultAWSCredentialsProviderChain
fs.s3a.aws.credentials.provider 您要搭配 S3A 檔案系統使用的 AWS 登入資料提供者。 com.amazonaws.auth.DefaultAWSCredentialsProviderChain
hive.auto.convert.join 根據輸入檔案大小,開啟常見聯結自動轉換為 mapjoin 的選項。 TRUE
hive.auto.convert.join.noconditionaltask 當 Hive 根據輸入檔案大小將常見聯結轉換為映射聯結時開啟最佳化的選項。 TRUE
hive.auto.convert.join.noconditionaltask.size 聯結會直接轉換為低於此大小的映射聯結。 根據 Tez 任務記憶體計算最佳值
hive.cbo.enable 使用 Calcite 架構開啟成本型最佳化的選項。 TRUE
hive.cli.tez.session.async 在 Hive 查詢編譯時啟動背景 Tez 工作階段的選項。設定為 時false,Tez AM 會在 Hive 查詢編譯之後啟動。 TRUE
hive.compute.query.using.stats 啟用 Hive 以使用中繼存放區中存放的統計資料回答特定查詢的選項。針對基本統計資料,請將 hive.stats.autogather設為 TRUE。如需更進階的查詢集合,請執行 analyze table queries TRUE
hive.default.fileformat CREATE TABLE 陳述式的預設檔案格式。如果您在CREATE TABLE命令STORED AS [FORMAT]中指定 ,您可以明確覆寫此項目。 TEXTFILE
hive.driver.cores 用於 Hive 驅動程式程序的核心數目。 2
hive.driver.disk Hive 驅動程式的磁碟大小。 20G
hive.driver.disk.type Hive 驅動程式的磁碟類型。 標準
hive.tez.disk.type tez 工作者的磁碟大小。 標準
hive.driver.memory 每個 Hive 驅動程式程序要使用的記憶體量。Hive CLI 和 Tez Application Master 會與 20% 的頂部空間平均共用此記憶體。 6G
hive.emr-serverless.launch.env.[KEY] 在所有 Hive 特定程序中設定KEY環境變數的選項,例如 Hive 驅動程式、Tez AM 和 Tez 任務。
hive.exec.dynamic.partition 在 DML/DDL 中開啟動態分割區的選項。 TRUE
hive.exec.dynamic.partition.mode 指定您要使用嚴格模式或非嚴格模式的選項。在嚴格模式下,您必須指定至少一個靜態分割區,以防意外覆寫所有分割區。在非嚴格模式中,所有分割區都允許為動態。 strict
hive.exec.max.dynamic.partitions Hive 建立的動態分割區總數上限。 1000
hive.exec.max.dynamic.partitions.pernode Hive 在每個映射器和減少器節點中建立的動態分割區數量上限。 100
hive.exec.orc.split.strategy 預期下列其中一個值:BIETLHYBRID。這不是使用者層級組態。 BI 指定您想要花較少的時間在分割產生中,而不是查詢執行。 ETL 指定您想要花更多的時間在分割產生中。 HYBRID 指定根據啟發式選擇上述策略。 HYBRID
hive.exec.reducers.bytes.per.reducer 每個縮減器的大小。預設值為 256 MB。如果輸入大小為 1G,任務會使用 4 個減少程式。 256000000
hive.exec.reducers.max 減少程式的數量上限。 256
hive.exec.stagingdir 存放 Hive 在資料表位置和 hive.exec.scratchdir 屬性中指定的暫存目錄位置內建立之暫存檔案的目錄名稱。 .hive-staging
hive.fetch.task.conversion 預期下列其中一個值:NONEMINIMALMORE。Hive 可以將選取的查詢轉換為單一FETCH任務。這可將延遲降至最低。 MORE
hive.groupby.position.alias 讓 Hive 在GROUP BY陳述式中使用資料欄位置別名的選項。 FALSE
hive.input.format 預設輸入格式。HiveInputFormat 如果您遇到 問題,請將 設定為 CombineHiveInputFormat org.apache.hadoop.hive.ql.io.CombineHiveInputFormat
hive.log.explain.output 開啟 Hive 日誌中任何查詢延伸輸出說明的選項。 FALSE
hive.log.level Hive 記錄層級。 INFO
hive.mapred.reduce.tasks.speculative.execution 開啟精簡器投機啟動的選項。僅支援 Amazon EMR 6.10.x 及更低版本。 TRUE
hive.max-task-containers 並行容器的數量上限。設定的映射器記憶體會乘以此值,以判斷可分割運算和任務先佔使用的可用記憶體。 1000
hive.merge.mapfiles 選項,會導致小型檔案在僅映射任務結束時合併。 TRUE
hive.merge.size.per.task 任務結束時合併檔案的大小。 256000000
hive.merge.tezfiles 在 Tez DAG 結束時開啟小型檔案合併的選項。 FALSE
hive.metastore.client.factory.class 產生實作IMetaStoreClient介面之物件的原廠類別名稱。 com.amazonaws.glue.catalog.metastore.AWSGlueDataCatalogHiveClientFactory
hive.metastore.glue.catalogid 如果 AWS Glue Data Catalog 充當中繼存放區,但在與任務不同的 AWS 帳戶 中執行,則為任務執行 AWS 帳戶 所在 的 ID。 NULL
hive.metastore.uris 中繼存放區用戶端用來連線至遠端中繼存放區的 thrift URI。 NULL
hive.optimize.ppd 開啟述詞下推的選項。 TRUE
hive.optimize.ppd.storage 開啟述詞下推至儲存處理器的選項。 TRUE
hive.orderby.position.alias 讓 Hive 在ORDER BY陳述式中使用資料欄位置別名的選項。 TRUE
hive.prewarm.enabled 開啟 Tez 容器預熱的選項。 FALSE
hive.prewarm.numcontainers 要為 Tez 預熱的容器數量。 10
hive.stats.autogather INSERT OVERWRITE命令期間,讓 Hive 自動收集基本統計資料的選項。 TRUE
hive.stats.fetch.column.stats 關閉從中繼存放區擷取資料欄統計資料的選項。當資料欄數量高時,擷取資料欄統計資料可能很昂貴。 FALSE
hive.stats.gather.num.threads partialscannoscan分析命令用於分割資料表的執行緒數量。這僅適用於實作的檔案格式 StatsProvidingRecordReader(例如 ORC)。 10
hive.strict.checks.cartesian.product 開啟嚴格卡氏聯結檢查的選項。這些檢查不允許卡氏產品 (交叉聯結)。 FALSE
hive.strict.checks.type.safety 開啟嚴格類型安全檢查並關閉 bigintstring和 比較的選項double TRUE
hive.support.quoted.identifiers 預期值為 NONECOLUMNNONE 表示只有英數字元和底線字元在識別符中有效。 COLUMN 表示資料欄名稱可以包含任何字元。 COLUMN
hive.tez.auto.reducer.parallelism 開啟 Tez 自動減少程式平行處理功能的選項。Hive 仍會估計資料大小並設定平行處理估計值。Tez 會取樣來源頂點的輸出大小,並視需要在執行時間調整預估值。 TRUE
hive.tez.container.size 每個 Tez 任務程序要使用的記憶體量。 6144
hive.tez.cpu.vcores 要用於每個 Tez 任務的核心數量。 2
hive.tez.disk.size 每個任務容器的磁碟大小。 20G
hive.tez.input.format 在 Tez AM 中產生分割的輸入格式。 org.apache.hadoop.hive.ql.io.HiveInputFormat
hive.tez.min.partition.factor 當您開啟自動減少器平行處理時,Tez 指定的減少器下限。 0.25
hive.vectorized.execution.enabled 開啟查詢執行之向量化模式的選項。 TRUE
hive.vectorized.execution.reduce.enabled 開啟查詢執行之減少端的向量化模式的選項。 TRUE
javax.jdo.option.ConnectionDriverName JDBC 中繼存放區的驅動程式類別名稱。 org.apache.derby.jdbc.EmbeddedDriver
javax.jdo.option.ConnectionPassword 與中繼存放區資料庫相關聯的密碼。 NULL
javax.jdo.option.ConnectionURL JDBC 中繼存放區的 JDBC 連線字串。 jdbc:derby:;databaseName=metastore_db;create=true
javax.jdo.option.ConnectionUserName 與中繼存放區資料庫相關聯的使用者名稱。 NULL
mapreduce.input.fileinputformat.split.maxsize 當您的輸入格式為 時,分割運算期間分割的大小上限org.apache.hadoop.hive.ql.io.CombineHiveInputFormat。值 0 表示沒有限制。 0
tez.am.dag.cleanup.on.completion 當 DAG 完成時,開啟隨機資料清除的選項。 TRUE
tez.am.emr-serverless.launch.env.[KEY] 在 Tez AM 程序中設定KEY環境變數的選項。對於 Tez AM,此值會覆寫該hive.emr-serverless.launch.env.[KEY]值。
tez.am.log.level EMR Serverless 傳遞至 Tez 應用程式主伺服器的根記錄層級。 INFO
tez.am.sleep.time.before.exit.millis EMR Serverless 應在 AM 關閉請求後的這段時間之後推送 ATS 事件。 0
tez.am.speculation.enabled 導致投機啟動較慢任務的選項。這有助於在部分任務因機器故障或速度變慢而執行時減少任務延遲。僅支援 Amazon EMR 6.10.x 及更低版本。 FALSE
tez.am.task.max.failed.attempts 在任務失敗之前,特定任務可能失敗的嘗試次數上限。此數字不會計入手動終止的嘗試次數。 3
tez.am.vertex.cleanup.height 如果所有相依頂點都完成,Tez AM 會刪除頂點隨機播放資料的距離。當值為 0 時,此功能會關閉。Amazon EMR 6.8.0 版及更新版本支援此功能。 0
tez.client.asynchronous-stop 在 Hive 驅動程式結束之前,導致 EMR Serverless 推送 ATS 事件的選項。 FALSE
tez.grouping.max-size 分組分割的大小上限 (以位元組為單位)。此限制可防止過度大型分割。 1073741824
tez.grouping.min-size 分組分割的大小下限 (以位元組為單位)。此限制可防止太多小分割。 16777216
tez.runtime.io.sort.mb 當 Tez 排序輸出時,軟緩衝區的大小會排序。 根據 Tez 任務記憶體計算最佳值
tez.runtime.unordered.output.buffer.size-mb 如果 Tez 未直接寫入磁碟,要使用的緩衝區大小。 根據 Tez 任務記憶體計算最佳值
tez.shuffle-vertex-manager.max-src-fraction 在 EMR Serverless 排程目前頂點的所有任務之前 (在ScatterGather連線的情況下) 必須完成的來源任務部分。在目前頂點上準備好排程的任務數量,會在 min-fraction和 之間線性擴展max-fraction。預設值為 或 tez.shuffle-vertex-manager.min-src-fraction,以較大者為準。 0.75
tez.shuffle-vertex-manager.min-src-fraction 在 EMR Serverless 為目前頂點排程任務之前 (在ScatterGather連線的情況下) 必須完成的來源任務部分。 0.25
tez.task.emr-serverless.launch.env.[KEY] 在 Tez 任務程序中設定KEY環境變數的選項。對於 Tez 任務,此值會覆寫該hive.emr-serverless.launch.env.[KEY]值。
tez.task.log.level EMR Serverless 傳遞給 Tez 任務的根記錄層級。 INFO
tez.yarn.ats.event.flush.timeout.millis AM 在關閉之前應等待事件排清的時間上限。 300000

Hive 任務範例

下列程式碼範例示範如何使用 StartJobRun API 執行 Hive 查詢。

aws emr-serverless start-job-run \ --application-id application-id \ --execution-role-arn job-role-arn \ --job-driver '{ "hive": { "query": "s3://amzn-s3-demo-bucket/emr-serverless-hive/query/hive-query.ql", "parameters": "--hiveconf hive.log.explain.output=false" } }' \ --configuration-overrides '{ "applicationConfiguration": [{ "classification": "hive-site", "properties": { "hive.exec.scratchdir": "s3://amzn-s3-demo-bucket/emr-serverless-hive/hive/scratch", "hive.metastore.warehouse.dir": "s3://amzn-s3-demo-bucket/emr-serverless-hive/hive/warehouse", "hive.driver.cores": "2", "hive.driver.memory": "4g", "hive.tez.container.size": "4096", "hive.tez.cpu.vcores": "1" } }] }'

您可以在 EMR Serverless Samples GitHub 儲存庫中找到有關如何執行 Hive 任務的其他範例。