本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
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 参数优先。以下列表按优先级从最高优先级到最低优先级对配置进行排名。
-
作为 Hive 参数的一部分提供的配置。
--hiveconf
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 |
使用方解石框架启用基于成本的优化的选项。 | 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 在每个映射器和缩减器节点中创建的最大动态分区数。 | 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 |
为减速器开启投机启动的选项。仅亚马逊 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 |
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 时,此功能将关闭。亚马逊 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 作业的其他示例