Hive 任務 - Amazon EMR

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

Hive 任務

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

Hive 任務參數

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

Hive 任務執行期角色

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

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

  • 從 Hive 查詢檔案和初始查詢檔案所在的 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為任務類型時,EMRServerless 會將 Hive 查詢傳遞至 jobDriver 參數。Hive 任務具有下列參數:

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

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

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

Hive 組態覆寫參數

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

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

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

    注意

    可用的組態分類會因特定無EMR伺服器版本而有所不同。例如,自訂 Log4j 的分類spark-driver-log4j2spark-executor-log4j2,且僅適用於 6.8.0 版和更新版本。

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

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

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

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

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

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

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

Hive 任務屬性

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

設定 描述
hive.exec.scratchdir 在 Hive 任務執行期間,EMRServerless 建立暫存檔案的 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 根據輸入檔案大小,開啟常見聯結自動轉換為映射聯結的選項。 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 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 讓 Hive 在INSERT OVERWRITE命令期間自動收集基本統計資料的選項。 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 無伺服器應該在 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 6EMR.8.0 版及更新版本支援此功能。 0
tez.client.asynchronous-stop 導致 EMR Serverless 在 Hive 驅動程式結束之前推送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伺服器排程目前頂點的所有任務之前 (在ScatterGather連線的情況下) 必須完成的來源任務部分。在目前頂點上準備排程的任務數量,會在 min-fraction和 之間線性擴展max-fraction。這會預設為預設值 或 tez.shuffle-vertex-manager.min-src-fraction,以較大者為準。 0.75
tez.shuffle-vertex-manager.min-src-fraction 在無EMR伺服器排程目前頂點的任務之前 (在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 任務範例

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

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 任務的其他範例。