本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
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-log4j2
spark-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.[ |
在所有 Hive 特定程序中設定 環境變數的選項,例如 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 |
預期下列其中一個值:BI 、 ETL 或 HYBRID 。這不是使用者層級組態。 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 |
預期下列其中一個值:NONE 、 MINIMAL 或 MORE 。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 |
partialscan 和 noscan 分析命令用於分割資料表的執行緒數量。這僅適用於實作的檔案格式 StatsProvidingRecordReader (如 ORC)。 |
10 |
hive.strict.checks.cartesian.product |
開啟嚴格卡氏聯結檢查的選項。這些檢查不允許卡氏產品 (交叉聯結)。 | FALSE |
hive.strict.checks.type.safety |
開啟嚴格類型安全檢查並關閉 bigint 與 string 和 比較的選項double 。 |
TRUE |
hive.support.quoted.identifiers |
預期值為 NONE 或 COLUMN 。 NONE 表示只有英數字元和底線字元在識別符中有效。 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.[ |
在 Tez AM 程序中設定 環境變數的選項。對於 Tez AM,此值會覆寫該hive.emr-serverless.launch.env.[ 值。 |
|
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.[ |
在 Tez 任務程序中設定 環境變數的選項。對於 Tez 任務,此值會覆寫該hive.emr-serverless.launch.env.[ 值。 |
|
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-arnjob-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