这是CDP中Apache Hive3用户指南系列之一,之前的文章请参考<CDP的Hive3系列之Hive Metastore介绍>,<CDP中的Hive3系列之Apache Hive3的特性>,<CDP中的Hive3系列之启动Apache Hive3>,<CDP中的Hive3系列之Hive3使用指南>和<CDP中的Hive3系列之管理Hive3>.
1 工作负载管理
作为管理员,要管理工作负载,您将了解什么是资源计划以及如何创建资源计划以改进并行查询执行。当集群共享查询时,并行处理查询很重要。
资源计划是一个自包含的资源共享配置。在集群上每次只有一个资源计划处于活动状态。通常,在活动集群上启用和禁用资源计划不会影响正在运行的查询。作为管理员,您可以应用针对不同情况配置集群的资源计划。例如,您的脚本可以应用将集群配置为处理高流量的资源计划。当流量减少时,您可以切换资源计划以支持交互式数据可视化、深度临时分析和大规模 BI 报告的流量。
当工作负载达到大量并发查询时,您可以创建资源计划以满足定义的数据处理基准。例如,考虑一个企业,它有一个向大约100 名分析师公开的ad hoc分析应用程序。数据集和查询模式规定生成的查询在几秒钟内执行。资源计划可以确保当多达 100 个用户可能同时使用系统时,至少 95% 的查询在 15 秒内完成。
一个资源计划可以由一个或多个查询池、映射和触发器组成:
· 查询池与池内的集群进程和查询共享资源,并设置最大并发查询数。
· 映射基于指定的因素(例如用户名、组或应用程序)将传入查询路由到池。
· 触发器根据由 Apache Hadoop、Tez 和Hive 计数器表示的查询指标启动操作,例如终止池中的查询或集群中运行的所有查询。
下图描绘了一个简单的资源计划。第一张图显示了为高流量时段设计的资源计划,第二张图显示了为低流量时段设计的资源计划。
2 设置和使用资源计划
了解使用工作负载管理的先决条件至关重要。作为管理员,您可以使用 DDL 语句定义资源计划,这些语句通常包括针对不同用户或应用程序的事件触发资源池。然后,您可以使用资源计划管理工作负载。创建并启用资源计划后,您必须将其激活。当您想要更改资源计划或停止使用它时,您必须禁用它。
2.1 创建资源计划
作为管理员,您可以创建资源计划,为不同的条件配置集群,使您能够改进并行查询执行并在运行Hive的节点上共享查询。您可以将资源分配给用户、组或应用程序池,并在计划中触发操作。
您从 Beeline shell 启动Hive,或者打开了另一个 Hive UI。
作为管理员,您可以创建新的资源计划或克隆另一个计划,然后对其进行修改。
1) 创建资源计划。
n 创建一个新的资源计划(例如,一个名为 high_concurr_rp 的资源计划):
CREATE RESOURCE PLAN high_concurr_rp;
n 克隆现有的资源计划(例如 ha_plan)并将其重命名为 high_concurr_rp:
CREATE RESOURCE PLAN high_concurr_rp LIKE ha_plan;
n 创建一个新的资源计划(例如,名为 high_concurr_rp)并指定查询并发限制:
CREATE RESOURCE PLAN high_concurr_rp WITH QUERY_PARALLELISM=15;
2) (可选)向计划添加一个或多个查询池。
CREATE POOL high_concurr_rp.bi_pool WITH ALLOC_FRACTION=75,QUERY_PARALLELISM=5; CREATE POOL high_concurr_rp.etl_pool WITH ALLOC_FRACTION=25,QUERY_PARALLELISM=10;
此示例配置将 75% 的 LLAP 集群资源分配给一个池,将 25% 分配给另一个池,并允许一个池中的用户进行 5 个并发查询,另一个池中的用户进行 10 个并发查询。
3) (可选)将应用程序映射到池。
CREATE APPLICATION MAPPING tableau_to_bi IN bi_pool;
Tableau 应用程序到 bi_pool 的此示例映射要求 Tableau 使用包含 applicationName="Tableau". 在组到池的映射中,组授权取决于集群上的 HDFS 组配置。您可以配置轻量级目录协议 (LDAP) 和其他机制。
4) (可选)创建触发器。例如,创建一个触发器,当执行时间超过一分钟时,将查询移动到 etl_pool 中执行。
CREATE TRIGGER high_concurr_rp.slow_query WHEN execution_time_ms > 60000 DO MOVE TO etl_pool;
5) 如果您正在运行 LLAP 服务,请向池或资源计划添加触发器,如下例所示。
ALTER TRIGGER high_concurr_rp.slow_query ADD TO POOL bi_pool;
您可以使用 ALTER TRIGGER 命令向在 LLAP 下运行的池或资源计划添加触发器;否则,触发器被认为是全局的并且仅在 Tez 中运行。
2.2 启用资源计划
您可以启用并可选择激活资源计划以通过运行查询来管理工作负载。
· 您在要管理的集群上通过 ODBC 或 JDBC 连接到 HiveServer。
· 您从 Beeline shell 启动 Hive,或其他 Hive UI。
启用资源计划的部分过程是验证计划。启用计划不会将计划应用于查询工作负载。您无法在启用时修改计划。您可以启用多个计划,但一次只能在一个集群上激活一个。启用和激活计划也会验证该计划。
1) 验证名为 myplan 的资源计划。
ALTER RESOURCE PLAN myplan VALIDATE;
2) 使用以下方法之一启用资源计划,具体取决于您是要现在还是稍后激活该计划,以及您是否已经激活了另一个计划。
- 启用资源计划:
ALTER RESOURCE PLAN myplan ENABLE;
- 启用并激活资源计划:
ALTER RESOURCE PLAN myplan ENABLE ACTIVATE;
- 归档活动资源计划并将其替换为指定的资源计划:
ALTER RESOURCE PLAN myplan ENABLE ACTIVATE WITH REPLACE
2.3 激活资源计划
您可以激活已启用的资源计划以将该计划应用于查询工作负载以开始管理工作负载。
· 您连接到要管理的集群上的 HiveServer,并从 Beeline shell 启动 Hive、或打开另一个 Hive UI。
· 您启用了资源计划。
您一次只能激活一个资源计划。
1) 激活资源计划。
ALTER RESOURCE PLAN plan1 ACTIVATE;
本示例激活 plan1。
2) 通过激活另一个资源计划来停用一个资源计划。
ALTER RESOURCE PLAN plan2 ACTIVATE;
此示例激活 plan2 并停用 plan1,但仍启用 plan1。
2.4 查询 sys 数据库以获取计划数据
您查询 Hive 元存储中的 sys 数据库以检索有关工作负载管理实体的信息,例如资源计划。
· 您在要管理的集群上建立了到 HiveServer 的连接,并从 Beeline shell 启动了 Hive,或者打开了另一个 Hive UI。
· 已创建用于管理集群上的工作负载的资源计划。
假设您按照前面所述创建了 high_concurr_rp 资源计划,请查询 sys 数据库以获取有关该计划的信息。
1) 例如,获取资源计划的查询池的视图。
SELECT * FROM SYS.WM_POOLS WHERE RP_NAME = 'high_concurr_rp';
2) 获取有关计划的名为 etl_pool pool 的池中名为 slow_query 的触发器的信息。
SELECT TRIGGER_NAME.slow_query FROM SYS.WM_POOLS_TO_TRIGGERS WHERE RP_NAME = 'high_concurr_rp';
2.5 禁用资源计划
您可以禁用资源计划以对其进行修改或停止管理工作负载。您运行查询以禁用资源计划。
· 您已连接到要管理的集群上的 HiveServer。
· 您从 Beeline shell 启动了 Hive,或者打开了另一个 Hive UI。
禁用资源计划。
ALTER RESOURCE PLAN myplan DISABLE;
3 sys中的工作负载管理实体数据
从 Hive sys 数据库中,您可以获得有关工作负载管理和其他 Hive 实体的信息。给定工作负载管理视图的声明,有足够的信息来构建信息查询。
3.1 工作负载管理视图
Hive 有一个名为 sys 的特殊数据库,类似于系统目录或信息目录。sys 数据库是 Hive Metastore 的一部分。在 sys 数据库中,您可以查询所有 Hive 实体的视图,包括工作负载管理实体。以下工作负载管理视图可用:
· SYS.WM_RESOURCEPLANS(名称字符串、状态字符串、QUERY_PARALLELISM int、DEFAULT_POOL_PATH 字符串)
· SYS.WM_POOLS(RP_NAME 字符串、PATH 字符串、ALLOC_FRACTION 双精度、QUERY_PARALLELISM int、SCHEDULING_POLICY 字符串)
· SYS.WM_MAPPINGS(RP_NAME 字符串、ENTITY_TYPE 字符串、ENTITY_NAME 字符串、POOL_PATH 字符串、ORDERING 整数)
· SYS.WM_TRIGGERS(RP_NAME 字符串、NAME 字符串、TRIGGER_EXPRESSION 字符串、ACTION_EXPRESSION 字符串)
· SYS.WM_POOLS_TO_TRIGGERS(RP_NAME 字符串、POOL_PATH 字符串、TRIGGER_NAME 字符串)