运行EMR无服务器作业时使用 Hive 配置 - Amazon EMR

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

运行EMR无服务器作业时使用 Hive 配置

您可以在 type 参数设置为 HIVE 的情况下在应用程序上运行 Hive 作业。任务必须与与 Amazon EMR 发行版兼容的 Hive 版本兼容。例如,当您在亚马逊EMR版本 6.6.0 的应用程序上运行作业时,您的任务必须与 Apache Hive 3.1.2 兼容。有关每个发行版的应用程序版本信息,请参阅 Amazon EMR 无服务器发布版本

Hive 作业参数

使用运行 Hive 作业时,必须指定以下参数。StartJobRunAPI

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 查询。jobDriverHive 作业具有以下参数:

  • 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-log4j2spark-executor-log4j2 的分类仅适用于 6.8.0 及更高版本。

如果在应用程序覆盖和 Hive 参数中传递相同的配置,则 Hive 参数优先。以下列表按优先级从高到低对配置进行排序。

  • 作为 --hiveconf property=value 中 Hive 参数的一部分提供的配置。

  • 启动作业时,作为应用程序覆盖的一部分提供的配置。

  • 创建应用程序时,作为 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.[KEY] 在 Hive 特定进程(如 Hive 驱动程序、Tez AM 和 Tez 任务)中设置 KEY 环境变量的选项。
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 预计为下列值之一:BIETLHYBRID。这不是用户级配置。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 预计为下列值之一:NONEMINIMALMORE。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 partialscannoscan analyze 命令用于分区表的线程数。这仅适用于实现StatsProvidingRecordReader(比如ORC)的文件格式。 10
hive.strict.checks.cartesian.product 开启严格笛卡尔连接检查的选项。这些检查不允许使用笛卡尔乘积(交叉连接)。 FALSE
hive.strict.checks.type.safety 开启严格类型安全检查,并关闭 bigintstringdouble 比较的选项。 TRUE
hive.support.quoted.identifiers 预期值为 NONECOLUMNNONE 意味着标识符中只有字母数字和下划线字符有效。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.[KEY] 在 Tez AM 进程中设置 KEY 环境变量的选项。对于 Tez AM,此值将覆盖 hive.emr-serverless.launch.env.[KEY] 值。
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-fractionmax-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.[KEY] 在 Tez 任务进程中设置 KEY 环境变量的选项。对于 Tez 任务,此值将覆盖 hive.emr-serverless.launch.env.[KEY] 值。
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-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无服务器示例存储库中找到有关如何运行 Hive 作业的其他示例 GitHub 。