本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
运行EMR无服务器作业时使用 Hive 配置
您可以在 type
参数设置为 HIVE
的情况下在应用程序上运行 Hive 作业。任务必须与与 Amazon EMR 发行版兼容的 Hive 版本兼容。例如,当您在亚马逊EMR版本 6.6.0 的应用程序上运行作业时,您的任务必须与 Apache Hive 3.1.2 兼容。有关每个发行版的应用程序版本信息,请参阅 Amazon EMR 无服务器发布版本。
Hive 作业参数
使用运行 Hive 作业时,必须指定以下参数。StartJobRun
API
Hive 作业运行时角色
用于executionRoleArn
为应用程序ARN用于执行 Hive 作业的IAM角色指定。此角色必须具有以下权限:
-
从数据驻留的 S3 存储桶或其他数据来源读取数据
-
从 Hive 查询文件和 init 查询文件驻留的 S3 存储桶或前缀读取数据
-
读取和写入 Hive Scratch 目录和 Hive Metastore 仓库目录驻留的 S3 存储桶
-
写入要写入最终输出的 S3 存储桶
-
将日志写入
S3MonitoringConfiguration
指定的 S3 存储桶或前缀 -
如果您使用KMS密钥加密 S3 存储桶中的数据,则可以访问KMS密钥
-
访问 AWS Glue 数据目录
如果您的 Hive 作业向其他数据源读取或写入数据,请在此IAM角色中指定相应的权限。如果您不向该IAM角色提供这些权限,则您的任务可能会失败。有关更多信息,请参阅 Amazon EMR Serverless 的 Job 运行时角色。
Hive 作业驱动程序参数
使用 jobDriver
为作业提供输入。对于要运行的作业类型,作业驱动程序参数只接受一个值。当你指定hive
为作业类型时,EMRServerless 会向参数传递 Hive 查询。jobDriver
Hive 作业具有以下参数:
-
query
:这是 Amazon S3 中对要运行的 Hive 查询文件的引用。 -
parameters
:这些是要覆盖的其他 Hive 配置属性。要覆盖属性,请将其作为--hiveconf
传递给此参数。要覆盖变量,请将其作为property=value
--hivevar
传递给此参数。key=value
-
initQueryFile
:这是初始化 Hive 查询文件。Hive 会在查询之前运行该文件,并用其初始化表。
Hive 配置覆盖参数
使用 configurationOverrides
覆盖监控级别和应用程序级别配置属性。此参数接受具有以下两个字段的JSON对象:
-
monitoringConfiguration
— 使用此字段指定您希望EMR无服务器作业存储您的 Hive 作业日志的 Amazon S3 URL (s3MonitoringConfiguration
)。请务必使用托管应用程序的存储桶以及运行任务的相同 AWS 区域 位置创建此存储桶。 AWS 账户 -
applicationConfiguration
:您可以在此字段中提供一个配置对象,来覆盖应用程序的默认配置。您可以使用速记语法来提供配置,也可以在文件中引用配置对象。JSON配置对象包含分类、属性和可选的嵌套配置。属性由您希望在该文件中覆盖的设置组成。您可以在单个JSON对象中为多个应用程序指定多个分类。注意
可用的配置分类因特定的EMR无服务器版本而异。例如,自定义 Log4j
spark-driver-log4j2
和spark-executor-log4j2
的分类仅适用于 6.8.0 及更高版本。
如果在应用程序覆盖和 Hive 参数中传递相同的配置,则 Hive 参数优先。以下列表按优先级从高到低对配置进行排序。
-
作为
--hiveconf
中 Hive 参数的一部分提供的配置。property=value
-
启动作业时,作为应用程序覆盖的一部分提供的配置。
-
创建应用程序时,作为
runtimeConfiguration
的一部分提供的配置。 -
优化了 Amazon 为该版本EMR分配的配置。
-
应用程序的默认开源配置。
有关在应用程序级别声明配置以及在作业运行期间覆盖配置的更多信息,请参阅 EMR无服务器的默认应用程序配置。
Hive 作业属性
下表列出了在提交 Hive 作业时必须配置的必需属性。
设置 | 描述 |
---|---|
hive.exec.scratchdir |
在 Hive 任务执行期间,S EMR erverless 在其中创建临时文件的 Amazon S3 位置。 |
hive.metastore.warehouse.dir |
Hive 中托管表数据库的 Amazon S3 位置。 |
下表列出了提交 Hive 作业时可以覆盖的可选 Hive 属性及其默认值。
设置 | 描述 | 默认值 |
---|---|---|
fs.s3.customAWSCredentialsProvider |
您要使用的 AWS 凭证提供商。 | com.amazonaws.authd efaultAWSCredentials ProviderChain |
fs.s3a.aws.credentials.provider |
您要用于 S3A 文件系统的 AWS 凭证提供程序。 | com.amazonaws.authd efaultAWSCredentials ProviderChain |
hive.auto.convert.join |
根据输入文件大小,将普通连接自动转换为 mapjoin 的选项。 | TRUE |
hive.auto.convert.join.noconditionaltask |
当 Hive 根据输入文件大小将普通连接转换为 mapjoin 时,开启优化的选项。 | TRUE |
hive.auto.convert.join.noconditionaltask.size |
低于此大小时,连接会直接转换为 mapjoin。 | 最优值是基于 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 驱动程序的磁盘类型。 | Standard |
hive.tez.disk.type |
Tez 工作线程的磁盘大小。 | Standard |
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 在每个 mapper 和 reducer 节点中创建的最大动态分区数。 | 100 |
hive.exec.orc.split.strategy |
预计为下列值之一:BI 、ETL 或 HYBRID 。这不是用户级配置。BI 指定您希望在拆分生成上花费的时间比在查询执行上花费的时间更少。ETL 指定您希望在拆分生成上花费更多时间。HYBRID 指定根据启发式方法从上述策略中选择。 |
HYBRID |
hive.exec.reducers.bytes.per.reducer |
每个 reducer 的大小。默认值为 256MB。如果输入大小为 1G,作业将使用 4 个 reducer。 | 256000000 |
hive.exec.reducers.max |
最大 reducer 数。 | 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 |
默认输入格式。如果在使用 CombineHiveInputFormat 时遇到问题,请设置为 HiveInputFormat 。 |
org.apache.hadoop.hive.ql.io.CombineHiveInputFormat |
hive.log.explain.output |
为 Hive 日志中的任何查询开启扩展输出解释的选项。 | FALSE |
hive.log.level |
Hive 日志记录级别。 | INFO |
hive.mapred.reduce.tasks.speculative.execution |
为 reducer 开启推测性启动的选项。仅亚马逊 EMR 6.10.x 及更低版本支持。 | TRUE |
hive.max-task-containers |
最大并发容器数。将配置的 mapper 内存乘以该值,确定拆分计算和任务抢占使用的可用内存。 | 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 analyze 命令用于分区表的线程数。这仅适用于实现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 auto-reducer 并行度功能的选项。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 在开启 auto-reducer 并行度时指定的 reducer 下限。 | 0.25 |
hive.vectorized.execution.enabled |
开启查询执行的向量化模式的选项。 | TRUE |
hive.vectorized.execution.reduce.enabled |
开启查询执行 reduce-side 的向量化模式的选项。 | 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 |
Serverl EMR ess 传递给 Tez 应用程序主服务器的根日志记录级别。 | INFO |
tez.am.sleep.time.before.exit.millis |
EMRServerless 应在 AM 关闭请求后的这段时间之后推送ATS事件。 | 0 |
tez.am.speculation.enabled |
使较慢任务推测性启动的选项。当某些任务因机器故障或速度缓慢而运行较慢时,这有助于减少作业延迟。仅亚马逊 EMR 6.10.x 及更低版本支持。 | FALSE |
tez.am.task.max.failed.attempts |
在任务失败之前,特定任务可以失败的最大尝试次数。此数字不计入手动终止的尝试次数。 | 3 |
tez.am.vertex.cleanup.height |
如果所有从属顶点都已完成,Tez AM 将删除顶点随机排序数据的距离。值为 0 时,此功能关闭。Amazon 6.8.0 及更高EMR版本支持此功能。 | 0 |
tez.client.asynchronous-stop |
该选项可让 S EMR erverless 在终止 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 |
在 S EMR erverless 为当前顶点(如果是ScatterGather 连接)安排所有任务之前,必须完成的源任务的比例。当前顶点上准备安排的任务数量在 min-fraction 和 max-fraction 之间线性缩放。这将为默认值或 tez.shuffle-vertex-manager.min-src-fraction ,以较大者为准。 |
0.75 |
tez.shuffle-vertex-manager.min-src-fraction |
在 S EMR erverless 为当前顶点安排任务之前,必须完成的源任务比例(如果是ScatterGather 连接)。 |
0.25 |
tez.task.emr-serverless.launch.env.[ |
在 Tez 任务进程中设置 环境变量的选项。对于 Tez 任务,此值将覆盖 hive.emr-serverless.launch.env.[ 值。 |
|
tez.task.log.level |
EMRServerless 传递给 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无服务器示例存储库中找到有关如何运行 Hive 作业的其他示例