MapReduce服务(MRS) 3.5.1-LTS 使用指南(for 华为云Stack 8.5.1) 03

使用HetuEngine

使用HetuEngine

HetuEngine交互查询引擎概述

HetuEngine能够支持多种数据源的快速联合查询并提供可视化的数据源配置、管理页面,用户可通过HSConsole界面快速添加数据源。

当前版本HetuEngine支持对接的数据源如下表所示。

表2-761 HetuEngine对接数据源一览表

HetuEngine模式

数据源

数据源模式

支持对接的数据源版本

安全模式

Hive

安全模式

MRS 3.x、FusionInsight 6.5.1

HBase

MRS 3.x

Elasticsearch

MRS 3.1.2及以后

HetuEngine

MRS 3.1.1及以后

Hudi

MRS 3.1.2及以后

ClickHouse

MRS 3.1.1及以后

IoTDB

MRS 3.2.0及以后

GaussDB

GaussDB 200、GaussDB A 8.0.0及以后

MySQL

MySQL 5.7、MySQL 8.0及以后

Oracle

Oracle 12及以后版本

GBase

GBase8a V950及以后版本

普通模式

Hive

普通模式

MRS 3.x、FusionInsight 6.5.1

HBase

MRS 3.x

Elasticsearch

MRS 3.1.2及以后

Hudi

MRS 3.1.2及以后

ClickHouse

MRS 3.1.1及以后

IoTDB

MRS 3.2.0及以后

MySQL

安全模式

MySQL 5.7、MySQL 8.0及以后

GaussDB

GaussDB 200、GaussDB A 8.0.0及以后

Oracle

Oracle 12及以后版本

GBase

GBase8a V950及以后版本

HetuEngine数据源的添加、配置、删除等操作支持动态生效,无须重启集群。

目前动态生效不支持关闭,数据源动态生效时间默认为60秒。如需修改动态生效时间,请参考创建HetuEngine计算实例3.e修改“coordinator.config.properties”“worker.config.properties”中的参数“catalog.scanner-interval”值为需要设定的动态生效时间,例如:

catalog.scanner-interval =120s

HetuEngine支持查询下推(pushdown),它能把查询,或者部分查询,下推到连接的数据源。这意味着特殊的谓词,聚合函数或者其他一些操作,可以被传递到底层数据库或者文件系统进行处理。查询下推能带来以下好处:

  1. 提升整体的查询性能。
  2. 减少HetuEngine和数据源之间的网络流量。
  3. 减少远端数据源的负载。

HetuEngine对查询下推的具体支持情况,依赖于具体的Connector,以及Connector相关的底层数据源或存储系统。

  • 数据源集群域名与HetuEngine集群域名不能相同,HetuEngine也不支持同时对接两个相同域名的数据源(Hive,Hbase,Hudi数据源)。
  • 数据源集群与HetuEngine集群节点业务平面网络互通。

HetuEngine用户权限管理

HetuEngine用户权限说明

HetuEngine在集群已启用Kerberos认证(安全模式)时提供了如下两种权限管控方式,默认使用Ranger权限模型;在集群未启用Kerberos认证(普通模式)时提供了Ranger权限模型,默认未开启Ranger权限模型:

Ranger和MetaStore的差异见下表,两者都支持用户、用户组以及角色的鉴权。

表2-762 Ranger和MetaStore差异

权限管控方式

权限模型

支持的数据源

描述

Ranger

PBAC

Hive、HBase、Elasticsearch、GaussDB、HetuEngine、ClickHouse、IoTDB、Hudi、MySQL、GBase、Oracle

支持行过滤、列脱敏以及更细粒度的权限管控

MetaStore

RBAC

Hive

-

权限原则与约束

  • HetuEngine访问同集群数据源。

    HetuEngine启用Ranger鉴权,则统一使用Ranger的PBAC权限策略做鉴权。

    HetuEngine停用Ranger鉴权,则统一使用MetaStore的RBAC权限策略做鉴权。

    Drop Table需要拥有Drop Table权限且是表的Owner。

  • HetuEngine访问跨集群数据源。

    同时受HetuEngine端权限和数据源端权限管控(Hive场景下,依赖于HDFS)。

  • 查询视图时,仅需给目标视图授予select权限即可;使用视图联表查询时,需要同时给两者授予select权限。
  • 不支持GaussDB和HetuEngine数据源列脱敏。

HetuEngine服务在切换权限控制类型时,需要重启整个HetuEngine服务,包括HSConsole页面上正在运行的HetuEngine计算实例。

HetuEngine基于Ranger权限管控

新安装集群默认采用Ranger进行鉴权,对于历史版本升级集群或者手动停用了Ranger鉴权的集群,可参考如下操作重新启用Ranger鉴权。

启用Ranger鉴权的集群,管理员可通过Ranger为HetuEngine用户配置操作数据源的数据库、表、列的管理权限,详情请参考添加HetuEngine的Ranger访问权限策略

  1. 登录FusionInsight Manager。
  2. 选择“集群 > 服务 > HetuEngine > 更多 > 启用Ranger鉴权”。

    集群未启用Kerberos认证(普通模式)时使用Ranger权限管控,需在“集群 > 服务 > Ranger > 配置 > 全部配置”中搜索参数“ranger.usersync.sync.source”,确保其值为“ldap”,否则修改为“ldap”(修改配置后需保存并重启Ranger)。

  3. 选择“集群 > 服务 > HetuEngine > 更多 > 重启服务”。
  4. 在HSConsole页面重启计算实例,具体请参见管理HetuEngine计算实例

HetuEngine基于MetaStore权限管控

  • 约束:只适用于Hive类型数据源。

    HetuEngine多个集群组网进行协同计算时,元数据由管理集群集中管理,计算在所有集群进行,访问HetuEngine集群用户的权限需要在管理集群进行配置,并在所有计算实例添加拥有Hive用户组权限的同名用户。

  • 启用MetaStore鉴权
    1. 登录FusionInsight Manager。
    2. 选择“集群 > 服务 > HetuEngine > 更多 > 停用Ranger鉴权”。
    3. 选择“集群 > 服务 > HetuEngine > 更多 > 重启服务”。
    4. 在HSConsole页面重启计算实例。
  • MetaStore权限

    类似于Hive,HetuEngine也是建立在Hadoop上的数据仓库框架,提供类似SQL的结构化数据。

    集群中的各类权限需要先授予角色,然后将用户或者用户组与角色绑定。用户只有绑定角色或者加入绑定角色的用户组,才能获得权限。

    HetuEngine的权限管理是指HetuEngine中管理用户操作数据库的权限系统,以保证不同用户之间操作数据库的独立性和安全性。如果一个用户想操作另一个用户的表、数据库等,需要获取相应的权限才能进行操作,否则会被拒绝。

    HetuEngine权限管理部分集成了Hive权限管理的功能。使用HetuEngine权限管理功能需要使用Hive的MetaStore服务和页面上的赋权功能。

    • 页面赋权:HetuEngine仅支持页面赋权的方式。在Manager的“系统 > 权限”中,可以进行用户、用户组和角色的添加/删除操作,可以对某个角色进行赋权/撤权。
    • 服务获权并判断:当接收到客户端的DDL、DML的SQL命令时,HetuEngine服务会向MetaStore服务获取客户端用户对数据库信息的已有权限,并检查是否包含了所需的所有权限,如果是则继续执行,否则拒绝该用户的操作。当通过了MetaStore的权限检查后,还需进行HDFS的ACLs权限检查。
  • HetuEngine权限模型

    用户使用HetuEngine服务进行SQL操作,必须对HetuEngine数据库和表(含外表和视图)拥有相应的权限。完整的HetuEngine权限模型由元数据权限与HDFS文件权限组成。使用数据库或表时所需要的各种权限都是HetuEngine权限模型中的一种。

    • 元数据权限

      元数据权限即在元数据层上进行权限控制,与传统关系型数据库类似,HetuEngine数据库包含“建表”和“查询”权限,表和列包含“查询”、“插入”、“UPDATE”和“删除”权限。HetuEngine中还包含拥有者权限“OWNERSHIP”和集群管理员权限“ADMIN”。

    • 数据文件权限,即HDFS文件权限

      HetuEngine的数据库、表对应的文件保存在HDFS中。默认创建的数据库或表保存在HDFS目录“/user/hive/warehouse”。系统自动以数据库名称和数据库中表的名称创建子目录。访问数据库或者表,需要在HDFS中拥有对应文件的权限,包含“读”、“写”和“执行”权限。

    用户对HetuEngine数据库或表执行不同操作时,需要关联不同的元数据权限与HDFS文件权限。例如,对HetuEngine数据表执行查询操作,需要关联元数据权限“查询”,以及HDFS文件权限“读”和“执行”。

    使用FusionInsight Manager界面图形化的角色管理功能来管理HetuEngine数据库和表的权限,只需要设置元数据权限,系统会自动关联HDFS文件权限,减少界面操作,提高效率。

  • HetuEngine使用场景及对应权限

    用户通过HetuEngine服务创建数据库需要加入Hive组,不需要角色授权。用户在Hive和HDFS中对自己创建的数据库或表拥有完整权限,可直接创建表、查询数据、删除数据、插入数据、更新数据以及授权他人访问表与对应HDFS目录与文件。

    如果用户访问别人创建的表或数据库,需要授予权限。所以根据HetuEngine使用场景的不同,用户需要的权限可能也不相同。

    表2-763 HetuEngine使用场景

    主要场景

    用户需要的权限

    使用HetuEngine表、列或数据库

    使用其他用户创建的表、列或数据库,不同的场景需要不同的权限,例如:

    • 创建表,需要“建表”权限。
    • 查询数据,需要“查询”权限。
    • 插入数据,需要“插入”权限。

    在一些特殊HetuEngine使用场景下,需要单独设置其他权限。

    表2-764 HetuEngine授权注意事项

    场景

    用户需要的权限

    创建HetuEngine数据库、表、外表,或者为已经创建的表或外表添加分区,且Hive用户指定数据文件保存在“/user/hive/warehouse”以外的HDFS目录。

    需要此目录已经存在,客户端用户是目录的属主,且用户对目录拥有“读”、“写”和“执行”权限。同时用户对此目录上层的每一级目录都拥有“读”和“执行”权限。

    操作Hive中所有的数据库和表。

    需加入到supergroup用户组,并且授予“ADMIN”权限。

  • 配置表、列和数据库的权限

    启用MetaStore鉴权后,使用HetuEngine操作表或者数据库时,如果用户访问别人创建的表或数据库,需要授予对应的权限。为了实现更严格权限控制,HetuEngine也支持列级别的权限控制。如果要访问别人创建的表上某些列,需要授予列权限。

    • 在权限管理中,为了方便用户使用,授予数据库下表的任意权限将自动关联该数据库目录的HDFS权限。为了避免产生性能问题,取消表的任意权限,系统不会自动取消数据库目录的HDFS权限,但对应的用户只能登录数据库和查看表名。
    • 若为角色添加或删除数据库的查询权限,数据库中的表也将自动添加或删除查询权限。此机制为Hive实现,HetuEngine与Hive保持一致。
    • HetuEngine不支持struct数据类型中列名称含有特殊字符(除字母、数字、下划线外的其他字符)。如果struct类型中列名称含有特殊字符,在FusionInsight Manager的“角色”页面进行授权时,该列将无法正确显示。

    操作步骤:

    1. 登录FusionInsight Manager页面。
    2. 选择“系统 > 权限 > 角色”。
    3. 单击“添加角色”,输入“角色名称”和“描述”。
    4. “配置资源权限”列表,选择“集群 > Hive”,设置角色权限,请参见表2-765
      • “Hive管理员权限”:Hive管理员权限。
      • “Hive读写权限”:Hive数据表管理权限,可设置与管理已创建的表的数据操作权限。
      • Hive角色管理支持授予管理员权限、访问表和视图的权限,不支持数据库的授权。
      • Hive管理员权限不支持管理HDFS的权限。
      • 如果数据库中的表或者表中的文件数量比较多,在授权时可能需要等待一段时间。例如表的文件数量为1万时,可能需要等待2分钟。
      表2-765 设置角色

      任务场景

      角色授权操作

      设置在默认数据库中,查询其他用户表的权限

      1. 在“视图名称”的表格中单击“Hive读写权限”。
      2. 在数据库列表中单击指定的数据库名称,显示数据库中的表。
      3. 在指定表的“权限”列,勾选“查询”。

      设置在默认数据库中,导入数据到其他用户表的权限

      1. 在“视图名称”的表格中单击“Hive读写权限”。
      2. 在数据库列表中单击指定的数据库名称,显示数据库中的表。
      3. 在指定表的“权限”列,勾选“删除”和“插入”。
    1. 单击“确定”完成,返回“角色”页面。

      角色创建完成后,可参考创建HetuEngine权限角色创建HetuEngine用户,并为其赋予相关角色权限。

    SQL语句在HetuEngine中进行处理对应的权限要求如表2-766所示。

    表2-766 使用HetuEngine表、列或数据

    操作场景

    用户需要的权限

    DESCRIBE TABLE

    查询(Select)

    ANALYZE TABLE

    查询(Select)、插入(Insert)

    SHOW COLUMNS

    查询(Select)

    SHOW TABLE STATUS

    查询(Select)

    SHOW TABLE PROPERTIES

    查询(Select)

    SELECT

    查询(Select)

    EXPLAIN

    查询(Select)

    CREATE VIEW

    查询(Select)、Select授权(Grant Of Select)、建表(Create)

    CREATE TABLE

    建表(Create)

    ALTER TABLE ADD PARTITION

    插入(Insert)

    INSERT

    插入(Insert)

    INSERT OVERWRITE

    插入(Insert)、删除(Delete)

    ALTER TABLE DROP PARTITION

    需要授予Table级别的修改(Alter)、删除(Delete)和Column级别的查询(Select)权限

    ALTER DATABASE

    Hive管理员权限(Hive Admin Privilege)

创建HetuEngine权限角色

操作场景

安全模式的集群,在使用HetuEngine服务前,需集群管理员创建用户并指定其操作权限以满足业务使用需求。

HetuEngine用户分为管理员用户和普通用户,系统默认的HetuEngine管理员用户组为“hetuadmin”HetuEngine普通用户对应用户组为“hetuuser”

  • 关联了“hetuadmin”用户组的用户可获得HetuEngine的HSConsole WebUI界面和HetuEngine计算实例WebUI的运维管理员权限。
  • 关联了“hetuuser”用户组的用户可获得SQL执行权限。可以访问HSConsole WebUI界面,查看当前用户关联租户的集群信息以及所有数据源的基本信息,可以访问计算实例的WebUI界面,并对当前用户的SQL有查询和运维的权限。

启用了Ranger鉴权时,如果用户创建后需要继续为用户配置操作数据源的数据库、表、列的管理权限,请参考添加HetuEngine的Ranger访问权限策略

前提条件

在使用HetuEngine服务请确保已提前规划并创建HetuEngine用户待关联的租户,MRS集群中租户的创建与使用可参考租户资源

操作步骤

创建具有“DROP、TRUNCATE、DELETE、INSERT OVERWRITE、LOAD OVERWRITE”操作权限的用户,需创建对应用户回收站目录清理策略,可参考《MapReduce服务(MRS) 3.5.1-LTS 使用指南(for 华为云Stack 8.5.1)》中《MapReduce服务(MRS) 3.5.1-LTS 用户指南(for 华为云Stack 8.5.1)》的“存算分离操作指导”章节的“配置回收站清理策略”部分。

创建HetuEngine管理员用户

  1. 登录FusionInsight Manager。
  2. 选择系统 > 权限 > 用户 > 添加用户
  3. 填写“用户名”,例如“hetu_admin”
  4. 设置“用户类型”,选择“人机”。
  5. 填写“密码”和“确认新密码”。
  6. 在“用户组”,单击“添加”,为该用户添加“hive”“hetuadmin”“hadoop”“hetuuser”“yarnviewgroup”用户组。
  7. 在“主组”下拉列表,选择“hive”作为主组。
  8. 在“角色”,单击“添加”,为该用户绑定“default”“System_administrator”以及待关联的租户角色权限。
  9. 单击“确定”,完成HetuEngine管理员用户创建。

创建HetuEngine普通用户

  1. 登录FusionInsight Manager。
  2. 选择系统 > 权限 > 用户 > 添加用户
  3. 填写“用户名”,例如“hetu_test”
  4. 设置“用户类型”,选择“人机”。
  5. 填写“密码”和“确认新密码”。
  6. 在“用户组”,单击“添加”,为该用户添加“hetuuser”用户组。
  7. 在“角色”,单击“添加”,为该用户绑定“default”或者待关联的租户角色权限。
  8. 单击“确定”,完成HetuEngine普通用户创建。

启用了Ranger鉴权时,如果用户创建后需要继续为用户配置操作数据源的数据库、表、列的管理权限,请参考添加HetuEngine的Ranger访问权限策略

配置HetuEngine使用代理用户鉴权

HetuEngine支持使用FusionInsight Manager用户认证时通过客户自有用户(代理用户)使用Ranger鉴权的能力。即在使用HetuEngine客户端时,通过--session-user来指定代理用户。

创建认证用户或代理用户请参考创建HetuEngine权限角色

启用Ranger鉴权并为代理用户配置操作数据源的数据库、表、列的管理权限,具体操作请参考添加HetuEngine的Ranger访问权限策略

  • 集群已启用Kerberos认证(安全模式)
    1. 使用kinit指定认证用户(需为HetuEngine管理员用户,并额外添加supergroup用户组才能代理其他用户鉴权),如hetuadmin1

      kinit hetuadmin1

      根据提示输入用户密码,首次登录需重置密码。

    2. 再使用--session-user指定代理用户,如user1

      hetu-cli --session-user user1 --tenant default

  • 集群未启用Kerberos认证(普通模式)

    使用--user指定认证用户(需拥有hetuuser用户组才能代理其他用户鉴权),如user;使用--session-user指定代理用户,如user1

    hetu-cli --user user --session-user user1 --tenant default

该功能不适用于HiveMetastore数据源鉴权与多用户映射共存的场景。

配置HetuEngine对接外部LDAP

操作场景

本章节指导用户从零开始使用HetuEngine对接外部LDAP,实现账号密码认证。

约束与限制

  • 该功能仅集群未启用Kerberos认证(普通模式)支持。
  • HetuEngine只允许配置对接一个外部LDAP。
  • 需要在FusionInsight Manager的“系统 > 权限 > 用户”界面上创建一个外部LDAP中已存在的同名用户,例如“hetu_test”,并添加“hetuuser”用户组,该用户用于提交SQL请求。

操作步骤

  1. 登录FusionInsight Manager页面,选择“集群 > 服务 > HetuEngine > 配置 > 全部配置”,参考表 对接外部LDAP参数配置对接外部LDAP参数。

    表2-767 对接外部LDAP参数

    参数名称

    默认值

    建议值

    参数解释

    参数文件

    http-server.authentication.type

    NONE

    PASSWORD

    为Coordinator配置身份验证类型列表。

    • NONE:不认证。
    • PASSWORD:基于LDAP的密码认证。

    coordinator.config.properties

    ldap.allow-insecure

    true

    -

    允许使用不受TLS保护的LDAP连接。

    • true:使用非SSL方式连接LDAP。
    • false:使用SSL方式连接LDAP。

    password-authenticator.properties

    ldap.ssl.truststore.password

    -

    -

    PEM或JKS信任文件的密码。

    password-authenticator.properties

    ldap.ssl.truststore.path

    -

    -

    PEM或JKS信任文件存储的路径。

    password-authenticator.properties

    ldap.timeout.connect

    5000ms

    5000ms

    建立LDAP连接的超时时长(单位:毫秒)。小于或等于零的整数表示使用网络协议的(即TCP的)超时值。

    password-authenticator.properties

    ldap.timeout.read

    5000ms

    5000ms

    从LDAP连接读取数据的超时时长(单位:毫秒)。小于或等于零的整数意味着没有指定读取超时,相当于无限等待响应,直到接收到它。

    password-authenticator.properties

    ldap.url

    -

    -

    LDAP服务器的URL。

    • URL的“scheme”必须为“ldap://”或“ldaps://”,例如ldap://ds.example.com:389或ldaps://ds.example.com:636。
    • 连接到未启用TLS的LDAP服务器时需要设置参数“ldap.allow-insecure”的值为“true”。

    password-authenticator.properties

    ldap.user-bind-pattern

    -

    -

    此属性可用于指定密码验证的LDAP用户绑定字符串。此属性必须包含模式${USER},在密码验证时将替换为实际用户名。

    属性可以包含多个模式,以冒号分隔。每个模式将按顺序检查,直到登录成功或所有登录失败。示例:${USER}@corp.example.com:${USER}@corp.example.co.uk

    password-authenticator.properties

  2. 单击左上方的“保存”,在弹出的对话框中单击“确定”保存配置。
  3. 选择“集群 > 服务 > HetuEngine > 更多 > 重启服务”,重启HetuEngine服务以便参数生效。
  4. 若存在运行中的计算实例需重启HetuEngine计算实例。

    1. 使用HetuEngine管理员用户登录FusionInsight Manager,选择“集群 > 服务 > HetuEngine > 概览”,单击“HSConsole WebUI”后面的链接,进入HSConsole界面。
    2. 单击“计算实例”,勾选待操作实例,单击“重启”按钮重启HetuEngine计算实例。

  5. 使用客户端提交SQL请求。

    • Cli客户端,需要刷新Zookeeper URL地址串的“scheme”为“https”。具体操作步骤如下:
      1. 修改客户端安装路径下“HetuEngine/component_env“文件中“HETUSERVER_URI“参数的“http”为“https”。
      2. 进入客户端安装路径,执行source HetuEngine/component_env命令。
      3. 输入hetu-cli --tenant default --user hetu_test --password命令,回车后填写外部LDAP用户hetu_test的密码即可。
    • JDBC客户端,需要添加如下连接参数:

      SSL=true

      hetuSSL=false

      SSLVerification=NONE

      user=LDAP用户的名称,例如hetu_test

      password=LDAP用户的密码

    • Python客户端,需要添加如下连接参数:

      SSL=true

      hetuSSL=false

      SSLVerification=NONE

      user=LDAP用户的名称,例如hetu_test

      password=LDAP用户的密码

配置HetuEngine动态脱敏功能

虽然Ranger已经支持了静态脱敏的能力,但是静态脱敏后会出现数据不可用的问题,主要表现为:

  • 脱敏的数据无法匹配谓词过滤。
  • 脱敏后的数据无法进行Join等联合查询操作。
  • 只支持string类型的列脱敏。

静态脱敏场景单一,限制较多,数据在计算前就已经被脱敏,为满足更灵活的脱敏需求,HetuEngine提供支持数据“可算不可见”、集群内脱敏策略自动传递等数据脱敏能力,即动态脱敏。

操作场景

通过MRS Ranger配置HetuEngine脱敏信息,HetuEngine支持的动态脱敏包括查询和写入场景:

  • 配置脱敏后,查询表时配置脱敏的列数据将进行自动脱敏。配置脱敏的列能正常进行谓词匹配,仅对输出结果进行脱敏。
  • 配置脱敏的列能正常做联合查询(Join、Union、In、Exist等),仅对最后的输出结果进行脱敏。
  • 通过View引用的脱敏列信息,查询View后,数据也是脱敏的。
  • 配置脱敏后,对应函数计算、函数嵌套、以及子查询嵌套的查询结果脱敏。
  • 支持查询使用别名、CTS使用别名时脱敏。
  • CTS(create table as select)后新表数据自动脱敏。

    如果数据源为本集群Hive数据源,则数据本身不脱敏,脱敏策略传递后(仅支持本集群Hive数据源),查询结果脱敏;其他数据源数据脱敏后输出。

  • ITS(insert table select)后新表数据支持脱敏。

    如果数据源为本集群Hive数据源,则数据本身不脱敏,脱敏策略传递后(仅支持本集群Hive数据源),查询结果脱敏;其他数据源数据脱敏后输出。

传递脱敏策略:

  • 若目标表对应列没有脱敏策略,则直接传递脱敏策略。
  • 若目标表已有脱敏策略,且与源表相同,则脱敏策略不变。
  • 若目标表已有脱敏策略且与源表有冲突,则目标表脱敏策略会重置为“***”。

注意事项与使用限制

  • 动态脱敏仅支持在安全模式集群中使用。
  • 当前Ranger配置CUSTOM自定义策略时,动态脱敏按照“*”策略处理,例如“ABCDE”脱敏为“*****”。
  • 由于Ranger策略更新检测周期为30s,执行CTS等语句如果涉及到传递策略,在Ranger新建的策略存在一定的延迟。
  • 跨域场景下,对端HetuEngine作为本端的数据源,如果需要脱敏需在本端集群配置脱敏策略。
  • 由于查询视图时,实际访问表的是视图owner,所以在为敏感数据表创建视图时,需要对创建视图的用户脱敏。

开启动态脱敏操作步骤

  1. 使用可访问HetuEngine WebUI界面的用户登录FusionInsight Manager,选择“集群 > 服务 > HetuEngine”,进入HetuEngine服务页面。
  2. 在概览页签下的“基本信息”区域,单击“HSConsole WebUI”后的链接,进入HSConsole界面。
  3. 在“计算实例”页签,在待操作的实例所属租户所在行的“操作”列单击“配置”。
  4. 在“自定义配置”单击“增加”添加如下参数。

    表2-768 HetuEngine动态脱敏参数

    参数

    取值示例

    参数文件

    描述

    hetu.dynamic.masked.enabled

    true

    • coordinator.config.properties
    • worker.config.properties
    • 开启HetuEngine动态脱敏功能
    • 默认值:false

  5. 添加完成后将“立即启动”置为“是”,单击“确定”。
  6. 开启动态脱敏策略传递功能。

    1. 单击“数据源”,在数据源名称为“hive”的本地数据源的“操作”列,单击“编辑”。
    2. 在“自定义配置”单击“增加”,添加参数“hive.dynamic.masked.policy.sync.enabled”,值为“true”,单击“确定”。
      • 动态脱敏与静态脱敏均基于Ranger配置的脱敏策略,需要开启HetuEngine服务的Ranger功能。
      • Ranger脱敏策略介绍以及配置方法见HetuEngine数据脱敏

特性说明

  • HetuEngine动态脱敏后返回字段类型与输出列的schema类型一致,无法保持一致的使用null表示脱敏后的结果。
  • 支持不脱敏UDF名单和强制hash脱敏UDF名单配置。

    参数名称

    说明

    默认值

    hetu.udf.hash.dynamic.mask

    开启动态脱敏后,使用Partial mask: show last 4、Partial mask: show first 4、Custom脱敏策略脱敏时,需要强制使用hash脱敏处理的函数名单。如果有多个函数需要强制使用hash脱敏处理,则以英文逗号隔开。

    substr,substring,concat,concat_ws,lpad,repeat,rpad,reverse,replace,split

    hetu.udf.skip.dynamic.mask

    开启动态脱敏后,不需要脱敏处理的函数名单。如果有多个函数不需要脱敏处理,则以英文逗号隔开。

    -

    “hetu.udf.skip.dynamic.mask”的优先级大于“hetu.udf.hash.dynamic.mask”。如果一个函数名同时配置在“hetu.udf.skip.dynamic.mask”和“hetu.udf.hash.dynamic.mask”中时,会按照“hetu.udf.skip.dynamic.mask”逻辑处理,不进行脱敏处理。

  • Custom脱敏策略支持配置mask_partial函数:
    mask_partial函数介绍
    • 处理数值类型的mask_partial说明。

      mask_partial(column_name, mask_digital, mask_from[, mask_to])

      描述:针对数值类型数据(int、decimal、float、bigint、tinyint、smallint、double),将第mask_from到mask_to位的数字部分脱敏成mask_digital对应的数字。

      表2-769 参数说明1

      参数

      说明

      mask_to

      允许缺省,缺省时即脱敏到数据结束位置。

      mask_digital

      只能取[1,9]区间内的数字。

      返回值类型:与入参column_name数据类型相同。

      • 对于decimal、float、double类型,小数点参与计数,但不参与脱敏。如:列内容为:3.1415926,mask_partial('2',1,3),返回值:2.2415926。
      • Spark-beeline场景下,使用mask_partial对decimal脱敏后,结果会不符合预期,但结果是脱敏的,非原始值。
    • 处理字符类型的mask_partial说明。

      mask_partial(column_name , mask_char, mask_from[, mask_to])

      描述:针对字符类型数据(char, varchar, string),对照指定的输入输出格式,将第mask_from到mask_to位的数字部分脱敏成mask_char指定的字符。

      表2-770 参数说明2

      参数

      说明

      mask_char

      脱敏字符,仅允许长度为1的任意字符。支持字符范围:

      • 大写字母:A, B, C, D, E, ..., Z
      • 小写字母:a, b, c, d, e, ..., z
      • 阿拉伯数字:0, 1, 2, 3, 4, 5, 6, 7, 8, 9
      • 标点符号:句号(.)、逗号(,)、问号(?)、感叹号(!)、冒号(:)、分号(;)、引号(")、括号(( 或 ),[ 或 ],{ 或 })、连字符(-)
      • 特殊符号:@ 符号 (@)、井号 (#)、美元符号 ($)、百分号 (%)、和号 (&)、星号 (*)、加号 (+)、等号 (=)、波浪号 (~)、下划线 (_)、竖线 (|)

      mask_from

      脱敏范围的起始位置,要求大于0。

      mask_to

      脱敏范围的结束位置,允许缺省。缺省时,即脱敏到原始数据结束位置。

      返回值类型:与入参column_name数据类型相同。

  • 处理时间类型的mask_partial说明。

    mask_partial(column_name, mask_digital, mask_from[, mask_to])

    描述:针对时间类型数据(Date、TimeStamp),将第mask_from到mask_to位的数字部分脱敏成mask_digital对应的数字。

    表2-771 参数说明3

    参数

    说明

    mask_to

    允许缺省,缺省时即脱敏到数据结束位置。

    mask_digital

    只能取[1,9]区间内的数字。

    返回值类型:与入参column_name数据类型相同。

    1. Date只支持年、月、日的脱敏。
    2. TimeStamp支持年、月、日、时、分、秒、毫秒/微秒/纳秒的脱敏。
      • Date、TimeStamp中的“-”、“/”、空格、“:”参与计数,不脱敏。
      • Date、TimeStamp中,月、日的值脱敏后超过正常范围后将进行反转处理,例如:

        月的值为02,脱敏后为33,最终值为33%12=9。

        日的值为10,脱敏后为44,最终值为44% (脱敏后的年对应的脱敏后的月的天数) , 假设脱敏后的年为2024,脱敏后的月为9(2024年9月有30天), 最终值为14。

    3. TimeStamp中的时、分、秒、毫秒/微秒/纳秒脱敏后,超过正常范围后,也进行反转处理。
      • 时的值为20,脱敏后为66,最终值为66%24=18。
      • 分的值为30,脱敏后为66,最终值为66%60=6。
      • 秒的值为50,脱敏后为66,最终值为66%60=6。
      • 毫秒/微秒/纳秒不涉及超出正常值范围场景。

        例如:

        date类型脱敏:值为1920-01-03,使用mask_partial('2',5,8)脱敏后,结果为1920-10-03。

        TimeStamp类型脱敏:值为'2023-12-05 12:34:56.789' ,使用mask_partial('2',5,8)脱敏后,结果为'2023-10-05 12:34:56.789'。

    mask_partial使用约束与限制说明
    • MRS mask_partial的入参中不支持嵌套UDF。
    • mask_partial遇到数值、字符、时间之外的不支持的类型时,统一返回null。
    • mask_from从1开始计数,即mask_from要求是大于0的整数,小于1时,默认按照1处理。
    • mask_to可以不填,不填时,默认为对应字符的结束位置,mask_to可以为负数,-1表示字符的结束位置。
    • mask_to对应字符串的位置不能在mask_from之前,遇到该情况时,统一返回null。
    • mask_partial处理类型为数值类型时, mask_digital不属于[1,9]区间内的数字时,UDF函数返回null。
    • mask_partial处理类型为字符类型时, mask_char不支持该字符类型时,UDF函数返回null。
    • 遇到mask_partial编写错误、入参不支持、入参有误场景, 引擎直接发生异常。
    • 支持中文字符的脱敏。

    mask_partial使用介绍

    在ranger上配置脱敏策略,Mask Conditions选择Custom,在自定义输入框中填写mask_partial(mask_digital, mask_from[, mask_to]),其中mask_digital需要使用单引号括起来,如'9'、'*'。

    例如:mask_partial('*',1,5)

    Mask Conditions选择Custom,配置mask_partial脱敏函数时,第一个入参不需要指定列名,直接从mask_partial函数介绍中的第二个入参开始填写。

快速使用HetuEngine访问Hive数据源

本章节指导用户从零开始使用HetuEngine对接Hive数据源,并通过HetuEngine查询本集群Hive数据源的数据库表。

前提条件

  • 集群已安装HetuEngine、Hive服务及其所依赖的服务(DBService、KrbServer、Zookeeper、HDFS、Yarn、MapReduce)且运行正常。
  • 如集群已启用Kerberos认证,需提前创建HetuEngine的用户并授予相关权限,具体操作请参见创建HetuEngine权限角色。且需要通过Ranger为该用户配置操作数据源的数据库、表、列的管理权限,具体操作请参考添加HetuEngine的Ranger访问权限策略
  • 已安装集群客户端,例如安装目录为“/opt/hadoopclient”。

操作步骤

  1. 创建并启动HetuEngine计算实例。

    1. 使用HetuEngine管理员用户登录FusionInsight Manager,选择“集群 > 服务 > HetuEngine”,进入HetuEngine服务页面。
    2. 在概览页签下的“基本信息”区域单击“HSConsole WebUI”后的链接,进入HSConsole界面。
    3. 选择“计算实例 > 创建配置”。
      1. 在“基本配置”区域中,选择“所属租户”为用户所关联的租户,配置“实例部署超时时间(秒)”和“实例数量”。
      2. 根据实际资源规划配置“Coordinator容器资源配置”、“Worker容器资源配置”以及“高级配置”区域相关参数,参数详情可参考创建HetuEngine计算实例章节或保持默认值即可。

        创建计算实例时的默认配置只申请极少量的资源,仅供基本功能测试。用户需要根据实际业务需求和可用资源进行参数配置,可参考配置HetuEngine资源组配置HetuEngine Worker节点数量

      3. 配置完成后将“立即启动”置为“是”,单击“确定”等待实例配置完成。

  2. 登录安装有HetuEngine客户端的节点,执行以下命令,切换到客户端安装目录。

    cd /opt/hadoopclient

  3. 执行以下命令,配置环境变量。

    source bigdata_env

  4. 认证或指定用户。

    • 安全模式集群:执行以下命令认证用户

      kinit HetuEngine组件操作用户

      例如:

      kinit hetu_test

      根据提示输入用户密码,首次登录需重置密码。

    • 普通模式集群:执行以下命令指定用户

      hetu-cli --user HetuEngine组件操作用户 --tenant 租户名称

      例如:

      hetu-cli --user hetu_test --tenant default

  5. 执行以下命令,登录数据源的catalog。支持通过使用“--mode”参数来选择通过ZooKeeper连接或HSFabric连接方式登录数据源。

    • 通过ZooKeeper连接(不指定“--mode”参数则默认为该方式)

      hetu-cli --catalog 数据源名称 --tenant 租户名称

      例如执行以下命令:

      hetu-cli --catalog hive --tenant default

    • 通过HSFabric连接(需确保已安装HSFabric实例)

      hetu-cli --mode hsfabric --catalog 数据源名称 --tenant 租户名称

      例如执行以下命令:

      hetu-cli --mode hsfabric --catalog hive --tenant default

    • 本集群的Hive数据源名称默认为“hive”。如需对接集群外部的数据源,可参考添加HetuEngine数据源进行操作,在HSConsole界面配置外部数据源。
    • 首次登录客户端需要启动后台HetuEngine集群,大约需等待120秒,可以进入客户端界面。
    • 支持ANSI SQL语法,具体请参考《MapReduce服务(MRS) 3.5.1-LTS HetuEngine SQL语法手册(for 华为云Stack 8.5.1)》
    • 租户的严格校验模式:
      • HetuEngine支持租户级资源隔离,将SQL分配给指定的资源队列执行,来达到资源合理分配的目的。需要使用客户端时添加“--tenant”参数指定租户资源队列。
      • 如果不需要资源隔离(不推荐),可以将“tenant.strict.mode.enabled”参数值设置为“false”。不指定租户信息时,默认租户为“Yarn”,可能会出现多个用户使用相同租户队列的情况,从而无法达到资源隔离的效果。

        登录Manager,选择“集群 > 服务 > HetuEngine > 配置 > 全部配置”,搜索“tenant.strict.mode.enabled”参数,将参数值配置为“false”并保存。单击“实例”页签,勾选所有“配置过期”的角色实例,选择“更多 > 重启实例”,根据界面提示重启实例以使配置生效。

    • 如果开启了租户的严格校验模式,使用HetuEngine的跨域功能,需要配置HetuEngine数据源的“hsfabric.local.tenant”参数,可参考添加跨集群HetuEngine数据源

    参数说明:

    • --mode:(可选)指定登录数据源方式。
    • --catalog:(可选)指定的数据源名称。
    • --tenant:(可选)指定集群启动的租户资源队列,不指定为租户的默认队列。使用此参数时,业务用户需要具有该租户对应角色的权限。
      • 必选:启用了租户的严格校验模式,默认开启。
      • 可选:未启用租户的严格校验模式。
    • --schema:(可选)指定要访问数据源下的schema名称。
    • --user:(普通模式下必选)指定要登录客户端执行业务的用户名称,该用户至少需要具有“--tenant”指定队列的相应角色的业务用户,且不能是操作系统用户。
    • 其他参数可以执行hetu-cli --help查看。
    java -Djava.security.auth.login.config=/opt/client/HetuEngine/hetuserver/conf/jaas.conf -Dzookeeper.sasl.clientconfig=Client -Dzookeeper.auth.type=kerberos -Djava.security.krb5.conf=/opt/client/KrbClient/kerberos/var/krb5kdc/krb5.conf -Djava.util.logging.config.file=/opt/client/HetuEngine/hetuserver/conf/hetuserver-client-logging.properties -jar /opt/client/HetuEngine/hetuserver/jars/hetu-cli-*-executable.jar --catalog hive --deployment-mode on_yarn --server https://10.112.17.189:24002,10.112.17.228:24002,10.112.17.150:24002?serviceDiscoveryMode=zooKeeper&zooKeeperNamespace=hsbroker --krb5-remote-service-name HTTP --krb5-config-path /opt/client/KrbClient/kerberos/var/krb5kdc/krb5.conf
    hetuengine> 

  6. 执行以下命令,查看数据库信息:

    show schemas;
         Schema
    --------------------
     default
     information_schema
    (2 rows)
    Query 20230228_064136_00023_9kpap@default@HetuEngine, FINISHED, 3 nodes
    Splits: 36 total, 36 done (100.00%)
    0:02 [2 rows, 35B] [0 rows/s, 15B/s]

创建HetuEngine计算实例

操作场景

本章节指导用户新创建HetuEngine计算实例。计算实例创建成功后,停止集群前需手动停止计算实例;重启集群后,要使用集群中的计算实例,需要手动启动计算实例。

单个租户可以创建多个计算实例,多个计算实例负载均衡,可以提高性能及容错能力。

前提条件

  • 已创建用于访问HetuEngine WebUI界面的用户,如hetu_user,用户创建具体操作请参见创建HetuEngine权限角色
  • 已在待操作集群创建所需租户。租户创建请参考租户资源。请确保修改HetuEngine计算实例配置时,对应的租户有足够的内存和CPU资源。
    • 创建HetuEngine计算实例时必须使用“叶子租户”类型的租户,只有叶子租户的队列才能提交Yarn任务。
    • 为了避免资源竞争带来的不确定性因素,建议为HetuEngine使用的租户创建独立资源池。

操作步骤

  1. 使用hetu_user登录FusionInsight Manager,选择“集群 > 服务 > HetuEngine”,进入HetuEngine服务页面。
  2. 在概览页签下的“基本信息”区域单击“HSConsole WebUI”后的链接,进入HSConsole界面。
  3. 选择“计算实例 > 创建配置”,参考如下配置计算实例。

    1. 配置“基本配置”,参数配置请参考表2-772
      表2-772 基本配置说明

      参数

      描述

      取值样例

      所属租户

      实例所属租户,新建计算实例只能选择无计算实例的租户。

      在“所属租户”下拉列表中选取。

      实例部署超时时间(秒)

      通过Yarn Service部署启动计算实例的超时时间。从启动计算实例开始计时,当超过该时间后,如果计算实例仍在“创建中”或“启动中”,则该计算实例状态会显示为“错误”,同时会停止Yarn上正在创建或启动中的计算实例。

      300

      取值范围:1~600

      实例数量

      在当前所属租户下创建的计算实例个数。

      可根据实际需要配置多个计算实例,多个计算实例可自动负载均衡,实现并发度水平扩展。

      须知:

      配置多个计算实例时:

      • 需确保集群资源充足。单租户多实例需要的资源为单实例资源*实例个数(每个计算实例的规格一致,不支持差异化配置)。
      • 需使用短连接方式,并以HSFabric模式连接HetuEngine,该模式支持更优的负载均衡调度能力。

      1

      取值范围:1-50

    2. 配置“Coordinator容器资源配置”,参数配置请参考表2-773
      表2-773 Coordinator容器资源配置参数说明

      参数

      描述

      取值样例

      容器内存(MB)

      Yarn分配给计算实例Coordinator的单个Container的内存大小,单位:MB。

      默认值:5120

      取值范围:1~10240000

      vcore

      Yarn分配给计算实例Coordinator的单个Container的CPU(vcore)数量。

      默认值:1

      取值范围:1~10000

      数量

      Yarn分配给计算实例Coordinator的Container的数量。

      默认值:2

      取值范围:1~3

      JVM

      登录FusionInsight Manager,选择“集群 > 服务 > HetuEngine > 配置”,在“全部配置”页签搜索“extraJavaOptions”,属于“coordinator.jvm.config”参数文件内该参数的值即为JVM的参数取值。

      -

    3. 配置“Worker容器资源配置”,参数配置请参考表2-774
      表2-774 Worker容器资源配置参数说明

      参数

      描述

      取值样例

      容器内存(MB)

      Yarn分配给计算实例Worker的单个Container的内存大小,单位:MB。

      默认值:10240

      取值范围:1~10240000

      vcore

      Yarn分配给计算实例Worker的单个Container的CPU(vCore)数量。

      默认值:1

      取值范围:1~10000

      数量

      Yarn分配给计算实例Worker的Container的数量。

      默认值:2

      取值范围:1~256

      JVM

      登录FusionInsight Manager,选择“集群 > 服务 > HetuEngine > 配置”,在“全部配置”页签搜索“extraJavaOptions”,属于“worker.jvm.config”参数文件内该参数的值即为JVM的参数取值。

      -

    4. 配置“高级配置”参数,参数配置请参考表2-775
      表2-775 高级配置参数说明

      参数

      描述

      取值样例

      查询内存占比

      节点查询内存占jvm内存的比例,默认值0.7。当参数等于0时计算功能关闭,且JVM配置中-Xmx值需满足大于或者等于Coordinator或者Worker配置的memory.heap-headroom-per-node与query.max-memory-per-node之和。

      0.7

      是否开启动态伸缩

      若开启动态伸缩,可以在不重启实例的情况下,增加或者减少Worker数量;开启后可能会影响实例性能。多实例模式下,无法开启动态伸缩功能。开启动态伸缩参数介绍见配置HetuEngine Worker节点数量章节。

      -

      是否开启维护实例

      如果要启动物化视图的自动刷新能力,必须存在一个被设置为维护实例的计算实例,且全局唯一。存在多个计算实例时,仅有一个计算实例用作维护实例。

      -

    5. 配置“自定义配置”参数。用户可以添加自定义参数到指定的参数文件中。单击“参数文件”下拉列表选择指定的参数文件:
      • 单击“增加”可以增加自定义配置参数。
      • 单击“删除”可以删除已增加的自定义配置参数。
      • 可通过选择“参数文件”为“resource-groups.json”来配置资源组机制,资源组配置参数请参考表2-776,详细说明请参考配置HetuEngine资源组
        表2-776 资源组配置参数说明

        参数

        描述

        取值样例

        resourcegroups

        集群的资源管理组配置,参数文件下拉列表要选择“resource-groups.json”

        {
        "rootGroups": [{
        "name": "global",
        "softMemoryLimit": "100%",
        "hardConcurrencyLimit": 1000,
        "maxQueued": 10000,
        "killPolicy": "no_kill"
        }],
        "selectors": [{
        "group": "global"
        }]
        }
      • 对于“coordinator.config.properties”、“worker.config.properties”、“log.properties”和“resource-groups.json”参数文件,用户配置自定义参数后,如果该自定义参数名称在指定的参数文件中已经存在,那么会使用自定义参数值替换参数文件中原有参数的值。如果不存在,则添加自定义参数到指定的参数文件中。
      • killPolicy:当查询提交给Worker后,如果总内存使用量超过softMemoryLimit,可选择一种策略终止正在运行的查询,策略如下所示。
        • no_kill(默认值):不终止查询。
        • recent_queries:根据执行顺序的倒序终止查询。
        • oldest_queries:根据执行顺序终止查询。
        • finish_percentage_queries:根据查询执行百分比终止查询。执行百分比最小的查询将首先被终止。
        • high_memory_queries:根据内存使用量终止查询。具有较高内存使用量的查询将首先被终止,以便在查询终止次数最少的情况下,释放更多内存。当两个查询的内存使用量都在限制的10%以内,则进度慢(执行的百分比)的查询被终止,同时两个查询在完成百分比方面的差异在5%以内,则内存使用量大的查询被终止。
    6. 确定配置完成后是否立即启动实例:
      • 是,配置完成后立即启动实例。
      • 否,配置完成后需手动启动实例。

  4. 单击“确定”,等待实例配置完成。

计算实例维护操作注意事项

  • HetuEngine服务处于重启或者滚动重启过程中,请勿通过HSConsole对HetuEngine计算实例进行“创建”、“启动”、“停止”和“删除”等运维操作。
  • 同时处于启动中、创建中、删除中、停止中、扩容中、缩容中或滚动重启中等状态的计算实例个数默认最多为10个,超过10个的计算实例运维操作会在后台进入等待状态。若需要修改并发处理个数,可在Manager界面,选择“HetuEngine > 配置 > 全部配置”,搜索并调整参数“hsbroker.event.task.executor.threads”的值。
  • HetuEngine计算实例重启注意事项
    • HetuEngine计算实例处于重启或者滚动重启过程中,请勿对HetuEngine服务和HetuEngine WebUI界面的数据源进行变更操作,包括修改配置,重启等操作。
    • 如果计算实例只有1个Coordinator或者Worker,请勿对计算实例进行滚动重启。
    • 如果Worker的数量大于10个,实例滚动重启的时间可能会超过200分钟,期间请勿做其他运维操作。
    • 计算实例滚动重启过程HetuEngine会释放Yarn资源并且重新申请,请保证滚动重启过程中Yarn资源的CPU和内存空闲资源足够启动Worker总数量20%的Worker,及该期间Yarn资源不被其他任务抢占,否则会导致实例滚动重启失败。

      Yarn资源:登录FusionInsight Manager,选择“租户资源 > 租户资源管理” ,在“资源配额”中查看队列的空余资源信息。

      单个Worker的CPU和内存资源:使用具有访问HetuEngine WebUI界面权限的用户登录FusionInsight Manager,选择“集群 > 服务 > HetuEngine”,在概览页签下的“基本信息”区域单击“HSConsole WebUI”后的链接,进入HSConsole界面,单击对应实例所在行“操作”列中的“配置”,在“Worker容器资源配置”中查看容器内存和vcore。

    • 滚动重启过程中,请保证Yarn队列的Coordinator或者Worker的Application Manager(am)运行平稳。
  • HetuEngine计算实例重启异常处理
    • 如果滚动重启期间Yarn队列的Coordinator或者Worker的Application Manager(am)发生重启,可能会导致计算实例发生异常,需要停止计算实例,然后启动计算实例进行恢复。
    • 计算实例滚动重启失败后,实例处于亚健康的状态,可能会有Coordinator或者Worker配置不一样或者数量不一样的情况,计算实例的亚健康状态不会自动恢复,需要手动检查确认和恢复,或者再次执行滚动重启操作,或者执行停止计算实例再启动操作。

计算实例状态说明

计算实例创建成功后,可在“计算实例”页签查看当前已创建的实例信息,包括实例所属租户名、对应实例数量、实例状态和资源总量等,实例状态信息如下:

图2-252 计算实例状态
  • 绿色图标:实例处于运行中或亚健康状态。
  • 红色图标:实例故障。
  • 灰色图标:实例已停止、待启动。
  • 蓝色图标:实例处于其他状态,包括扩容中、缩容中、滚动重启中、创建中、启动中、安全启动中、停止中、安全停机中、删除中、已删除、停止中等。

添加HetuEngine数据源

使用HetuEngine跨源跨域访问数据源

HetuEngine跨源功能简介

出于管理和信息收集的需要,企业内部会存储海量数据,包括数目众多的各种数据库、数据仓库等,此时会面临数据源种类繁多、数据集结构化混合、相关数据存放分散等困境,导致跨源查询开发成本高,跨源复杂查询耗时长。

HetuEngine提供了统一标准SQL实现跨源协同分析,简化跨源分析操作。
图2-253 HetuEngine跨源功能示意

跨源关键技术和优势

  • 计算下推:在通过HetuEngine进行跨源协同分析时,为了提升访问效率,HetuEngine从如下所示维度增强了计算下推的能力。
    • Basic Pushed Down类型:Predicate、Projection、Sub-query、Limit。
    • Aggregation Pushed Down类型:Group by、Order by、Count、Sum、Min、Max。
    • Operator Pushed Down类型:<, >、Like、or。
  • 多源异构:协同分析既支持Hive、GaussDB、ClickHouse等结构化数据源,也支持HBase、Elasticsearch等非结构化数据源。
  • 全局元数据:对于非结构化数据源HBase,提供映射表方式将非结构化SCHEMA映射成结构化SCHEMA,实现HetuEngine对HBase的无差别SQL访问;对于数据源信息,提供全局管理。
  • 全局权限控制:数据源的权限均可通过HetuEngine开放给Ranger集中管理,统一控制。

跨源功能使用指导

HetuEngine能够支持多种数据源的快速联合查询并提供可视化的数据源配置、管理页面,可通过HSConsole界面快速添加如下数据源,配置数据源前请先参考HetuEngine交互查询引擎概述

使用跨源协同分析流程

  1. 参考快速使用HetuEngine访问Hive数据源登录HetuEngine客户端。
  2. 注册Hive、HBase、GaussDB A等数据源。
    hetuengine> show catalogs;
      Catalog  
    ----------  
    dws                
    hive         
    hive_dg
    hbase
    system       
    systemremote 
    (6 rows)
  3. 编写SQL进行跨源协同分析。
    select * from hive_dg.schema1.table1 t1 join hbase.schema3.table3 t2 join dws.schema02.table4 t3 on t1.name = t2.item and t2.id = t3.cardNo;

HetuEngine跨域功能简介

HetuEngine提供统一标准SQL对分布于多个地域(或数据中心)的多种数据源实现高效访问,屏蔽数据在结构、存储及地域上的差异,实现数据与应用的解耦。
图2-254 HetuEngine跨域功能示意

跨域关键技术和优势

  • 无单点瓶颈:HSFabric可进行水平扩展,多通道并行传输,速率最大化,跨地域延迟不再成为瓶颈。
  • 更好地计算资源利用:将数据压缩,序列化的任务下推到Worker并行计算。
  • 高效序列化:优化数据序列化格式,同等数据量级下,更低的数据传输量。
  • 流式传输:基于HTTP 2.0 stream, 保证HTTP协议通用性的同时,减少大量数据传输中RPC重复调用。
  • 断点续传:防止数据传输过程中连接异常断开后重传大量数据。
  • 流量管控:支持按地区限制数据传输所占用的网络带宽,避免在跨地域有限带宽场景下因流量独占而影响其他业务的正常使用。

跨域功能使用指导

前提条件:

  • 确保本端和远端集群的数据节点上分别部署至少一个HSFabric实例。
  • 确保本端和远端集群的HSFabric实例所在节点的网络互通。

操作步骤:

  1. 开放本域数据源。通过创建Virtual Schema方式来对远端访问请求屏蔽本域的物理数据源的真实Schema信息、实例信息,远端使用Virtual Schema名称即可访问本域对应的数据源。

    CREATE VIRTUAL SCHEMA hive01.vschema01 WITH (
      catalog = 'hive01',
      schema = 'ins1'
    );

  2. 参考添加跨集群HetuEngine数据源,在远端HetuEngine上注册“HetuEngine”类型数据源,添加本域HetuEngine
  3. 使用跨域协同分析。

    // 1. 在远端HetuEngine上开放hive1.ins2数据源
    CREATE VIRTUAL SCHEMA hive1.vins2 WITH (
      catalog = 'hive1',
      schema = 'ins2'
    );
    
    // 2. 在本域HetuEngine上注册Hive、GaussDB A、HetuEngine等3种数据源
    hetuengine> show catalogs;
      Catalog  
    ----------  
    dws        
    hetuengine_dc          
    hive         
    hive_dg
    system       
    systemremote 
    (6 rows)
    
    // 3. 在本域HetuEngine上进行跨源协同分析
    select * from hive_dg.schema1.table1 t1 join hetuengine_dc.vins2.table3 t2 join dws.schema02.table4 t3 on t1.name = t2.item and t2.id = t3.cardNo;

跨域限流功能使用指导

  1. 在本地配置HSFabric限流策略配置文件“ratelimit.xml”,配置模板如下:

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <ratelimit>
    	<current-domain>0755</current-domain><!-- city a本域数据源的区域名称 -->
    	<default-bandwidth>5120</default-bandwidth><!-- 默认限制流量为50MB -->
    	<domain-list>
    		<domain>
    			<domainName>0769</domainName><!--目的域数据源信息的区域名称 -->
    			<bandwidth>102400</bandwidth><!-- 从当前域(例如city a)到目的域(例如city b)方向的流量(单位:KB)为100MB -->
    			<cluster-list>
    				<hsfabric><!-- 一个HSFabric Cluster -->
    					<clusterName>hsfabric01</clusterName><!-- 集群描述信息 -->
    					<hsfabric-node>
    						<hsfabricHostPort>10.10.10.10:29900</hsfabricHostPort><!-- 填写HSFabric的传输IP -->
    					</hsfabric-node>
    				</hsfabric>
    			</cluster-list>
    		</domain>
    		<domain>
    			<domainName>0770</domainName>
    			<bandwidth>20480</bandwidth><!-- 从当前域(例如city a)到目的域(例如city b)方向的流量(单位:KB)为20MB -->
    			<cluster-list>
    				<hsfabric><!-- 一个HSFabric Cluster -->
    					<clusterName>hsfabric02</clusterName>
    					<hsfabric-node>
    						<hsfabricHostPort>10.10.10.10:29900</hsfabricHostPort>
    					</hsfabric-node>
    				</hsfabric>
    			</cluster-list>
    		</domain>
    	</domain-list>
    </ratelimit>
    表2-777 “ratelimit.xml”文件参数说明

    参数名称

    描述

    取值样例

    current-domain

    本域数据源区域名称

    0755

    default-bandwidth

    默认限制流量大小(单位:KB)

    5120

    domainName

    目的域数据源信息的区域名称

    0769

    bandwidth

    从当前域(例如city a)到目的域(例如city b)方向的流量(单位:KB)

    102400

    clusterName

    目的域集群描述信息

    hsfabric01

    hsfabricHostPort

    目的域HSFabric的业务IP和端口

    10.10.10.10:29900

  2. 使用可访问HetuEngine WebUI界面的管理员用户登录目的域集群的Manager。
  3. 选择“集群 > 服务 > HetuEngine > 配置 > 全部配置”。
  4. 选择“HSFabric(角色) > 限流”,单击“上传文件”,选择步骤 1准备好的“ratelimit.xml”文件并上传,等待文件上传成功。
  5. 单击“实例”,勾选“HSFabric”实例,选择“更多 > 重启实例”,输入密码重新启动HSFabric实例。

添加Hive数据源

操作场景

HetuEngine服务在安装时已经将共部署(与HetuEngine在同一个Hadoop集群)的Hive数据源默认实现对接,数据源名称为“hive”,不可删除。部分默认配置不可修改,如数据源名称,数据源类型,服务端Principal,客户端Principal等。但当环境配置发生变化时,如修改了本集群的“本端域”域名,重启HetuEngine服务可以自动同步共部署Hive数据源的相关配置,如服务端Principal,客户端Principal。

  • HetuEngine目前支持对接的数据格式包括:avro、text、rctext、orc、parquet、sequencefile。
  • HetuEngine对接Hive数据源,不支持指定多分隔符建表,但对于在Hive数据源中指定MultiDelimitSerDe类作为序列化类来创建text数据格式的多分隔符表,可以通过HetuEngine查询,其他场景不支持。
  • HetuEngine对接的Hive数据源支持Hudi表重定向功能。该功能支持在Hive connector访问Hudi表时重定向到Hudi connector,从而使用Hudi connector高级功能。使用该功能需提前配置目标Hudi数据源,并确保Hudi数据源与当前Hive数据源的Metastore URL一致,并在Hive数据源中配置“开启Hudi重定向”参数即可。
  • 若需要使用Hive Metastore隔离功能,需要在Hive侧配置“HIVE_METASTORE_URI_HETU”,配置完成后需要重启HetuEngine服务的HSBroke实例,刷新Hive Metastore URI信息。可参考配置组件隔离访问Hive MetaStore

本章节指导用户在HSConsole界面添加集群外部的Hive类型数据源。

前提条件

  • 数据源所在集群域名与HetuEngine集群域名不能相同。
  • 数据源所在集群与HetuEngine集群节点网络互通。
  • HetuEngine所在集群的所有节点的“/etc/hosts”文件中,添加待对接数据源所在集群的主机名称和对应的IP映射,及其“/etc/hosts”文件中的“10.10.10.10 hadoop.系统域名”(如“10.10.10.10 hadoop.hadoop.com”),否则HetuEngine无法根据主机名称连接到非本集群节点。
  • 已创建HetuEngine计算实例。
  • 数据源所在集群与HetuEngine集群的时间需保持一致。

操作步骤

  1. 获取Hive数据源集群的“hdfs-site.xml”和“core-site.xml”配置文件。

    1. 登录Hive数据源所在集群的FusionInsight Manager页面。
    2. 在“主页”右上方单击“下载客户端”,根据界面提示下载“完整客户端”文件到本地。
    3. 将下载的客户端文件压缩包解压,获取“FusionInsight_Cluster_1_Services_ClientConfig/HDFS/config”路径下的“core-site.xml”和“hdfs-site.xml”文件。
    4. 查看“core-site.xml”文件中是否有“fs.trash.interval”配置项,若没有,则新增以下配置。
      <property>
      <name>fs.trash.interval</name>
      <value>2880</value>
      </property>
    5. 查看“hdfs-site.xml”文件中的“dfs.client.failover.proxy.provider.NameService名称”配置项,并将其值修改成“org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider”。
      以NameService名称为“hacluster”为例:
      <property>
      <name>dfs.client.failover.proxy.provider.hacluster</name>
      <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
      </property>

      若对接的Hive数据源集群和HetuEngine处于同一个Hadoop集群中,“hdfs-site.xml”和“core-site.xml”配置文件的获取方式为从HDFS中获取,参考使用HDFS客户端进入集群HDFS客户端,执行以下命令获取:

      hdfs dfs -get /user/hetuserver/fiber/restcatalog/hive/core-site.xml

      hdfs dfs -get /user/hetuserver/fiber/restcatalog/hive/hdfs-site.xml

  2. 获取Hive数据源的代理用户的“user.keytab”和“krb5.conf”文件。

    1. 登录Hive数据源所在集群的FusionInsight Manager页面。
    2. 选择“系统 > 权限 > 用户”。
    3. 选择对应的数据源用户,在“操作”列中选择“更多 > 下载认证凭据”。
    4. 从下载的文件中解压后获取“user.keytab”和“krb5.conf”文件。

      Hive数据源的代理用户需至少关联“hive”用户组。

  3. 获取Metastore URL和服务端Principal。

    1. 获取Hive数据源所在集群客户端文件压缩包解压路径下的“FusionInsight_Cluster_1_Services_ClientConfig/Hive/config”下的“hive-site.xml”文件。
    2. 打开“hive-site.xml”文件,搜索“hive.metastore.uris”,其对应的值即为Metastore URL的值。搜索“hive.server2.authentication.kerberos.principal”,其对应的值即为服务端Principal的值。

  4. 使用HetuEngine管理员用户登录FusionInsight Manager,选择“集群 > 服务 > HetuEngine”,进入HetuEngine服务页面。
  5. 在概览页签下的“基本信息”区域,单击“HSConsole WebUI”后的链接,进入HSConsole界面。
  6. 选择“数据源”,单击“添加数据源”。在“添加数据源”页面填写参数。

    1. 配置“基本配置”,填写数据源名称,选择数据源类型“Hive”。
    2. 配置“Hive配置”,参数配置请参考表2-778
      表2-778 Hive配置

      参数

      描述

      取值样例

      hdfs-site文件

      在本地选择步骤 1获取的“hdfs-site.xml”配置文件,文件名固定。

      -

      core-site文件

      在本地选择步骤 1获取的“core-site.xml”配置文件,文件名固定。

      -

      yarn-site文件

      在数据源客户端Yarn/config路径下获取,只有对接Hudi数据源的时候才需要上传此文件。

      -

      krb5文件

      开启安全模式时填写此参数。

      Kerberos认证用到的配置文件,在本地选择步骤 2获取的“krb5.conf”文件。

      krb5.conf

      开启数据源鉴权

      是否同时使用Hive数据源的权限策略进行鉴权。

      HetuEngine服务Ranger不启用时必须选“是”,Ranger启用后选“否”。

    3. 配置“Metastore配置”,参数配置请参考表2-779
      表2-779 Metastore配置

      参数

      描述

      取值样例

      Metastore URL

      数据源的Metastore的URL。获取方法请参考步骤 3

      thrift://192.168.1.1:21088,thrift://192.168.1.2:21088,thrift://192.168.1.13:21088

      开启Hudi重定向

      已配置与当前Hive数据源的Metastore URL一致的目标Hudi数据源时可配置此功能。

      开启后可以在Hive connector访问Hudi表时重定向到Hudi connector,从而使用Hudi connector高级功能。

      Hudi数据源名称

      开启Hudi重定向时需配置目标Hudi数据源。

      下拉框中显示所有已配置的Hudi数据源,只能选择满足Metastore URL条件的Hudi数据源。

      -

      安全认证机制

      打开安全模式后自动默认为KERBEROS。

      KERBEROS

      服务端Principal

      开启安全模式时填写此参数。该数据源客户端“hive-site.xml”中“hive.server2.authentication.kerberos.principal”参数值。

      meta访问metastore带域名的用户名。获取方法请参考步骤 3

      hive/hadoop.hadoop.com@HADOOP.COM

      客户端Principal

      开启安全模式时填写此参数。

      格式为:访问metastore的用户名@域名大写

      访问metastore的用户名就是步骤 2中获取的“user.keytab”文件所属的用户。

      说明:

      用户可登录FusionInsight Manager,选择“系统 > 权限 > 域和互信”,查看“本端域”参数,即为当前系统域名,如“HADOOP.COM”。

      admintest@HADOOP.COM

      keytab文件

      开启安全模式时填写此参数。

      连接metastore用户名的keytab凭据文件,固定名称。在本地选择步骤 2获取的“user.keytab”文件。

      user.keytab

    4. 配置“连接池配置”,参数配置请参考表2-780
      表2-780 连接池配置

      参数

      描述

      取值样例

      是否开启连接池

      访问Hive Metastore时是否开启连接池。

      最大连接数

      每个Coordinator对每个Hive Metastore的最大连接数。取值范围:20-200,默认值:50。

      50

    5. (可选)配置“Hive用户信息配置”,参数配置请参考表2-781
      “Hive用户信息配置”与“HetuEngine-Hive用户映射配置”要搭配使用,HetuEngine在对接Hive数据源且“开启数据源鉴权”为“是”时,通过用户映射,使得HetuEngine的用户具备与Hive数据源被映射的用户访问Hive数据源时同样的权限。可以多个HetuEngine用户对应一个Hive用户。
      表2-781 Hive用户信息配置

      参数

      描述

      Data Source User

      数据源用户信息。

      如果配置了数据源用户为hiveuser1,那么必须有映射到hiveuser1的HetuEngine用户。例如创建hetuuser1映射到hiveuser1。

      keytab文件

      获取该数据源对应用户的认证凭据。

    6. (可选)配置“HetuEngine-Hive用户映射配置”,参数配置请参考表2-782
      表2-782 HetuEngine-Hive用户映射配置

      参数

      描述

      HetuEngine User

      HetuEngine用户信息。

      Data Source User

      数据源用户信息。如hiveuser1(表2-781中配置的数据源用户)。

    7. (可选)修改自定义配置。
      • 单击“增加”,参考表2-783增加自定义配置参数。
        表2-783 自定义配置

        参数

        描述

        取值样例

        hive.metastore.connection.pool.maxTotal

        连接池可创建的最大连接数。

        50(取值范围20~200)

        hive.metastore.connection.pool.maxIdle

        连接池最大空闲线程数,当空闲线程达到最大值时不会释放新的线程。

        默认值:8

        8(取值范围0~200,不能超过最大连接数)

        hive.metastore.connection.pool.minIdle

        连接池最小空闲线程数,此时线程池不会创建新的线程。

        默认值:0

        0(取值范围0~200,不能超过hive.metastore.connection.pool.maxIdle的值)

        hive.rcfile.time-zone

        将二进制编码的时间戳值调整到特定的时区。

        当Table存储格式为RCBINARY或者RCFILE时,HetuEngine侧插入的timestamp类型数据在Hive 3.1.0及以后版本的查询结果会比HetuEngine侧早8个小时,此时需要配置为UTC。

        默认值:JVM default(即从JVM里获取本地时区)

        UTC

        hive.orc.use-column-names

        是否按照列名方式访问ORC存储文件:

        • true:是
        • false(默认值):否

        false

        hive.parquet.use-column-names

        是否按照列名方式访问PARQUET存储文件:

        • true:是
        • false(默认值):否

        false

        hive.hdfs.wire-encryption.enabled

        若对接数据源上HDFS的“hadoop.rpc.protection”参数值为“authentication”或“integrity”时,需添加此参数,并设置值为false。

        false

        hive.strict-mode-restrictions

        可设置如下约束条件限制用户查询:

        • NONE:没有约束
        • DISALLOW_EXCEEDED_SCAN_ON_PARTITION(默认值):不允许单Hive分区表扫描最大分区数大于hive.max-partitions-per-scan参数值

        DISALLOW_EXCEEDED_SCAN_ON_PARTITION

        hive.timestamp-precision

        可指定Hive表TIMESTAMP字段类型的精度,精度高于配置的值将会被截取:

        • MILLISECONDS(默认值):精度3,毫秒
        • MICROSECONDS:精度6,微秒
        • NANOSECONDS:精度9,纳秒

        MICROSECONDS

        hive.ignore-absent-partitions

        查询是否忽略分区下是否有文件丢失。

        • true:允许查询分区下存在文件丢失的情况
        • false:不允许查询分区下存在文件丢失的情况,会直接报错(手动对接数据源时,不填则默认为该值)

        true

        hive.metastore.uri.shuffle.enabled

        并发访问MetaStore时,支持负载均衡,而不是只优先选择第一个可用的MetaStore地址。

        • true:是
        • false(默认值):否

        false

      • 单击“删除”,可以删除已增加的自定义配置参数。
        • 以上自定义配置项,均可通过增加“coordinator.”和“worker.”前缀分别对Coordinator和Worker进行差异化配置。例如自定义添加“worker.hive.metastore.connection.pool.maxTotal”为50,表示配置Worker访问hive metastore时的最大连接数为50。若未添加前缀,则表示该配置项对Coordinator和Worker都生效。
        • 系统默认设置Coordinator访问hive metastore时的最大连接数为50,最大空闲连接数为8,最小空闲连接数为0,Worker访问hive metastore时的最大连接数为20,最大空闲和最小空闲连接数为0。
        • hive.max-partitions-per-scan:为单Hive分区表扫描最大分区个数。系统默认100000。
        • HetuEngine服务在安装时共部署的Hive数据源的“hive.ignore-absent-partitions”默认为“true”。
    8. 单击“确定”。

  7. 登录集群客户端所在节点,执行以下命令,切换到客户端安装目录并认证用户。

    cd /opt/hadoopclient

    source bigdata_env

    kinit HetuEngine组件操作用户 (普通模式集群跳过)

  8. 执行以下命令,登录数据源的catalog。

    hetu-cli --catalog 数据源名称 --schema 数据库名 --tenant 租户名称

    例如执行以下命令:

    hetu-cli --catalog hive_1 --schema default --tenant default

  9. 执行以下命令,可正常查看数据库表信息或不报错即表示连接成功。

    show tables;

数据类型映射

目前Hive数据源支持的数据类型为:BOOLEAN、TINYINT、SMALLINT、INT、BIGINT、REAL、DOUBLE、DECIMAL、NUMERIC、DEC、VARCHAR、VARCHAR(X)、CHAR、CHAR(X)、STRING、DATE、TIMESTAMP、TIME WITH TIMEZONE、TIMESTAMP WITH TIME ZONE、TIME、ARRAY、MAP、STRUCT、ROW。

性能优化

  • 元数据缓存

    Hive连接器支持元数据缓存,以便更快地提供对各种操作的元数据请求。可参考调整HetuEngine元数据缓存

  • 动态过滤

    开启动态过滤有助于Hive连接器的Join算子的计算优化。可参考调整HetuEngine动态过滤

  • 带分区条件查询

    建立分区表并且查询带分区过滤条件有助于过滤部分分区数据,从而提高性能。

  • Insert优化

    通过设置“task.writer-count”的值为“1”和增大“hive.max-partitions-per-writers”的值有助于提升Insert性能。可参考调整HetuEngine INSERT写入优化

约束

  • DELETE语法可以删除整个表的数据,或者分区表的指定分区。
  • Hive元数据库不支持Schema重命名,即不支持ALTER SCHEMA RENAME语法。

添加Hudi数据源

操作场景

HetuEngine支持查询COW/MOR/MOW类型表数据。本章节指导用户在HSConsole界面配置Hudi类型数据源。

HetuEngine不支持Hudi的bootstrap表的读取。

前提条件

  • 创建Hudi数据源的代理用户,该代理用户为人机用户且需拥有hive组。
  • HetuEngine所在集群的所有节点的“/etc/hosts”文件中,添加待对接数据源所在集群的主机名称和对应的IP映射,及其“/etc/hosts”文件中的“10.10.10.10 hadoop.系统域名”(如“10.10.10.10 hadoop.hadoop.com”),否则HetuEngine无法根据主机名称连接到非本集群节点。
  • 参考创建HetuEngine权限角色创建HetuEngine管理员用户。
  • 数据源所在集群与HetuEngine集群的时间需保持一致。

操作步骤

  1. 获取Hudi数据源集群的“hdfs-site.xml”,“core-site.xml”配置文件。

    1. 登录Hudi数据源所在集群的FusionInsight Manager页面。
    2. 在“主页”右上方单击“下载客户端”,根据界面提示下载“完整客户端”文件到本地。
    3. 将下载的客户端文件压缩包解压,获取“FusionInsight_Cluster_1_Services_ClientConfig/HDFS/config”路径下的“core-site.xml”和“hdfs-site.xml”。
    4. 查看“core-site.xml”文件中是否有“fs.trash.interval”配置项,若没有,则新增以下配置。
      <property>
      <name>fs.trash.interval</name>
      <value>2880</value>
      </property>
    5. 查看“hdfs-site.xml”文件中的“dfs.client.failover.proxy.provider.NameService名称”配置项,并将其值修改成“org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider”。
      以NameService名称为“hacluster”为例:
      <property>
      <name>dfs.client.failover.proxy.provider.hacluster</name>
      <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
      </property>

      若对接的Hudi数据源集群和HetuEngine处于同一个Hadoop集群中,“hdfs-site.xml”和“core-site.xml”配置文件的获取方式为从HDFS中获取,参考使用HDFS客户端进入集群HDFS客户端,执行以下命令获取:

      hdfs dfs -get /user/hetuserver/fiber/restcatalog/hive/core-site.xml

      hdfs dfs -get /user/hetuserver/fiber/restcatalog/hive/hdfs-site.xml

  2. 获取Hudi数据源的代理用户的“user.keytab”和“krb5.conf”文件。

    1. 登录Hudi数据源所在集群的FusionInsight Manager页面。
    2. 选择“系统 > 权限 > 用户”。
    3. 选择对应的数据源用户,在“操作”列中选择“更多 > 下载认证凭据”。
    4. 从下载的文件中解压后获取“user.keytab”和“krb5.conf”文件。

      Hudi数据源的代理用户需至少关联“hive”用户组。

  3. 获取Metastore URL和服务端Principal。

    1. 获取Hudi数据源所在集群客户端文件压缩包解压路径下的“FusionInsight_Cluster_1_Services_ClientConfig/Hive/config”下的“hive-site.xml”文件。
    2. 打开“hive-site.xml”文件,搜索“hive.metastore.uris”,其对应的值即为Metastore URL的值。搜索“hive.server2.authentication.kerberos.principal”,其对应的值即为服务端Principal的值。

  4. 使用HetuEngine管理员用户登录FusionInsight Manager,选择“集群 > 服务 > HetuEngine”,进入HetuEngine服务页面。
  5. 在概览页签下的“基本信息”区域,单击“HSConsole WebUI”后的链接,进入HSConsole界面。
  6. 选择“数据源”,单击“添加数据源”。在“添加数据源”页面填写参数。

    1. 配置“基本配置”,填写数据源名称,选择数据源类型“Hudi”。
    2. 配置“Hudi配置”,参数配置请参考表2-784
      表2-784 Hudi配置

      参数

      描述

      取值样例

      hdfs-site文件

      在本地选择步骤 1获取的“hdfs-site.xml”配置文件,文件名固定。

      -

      core-site文件

      在本地选择步骤 1获取的“core-site.xml”配置文件,文件名固定。

      -

      krb5文件

      开启安全模式时填写此参数。

      Kerberos认证用到的配置文件,在本地选择步骤 2获取的“krb5.conf”文件。

      krb5.conf

    3. 配置“Metastore配置”,参数配置请参考表2-785
      表2-785 Metastore配置

      参数

      描述

      取值样例

      Metastore URL

      数据源的Metastore的URL。获取方法请参考步骤 3

      thrift://192.168.1.1:21088,thrift://192.168.1.11:21088,thrift://192.168.1.2:21088

      安全认证机制

      打开安全模式后自动默认为KERBEROS。

      KERBEROS

      服务端Principal

      开启安全模式时填写此参数。

      meta访问metastore带域名的用户名。获取方法请参考步骤 3

      hive/hadoop.hadoop.com@HADOOP.COM

      客户端Principal

      开启安全模式时填写此参数。

      格式为:访问metastore的用户名@域名大写.COM。

      访问metastore的用户名就是步骤 2中获取的“user.keytab”文件所属的用户。

      admintest@HADOOP.COM

      keytab文件

      开启安全模式时填写此参数。

      连接metastore用户名的keytab凭据文件,固定名称。在本地选择步骤 2获取的“user.keytab”文件。

      user.keytab

    4. (可选)修改自定义配置。
      • 单击“增加”,参考表2-786增加自定义配置参数。
      表2-786 自定义配置

      参数

      描述

      取值样例

      hive.parquet.use-column-names

      是否按照列名方式访问PARQUET存储文件:

      • true:是
      • false(默认值):否

      false

      hive.hdfs.wire-encryption.enabled

      若对接数据源上HDFS的“hadoop.rpc.protection”参数值为“authentication”或“integrity”时,需添加此参数,并设置值为false。

      false

      hive.ignore-absent-partitions

      查询是否忽略分区下是否有文件丢失。

      • true:允许查询分区下存在文件丢失的情况
      • false:不允许查询分区下存在文件丢失的情况,会直接报错(手动对接数据源时,不填则默认为该值)

      true

      • 单击“删除”,可以删除已增加的自定义配置参数。
    5. 单击“确定”。

  7. 登录集群客户端所在节点,执行以下命令,切换到客户端安装目录并认证用户。

    cd /opt/hadoopclient

    source bigdata_env

    kinit HetuEngine组件操作用户 (普通模式集群跳过)

  8. 执行以下命令,登录数据源的catalog。

    hetu-cli --catalog 数据源名称 --schema 数据库名 --tenant 租户名称

    例如执行以下命令:

    hetu-cli --catalog hudi_1 --schema default --tenant default

  9. 执行以下命令,可正常查看数据库表信息或不报错即表示连接成功。

    show tables;

    若无法查询到Hudi数据,请参考将Hudi表数据同步到Hive同步Hudi数据后重试。

数据类型映射

目前Hudi数据源支持的数据类型为:INT、BIGINT、FLOAT、DOUBLE、DECIMAL、STRING、DATE、TIMESTAMP、BOOLEAN、BINARY、MAP、STRUCT、ARRAY。

性能优化

  • 元数据缓存

    Hudi连接器支持元数据缓存,以便更快地提供对各种操作的元数据请求。可参考调整HetuEngine元数据缓存

  • 动态过滤

    开启动态过滤有助于Hudi连接器的Join算子的计算优化。可参考调整HetuEngine动态过滤

  • 带分区条件查询

    建立分区表并且查询带分区过滤条件有助于过滤部分分区数据,从而提高性能。

约束

Hudi数据源只支持查询操作,更新和插入操作均不支持。

添加ClickHouse数据源

操作场景

ClickHouse数据源中同一个Schema(或Database)下不能存在名字内容相同但大小写格式不同的Table,例如:cktable(小写)、CKTABLE(大写)和CKtable(大小写混合),该内容的Table只能有一个,否则HetuEngine无法使用该Schema(或Database)下的表。

前提条件

参考创建HetuEngine权限角色创建HetuEngine管理员用户。

操作步骤

  1. 使用HetuEngine管理员用户登录FusionInsight Manager,选择“集群 > 服务 > HetuEngine”,进入HetuEngine服务页面。
  2. 在“概览”页签下的“基本信息”区域,单击“HSConsole WebUI”后的链接,进入HSConsole界面。
  3. 选择“数据源”,单击“添加数据源”,在“添加数据源”页面填写参数。

    1. 配置“基本配置”,填写数据源名称,选择数据源类型“JDBC > ClickHouse”。
    2. 配置“ClickHouse配置”,参数配置请参考表2-787
      表2-787 ClickHouse配置

      参数

      描述

      取值样例

      JDBC URL

      ClickHouse数据源的JDBC URL地址。

      • ClickHouse数据源使用IPv4,则格式为:jdbc:clickhouse://<host>:<port>;
      • ClickHouse数据源使用IPv6,则格式为:jdbc:clickhouse://[<host>]:<port>
      其中:
      • <host>获取方法:登录ClickHouse数据源所在集群的Manager页面,选择“集群 > 服务 > ClickHouse > 实例”,查看ClickHouseBalancer所在的“业务IP”。随机选取一个IP地址即可,目前仅支持填写一个IP地址。
      • <port>获取方法:登录FusionInsight Manager,选择“集群 > 服务 > ClickHouse > 逻辑集群”,查看对应逻辑集群的HTTP Balancer端口号。

      jdbc:clickhouse://192.168.1.1:21426或者jdbc:clickhouse://192.168.1.1:21425

      用户名

      连接ClickHouse数据源的用户名。

      根据连接数据源的用户名修改。

      密码

      连接ClickHouse数据源的用户密码。

      根据连接数据源的用户密码修改。

      Schema/Table大小写敏感

      支持数据源的Schema/Table名称大小写格式敏感。

      HetuEngine支持数据源的Schema/Table名称大小写格式敏感。

      • 否:当数据源同一个Schema下有多个Table名称,如cktable(小写)、CKTABLE(大写)和CKtable(大小写混合),HetuEngine只能使用cktable(小写)。
      • 是:要求数据源同一个Schema下只能有一个Table名称,如cktable(小写)或者CKTABLE(大写)或者CKtable(大小写混合),否则HetuEngine无法使用该Schema下的所有表。

      -

    3. (可选)自定义配置。
      单击“增加”可以增加自定义配置参数。配置ClickHouse数据源自定义参数,参考表2-788
      表2-788 ClickHouse数据源自定义配置参数

      参数

      描述

      取值样例

      use-connection-pool

      是否使用JDBC连接池。

      true

      jdbc.connection.pool.maxTotal

      JDBC连接池中最大连接数。

      8

      jdbc.connection.pool.maxIdle

      JDBC连接池中最大空闲连接数。

      8

      jdbc.connection.pool.minIdle

      JDBC连接池中最小空闲连接数。

      0

      jdbc.connection.pool.testOnBorrow

      从JDBC连接池中获取连接使用时是否对连接的有效性做检验。

      false

      clickhouse.map-string-as-varchar

      是否将ClickHouse数据源String和FixedString类型处理成Varchar类型。

      默认值:true

      true

      clickhouse.socket-timeout

      连接ClickHouse数据源超时时长。

      单位:毫秒

      默认值:120000

      120000

      case-insensitive-name-matching.cache-ttl

      数据源的大小写敏感的Schema/Table名称缓存超时时长。

      单位:分钟

      默认值:1

      1

      单击“删除”可以删除已增加的自定义配置参数。

    1. 单击“确定”。

  4. 登录集群客户端所在节点,执行以下命令,切换到客户端安装目录并认证用户。

    cd /opt/hadoopclient

    source bigdata_env

    kinit HetuEngine组件操作用户 (普通模式集群跳过)

  5. 执行以下命令,登录数据源的catalog。

    hetu-cli --catalog 数据源名称 --schema 数据库名 --tenant 租户名称

    例如执行以下命令:

    hetu-cli --catalog clickhouse_1 --schema default --tenant default

  6. 执行以下命令,可正常查看数据库表信息或不报错即表示连接成功。

    show tables;

数据类型映射

ClickHouse数据类型到HetuEngine数据类型映射

ClickHouse类型

HetuEngine类型

BOOLEAN

BOOLEAN

UInt8

SMALLINT

UInt16

INTEGER

UInt32

BIGINT

UInt64

DECIMAL(20, 0)

Int8

TINYINT

Int16

SMALLINT

Int32

INTEGER

Int64

BIGINT

Float32

REAL

Float64

DOUBLE

Decimal(P, S)

DECIMAL(P, S)

Decimal32(S)

DECIMAL(P, S)

Decimal64(S)

DECIMAL(P, S)

Decimal128(S)

DECIMAL(P, S)

IPv4

VARCHAR

IPv6

VARCHAR

UUID

VARCHAR

Enum8

VARCHAR

Enum16

VARCHAR

String

VARCHAR / VARBINARY

Fixedstring(N)

VARCHAR / VARBINARY

Date

DATE

DateTime

TIMESTAMP

性能优化

  • 查询下推

    支持使用查询下推功能,提高查询速度。

  • Scalar UDF下推

    Scalar UDF下推功能默认打开。使用该功能前需根据需求在HetuEngine中创建映射函数。

约束

  • HetuEngine支持对接ClickHouse操作的SQL语法:SHOW CATALOGS/SCHEMAS/TABLES/COLUMNS、DESCRIBE、USE、SELECT表/视图。
  • HetuEngine支持对接ClickHouse操作的表和视图:

    名称

    支持对接ClickHouse操作的表、视图

    HetuEngine支持对ClickHouse操作的表

    本地表(MergeTree)

    复制表(ReplicatedReplacingMergeTree)

    分布式表(Distributed)

    HetuEngine支持对ClickHouse操作的视图

    普通视图(Normal)

    物化视图(Materialized)

添加Elasticsearch数据源

操作场景

本章节指导用户在HSConsole界面添加Elasticsearch数据源。

  • 如果对接的Elasticsearch数据源开启了Ranger鉴权,需要将从HetuEngine访问Elasticsearch数据源的用户在数据源集群的Ranger中进行赋权。
  • HetuEngine对ElasticSearch数据源的元数据信息大小写不敏感,只能正确处理小写格式的元数据信息。

操作步骤

  1. 获取Elasticsearch数据源的“ca.crt”文件。

    1. 登录Elasticsearch数据源所在集群的FusionInsight Manager页面。
    2. 在“主页”右上方单击“下载客户端”,根据界面提示下载“完整客户端”文件至本地。
    3. 解压下载的客户端文件,获取“FusionInsight_Cluster_1_Services_ClientConfig”路径下的“ca.crt”文件。

  2. 生成Elasticsearch数据源开启TLS安全后的JKS格式的keystore文件。

    1. 在获取客户端文件的节点配置Java环境。
    2. 执行以下命令,在“ca.crt”文件所在目录生成“keystore.jks”文件。

      keytool -import -alias es -file ca.crt -keystore keystore.jks -storepass 自定义keystore.jks文件密码

  3. 使用HetuEngine管理员用户登录FusionInsight Manager,选择“集群 > 服务 > HetuEngine”,进入HetuEngine服务页面。
  4. 在概览页签下的“基本信息”区域,单击“HSConsole WebUI”后的链接,进入HSConsole界面。
  5. 选择“数据源”,单击“添加数据源”。在“添加数据源”页面填写参数。

    1. 配置“基本配置”,填写数据源名称,选择数据源类型“Elasticsearch”。
    2. 配置“Elasticsearch配置”,参数配置请参考表2-789
      表2-789 Elasticsearch配置

      参数

      描述

      取值样例

      主机IP

      Elasticsearch主机的IP地址。

      登录FusionInsight Manager,选择“集群 > 服务 > Elasticsearch > 实例”,在实例列表可查看EsNode节点所在的主机IP地址。随机选取一个IP地址即可,目前仅支持填写一个IP地址。

      • IPv4:192.168.1.1
      • IPv6:[192:168::1:1]

      HTTP端口

      Elasticsearch的HTTP端口,默认为24100。

      24100

      schema名称

      HetuEngine生成的默认schema的名称。

      default

      安全认证机制

      开启安全模式后默认为PASSWORD。

      PASSWORD

      用户名

      开启安全模式时填写此参数。

      连接Elasticsearch认证的用户名。

      根据连接Elasticsearch的用户名修改。

      密码

      开启安全模式时填写此参数。

      连接Elasticsearch认证的密码。

      根据连接Elasticsearch的用户名密码修改。

      开启TLS

      是否在Elasticsearch开启TLS。

      Keystore文件

      开启安全模式时填写此参数。

      开启TLS时用到的keystore文件,在本地选择步骤 2生成的“keystore.jks”文件。

      keystore.jks

      Keystore密码

      开启安全模式时填写此参数,为2.b中填写的自定义keystore.jks文件密码。

      开启TLS时用到keystore文件的密码。

      -

    3. (可选)自定义配置。
      • 单击“增加”可以增加自定义配置参数。配置ElasticSearch数据源自定义参数,参考表2-790
        表2-790 ElasticSearch数据源自定义配置参数

        名称

        描述

        取值样例

        allow-aggregation-pushdown

        aggregation下推功能是否启用,默认开启。

        • true:开启下推。
        • false:不开启下推功能。

        true

        elasticsearch.query-data-immediate.enabled

        对Elasticsearch数据源执行表操作后,是否在Elasticsearch数据源侧立即refresh生效,默认false。

        • true:开启。
        • false:不开启。

        false

      • 单击“删除”可以删除已增加的自定义配置参数。
    4. 单击“确定”。

  6. 登录集群客户端所在节点,执行以下命令,切换到客户端安装目录并认证用户。

    cd /opt/hadoopclient

    source bigdata_env

    kinit HetuEngine组件操作用户 (普通模式集群跳过)

  7. 执行以下命令,登录数据源的catalog。

    hetu-cli --catalog 数据源名称 --schema 数据库名 --tenant 租户名称

    例如执行以下命令:

    hetu-cli --catalog elasticsearch_1 --schema default --tenant default

  8. 执行以下命令,可正常查看数据库表信息或不报错即表示连接成功。

    show tables;

数据类型映射

ElasticSearch数据类型

HetuEngine数据类型

boolean

BOOLEAN

binary

VARBINARY

byte

TINYINT

short

SMALLINT

integer

INTEGER

long

BIGINT

float

REAL

double

DOUBLE

keyword

VARCHAR

text

VARCHAR

ip

IPADDRESS

性能优化

支持使用查询下推功能,提高查询速度。

约束

  • HetuEngine支持对接ElasticSearch操作的SQL语法:SHOW CATALOGS/SCHEMAS/TABLES、SELECT、DROP TABLE、DELETE、UPDATE、DESCRIBE。
  • 不支持如下语法:CREATE SCHEMA、CREATE TABLE、CREATE VIEW、ALTER TABLE、ALTER VIEW。
  • 不支持查询Elasticsearch中有重复列名的表,如列名为“name”和“NAME”。
  • 不推荐查询Elasticsearch表名中含有特殊字符的表,如“-”,“.”等,若需要加入特殊字符的表,需要在查询时将包含特殊字符的表用双引号表达。

添加GAUSSDB数据源

操作场景

本章节指导用户在HSConsole界面添加GaussDB类型的JDBC数据源。

前提条件

  • 数据源所在集群与HetuEngine集群节点网络互通。
  • HetuEngine所在集群的所有节点的“/etc/hosts”文件中,添加待对接数据源所在集群的主机名称和对应的IP映射,及其“/etc/hosts”文件中的“10.10.10.10 hadoop.系统域名”(如“10.10.10.10 hadoop.hadoop.com”),否则HetuEngine无法根据主机名称连接到非本集群节点。
  • 已创建HetuEngine计算实例。

操作步骤

  1. 使用HetuEngine管理员用户登录FusionInsight Manager,选择“集群 > 服务 > HetuEngine”,进入HetuEngine服务页面。
  2. 在“概览”页签下的“基本信息”区域,单击“HSConsole WebUI”后的链接,进入HSConsole界面。
  3. 选择“数据源”,单击“添加数据源”。在“添加数据源”页面填写参数。

    1. 配置“基本配置”,填写数据源名称,选择数据源类型“JDBC > GAUSSDB-A”。
    2. 配置“GAUSSDB-A配置”,参数配置请参考表2-791
      表2-791 GAUSSDB-A配置

      参数

      描述

      取值样例

      JDBC URL

      连接GaussDB数据库的JDBC URL地址。格式为:

      jdbc:postgresql://CN业务IP:端口/数据库名称

      说明:

      若GaussDB数据库开启SSL,URL地址需添加如下SSL相关参数:ssl=true&sslfactory=org.postgresql.ssl.NonValidatingFactory

      • GaussDB数据库未开启SSL:

        jdbc:postgresql://192.168.1.1:25308/postgres

      • GaussDB数据库开启SSL:

        jdbc:postgresql://192.168.1.1:25308/postgres?ssl=true&sslfactory=org.postgresql.ssl.NonValidatingFactory

      用户名

      GaussDB数据源连接用户名。

      根据连接数据源的用户名修改。

      密码

      GaussDB数据源连接密码。

      根据连接数据源的用户名密码修改。

    3. (可选)配置GaussDB用户信息,参考表2-792

      “GaussDB用户信息配置”与“HetuEngine-GaussDB用户映射配置”要搭配使用,HetuEngine在对接的GaussDB数据源时,通过用户映射,使得HetuEngine的用户具备与GaussDB数据源被映射的用户访问GaussDB数据源时同样的权限。可以多个HetuEngine用户对应一个GaussDB用户。

      在GaussDB数据库中,创建的用户名要符合标识符的命名规范,且最大长度不超过63个字符。当用户名中包含大写字母时数据库将自动转换为小写字母,如果需要创建包含大写字母的用户名则需要使用双引号括起来。因此,配置“Data Source User”时,必须使用GaussDB数据库转换后的用户名。

      例如:

      • 在GaussDB数据库创建的用户名为Gaussuser1,则Data Source User应为gaussuser1。
      • 在GaussDB数据库创建的用户名为“Gaussuser1”,则Data Source User应为Gaussuser1。
      表2-792 GaussDB用户信息配置

      名称

      描述

      Data Source User

      数据源用户名称。

      如果配置了数据源用户为gaussuser1,那么必须有映射到gaussuser1的HetuEngine用户。例如创建hetuuser1映射到gaussuser1。

      Password

      对应数据源的用户认证密码。

    4. (可选)配置HetuEngine-GaussDB用户映射配置,参考表4 HetuEngine-GaussDB用户映射配置

      以HetuEngine User和Data Source User键值对的形式配置多个HetuEngine的用户对应上面多个用户的其中一个。当使用不同的HetuEngine用户访问GaussDB时,可对应用不同的GaussDB的用户和密码。

      表2-793 HetuEngine-GaussDB用户映射配置

      名称

      描述

      HetuEngine User

      HetuEngine用户名。

      Data Source User

      数据源用户,如gaussuser1(表2-792中配置的数据源用户)。

    5. (可选)自定义配置。
      • 单击“增加”可以增加自定义配置参数。配置GaussDB数据源自定义参数,参考表2-794
        表2-794 GaussDB数据源自定义配置参数

        名称

        描述

        取值样例

        use-connection-pool

        是否使用JDBC连接池。

        true

        jdbc.connection.pool.maxTotal

        JDBC连接池中最大连接数。

        8

        jdbc.connection.pool.maxIdle

        JDBC连接池中最大空闲连接数。

        8

        jdbc.connection.pool.minIdle

        JDBC连接池中最小空闲连接数。

        0

        join-pushdown.enabled

        • true:允许将Join下推到数据源执行。
        • false: Join不会被下推到数据源执行,因此会消耗更多的网络和计算资源。

        true

        join-pushdown.strategy

        前提条件:Join下推功能已开启。

        • AUTOMATIC:基于代价估算(cost-based)的Join下推。
        • EAGER:尽可能的Join下推。

        AUTOMATIC

        source-encoding

        GaussDB数据源编码方式。

        UTF-8

        multiple-cnn-enabled

        是否使用GaussDB多CN配置。如果使用,首先确保关闭JDBC连接池功能,其次JDBC URL格式为:jdbc:postgresql://host:port/database,jdbc:postgresql://host:port/database,jdbc:postgresql://host:port/database

        false

        parallel-read-enabled

        是否使用并行数据读取功能。

        启用并行数据读取功能将基于节点分布和“max-splits”参数值来确定实际的split数。

        并行读取将与数据源创建多个连接,被依赖的数据源应当具备支持负载的能力。

        false

        split-type

        并行数据读取类型:

        • NODE:基于GaussDB数据源DN节点划分并行度。
        • PARTITION:基于表分区划分并行度。
        • INDEX:基于表索引划分并行度。

        NODE

        max-splits

        最大并行度。

        5

        use-copymanager-for-insert

        数据写入时是否使用CopyManager批量导入功能。

        false

        unsupported-type-handling

        当连接器不支持此数据类型时,可以转换为VARCHAR,从而避免失败:

        • CONVERT_TO_VARCHAR:不支持的类型将转为VARCHAR类型,并且只支持对它们的读操作,不支持的类型包括:BIT VARYING、CIDR、MACADDR、INET、OID、REGTYPE、REGCONFIG、POINT。
        • IGNORE(默认值):不支持的类型将不在查询结果中显示。

        CONVERT_TO_VARCHAR

        max-bytes-in-a-batch-for-copymanager-in-mb

        CopyManager批量导入每一批次最大数据量,单位:MB。

        10

        decimal-mapping

        默认情况下HetuEngine会跳过未指定精度或超过最大精度38位的Decimal/Number/Numeric数据类型。可通过设置“decimal-mapping=allow_overflow”,将未指定精度且未超过38位的上述数据类型映射为Decimal(38,x)数据类型,x值为decimal-default-scale的值。

        allow_overflow

        decimal-default-scale

        Decimal/Number/Numeric映射数据类型Decimal(38,x)小数位精度值,取值范围0~38,默认为0,需配置为大于等于实际数据的小数位数。

        0

        case-insensitive-name-matching

        HetuEngine支持的GAUSSDB数据源的Schema和Table名称大小写格式敏感:

        • false:仅支持查询全小写的Schema或Table。默认值为false。
        • true:
          • 忽略大小写后无同名的Schema或Table:支持查询该Schema或Table。
          • 忽略大小写后存在同名的Schema或Table:不支持查询该Schema或Table。

        false

      • 单击“删除”可以删除已增加的自定义配置参数。
    6. 单击“确定”。

  4. 登录集群客户端所在节点,执行以下命令,切换到客户端安装目录并认证用户。

    cd /opt/hadoopclient

    source bigdata_env

    kinit HetuEngine组件操作用户 (普通模式集群跳过)

  5. 执行以下命令,登录数据源的catalog。

    hetu-cli --catalog 数据源名称 --schema 数据库名 --tenant 租户名称

    例如执行以下命令:

    hetu-cli --catalog gaussdb_1 --schema admin --tenant default

  6. 执行以下命令,可正常查看数据库表信息或不报错即表示连接成功。

    show tables;

数据类型映射

GAUSSDB数据类型(data type)

HetuEngine数据类型(data type)

BOOLEAN

BOOLEAN

TINYINT

TINYINT

SMALLINT

SMALLINT

INTEGER

INTEGER

BINARY_INTEGER

INTEGER

BIGINT

BIGINT

SMALLSERIAL

SMALLINT

SERIAL

INTEGER

BIGSERIAL

BIGINT

FLOAT4 (REAL)

REAL

FLOAT8(DOUBLE PRECISION)

DOUBLE PRECISION

DECIMAL[p (,s)]

DECIMAL[p (,s)]

NUMERIC[p (,s)]

DECIMAL[p (,s)]

CHAR(n)

CHAR(n)

CHARACTER(n)

CHAR(n)

NCHAR(n)

CHAR(n)

VARCHAR(n)

VARCHAR(n)

CHARACTER VARYING(55)

VARCHAR(n)

VARCHAR2(n)

VARCHAR(n)

NVARCHAR2(n)

VARCHAR

TEXT(CLOB)

VARCHAR

DATE

TIMESTAMP

TIMESTAMP

TIMESTAMP

UUID

UUID

JSON

JSON

约束

  • 不支持如下语法:GRANT、REVOKE、SHOW GRANTS、SHOW ROLES、SHOW ROLE GRANTS。
  • UPDATE和DELETE语法不支持筛选条件子句中包含跨catalog的条件,例如:UPDATE mppdb.table SET column1=value WHERE column2 IN (SELECT column2 from hive.table)。
  • UPDATE语法不支持更新DATE/TIMESTAMP/VARBINARY字段。
  • 不支持查询WHERE语句条件为REAL,例如SELECT * FROM mppdb.table WHERE column1 = REAL '1.1'。
  • DELETE语法不支持筛选条件子句中包含子查询,例如:DELETE FROM mppdb.table WHERE column IN (SELECT column FROM mppdb.table1)。
  • HetuEngine支持GaussDB数据源Decimal/Number/Numeric类型数据的最大精度不超过38位。
  • 当谓词的前后两端任意一端包含子查询时,该谓词不会下推,如示例语句count(*) 后面存在子查询,则不下推,但子查询中的min函数可以下推。
    select count(*) from item where i_current_price = (select min(i_current_price) from item);

添加HBase数据源

操作场景

本章节指导用户在HSConsole界面添加HBase数据源。

前提条件

  • 数据源所在集群域名与HetuEngine集群域名不能相同。
  • 数据源所在集群与HetuEngine集群节点网络互通。
  • HetuEngine所在集群的所有节点的“/etc/hosts”文件中,添加待对接数据源所在集群的主机名称和对应的IP映射,及其“/etc/hosts”文件中的“10.10.10.10 hadoop.系统域名”(如“10.10.10.10 hadoop.hadoop.com”),否则HetuEngine无法根据主机名称连接到非本集群节点。
  • 已创建HetuEngine计算实例。
  • 数据源所在集群与HetuEngine集群的时间需保持一致。
  • 数据源所在集群与HetuEngine所在集群上ZooKeeper的SSL通信加密配置需保持一致。

    登录FusionInsight Manager,选择“集群 > 服务 > ZooKeeper > 配置 > 全部配置”,搜索“ssl.enabled”,值为“true”,表示启用SSL通信加密,值为“false”表示关闭SSL通信加密。

操作步骤

  1. 获取HBase数据源的“hbase-site.xml”、“hdfs-site.xml”和“core-site.xml”配置文件。

    1. 登录HBase数据源所在集群的FusionInsight Manager页面。
    2. 在“主页”右上方单击“下载客户端”,根据界面提示下载“完整客户端”文件。
    3. 将下载的客户端文件压缩包解压,获取“FusionInsight_Cluster_1_Services_ClientConfig/HBase/config”路径下的“hbase-site.xml”、“core-site.xml”和“hdfs-site.xml”文件。

  2. 获取HBase数据源的代理用户的“user.keytab”和“krb5.conf”文件。

    1. 登录HBase数据源所在集群的FusionInsight Manager页面。
    2. 选择“系统 > 权限 > 用户”。
    3. 选择对应的数据源用户,在“操作”列中选择“更多 > 下载认证凭据”。
    4. 从下载的文件中解压获取“user.keytab”和“krb5.conf”文件。

    数据源的代理用户需要具有对HBase的相关操作权限。

  3. 使用HetuEngine管理员用户登录FusionInsight Manager,选择“集群 > 服务 > HetuEngine”,进入HetuEngine服务页面。
  4. 在概览页签下的“基本信息”区域,单击“HSConsole WebUI”后的链接,进入HSConsole界面。
  1. 选择“数据源”,单击“添加数据源”。在“添加数据源”页面填写参数。

    1. 配置“基本配置”,填写数据源名称,选择数据源类型“HBase”。
    2. 配置“HBase配置”,参数配置请参考表2-795
      表2-795 HBase配置

      参数

      描述

      取值样例

      ZooKeeper Quorum地址

      该数据源ZooKeeper服务所有quorumpeer实例业务IP。当该数据源ZooKeeper服务使用IPv6时,则需额外在ZooKeeper Quorum地址中指定客户端端口号。

      登录FusionInsight Manager,选择“集群 > 服务 > ZooKeeper > 实例”,可查看所有quorumpeer实例所在主机业务IP地址。

      • IPv4:192.168.1.1,192.168.1.2,192.168.1.3
      • IPv6:[192:168::10:11]:24002

      ZooKeeper客户端端口号

      ZooKeeper客户端端口号。

      登录FusionInsight Manager,选择“集群 > 服务 > ZooKeeper”,在“配置”页签查看“clientPort”的值。

      24002

      HBase RPC通信保护

      根据步骤 1获取的“hbase-site.xml”里配置项“hbase.rpc.protection”的值进行选择:

      • “authentication”时选择“否”
      • “privacy”时选择“是”

      安全认证机制

      打开安全模式后自动默认为KERBEROS。

      KERBEROS

      Principal

      开启安全认证机制时填写此参数。就是步骤 2中获取的“user.keytab”文件所属的用户。

      user_hbase@HADOOP2.COM

      keytab文件

      开启安全模式时填写此参数。安全认证的密钥,在本地选择步骤 2获取的“user.keytab”文件。

      user.keytab

      krb5文件

      开启安全模式时填写此参数。Kerberos认证用到的配置文件,在本地选择步骤 2获取的“krb5.conf”文件。

      krb5.conf

      hbase-site文件

      开启安全模式时填写此参数。连接hdfs时,需要的配置文件。在本地选择步骤 1获取的“hbase-site.xml”文件。

      hbase-site.xml

      core-site文件

      开启安全模式时填写此参数。连接hdfs时需要用到的配置。在本地选择步骤 1获取的“core-site.xml”文件。

      core-site.xml

      hdfs-site文件

      开启安全模式时填写此参数。连接hdfs时需要用到的配置。在本地选择步骤 1获取的“hdfs-site.xml”文件。

      hdfs-site.xml

    3. (可选)自定义配置。
    4. 单击“确定”。

  2. 登录集群客户端所在节点,执行以下命令,切换到客户端安装目录并认证用户。

    cd /opt/hadoopclient

    source bigdata_env

    kinit HetuEngine组件操作用户 (普通模式集群跳过)

  3. 执行以下命令,登录数据源的catalog。

    hetu-cli --catalog 数据源名称 --schema 数据库名 --tenant 租户名称

    例如执行以下命令:

    hetu-cli --catalog hbase_1 --schema default --tenant default

  4. 执行以下命令,可正常查看数据库表信息或不报错即表示连接成功。

    show tables;

  5. 创建结构化映射表。

    映射表建表语句格式:
    CREATE TABLE schemaName.tableName (
      rowId VARCHAR,
      qualifier1 TINYINT,
      qualifier2 SMALLINT,
      qualifier3 INTEGER,
      qualifier4 BIGINT,
      qualifier5 DOUBLE,
      qualifier6 BOOLEAN,
      qualifier7 TIME,
      qualifier8 DATE,
      qualifier9 TIMESTAMP
    )
    WITH (
    column_mapping = 'qualifier1:f1:q1,qualifier2:f1:q2,qualifier3:f2:q3,qualifier4:f2:q4,qualifier5:f2:q5,qualifier6:f3:q1,qualifier7:f3:q2,qualifier8:f3:q3,qualifier9:f3:q4',
    row_id = 'rowId',
    hbase_table_name = 'hbaseNamespace:hbaseTable',
    external = true
    );

    “schemaName”必须与“hbase_table_name”中的“hbaseNamespace”一致。

    • 映射表建表支持:直接关联HBase数据源中的表、创建并关联HBase数据源中不存在的新表的两种形式。
    • 映射表字段支持的数据类型包括:VARCHAR、TINYINT、SMALLINT、INTEGER、BIGINT、DOUBLE、BOOLEAN、TIME、DATE、TIMESTAMP。
    • 映射表建表语句关键字说明见下表。
      表2-796 映射表建表语句关键字说明

      关键字

      类型

      是否必填

      默认值

      备注

      column_mapping

      String

      所有的列在同一个Family列族下

      指定映射表中列与HBase数据源表中列族的映射关系。如果需要关联一张HBase数据源中的表,那么column_mapping必须与HBase数据源中的一致;如果创建一张HBase数据源中不存在的新表,column_mapping由用户指定。

      column_mapping格式为“映射表列名:HBase列族:HBase列名”,映射表列名必须为小写,HBase列名需要与HBase端完全一致。

      row_id

      String

      映射表的第一列

      HBase数据源中表rowkey对应的列名。

      hbase_table_name

      String

      指定需要关联的HBase数据源上的表空间和表名,用:连接。默认表空间为default。如果创建一张HBase数据源中不存在的新表,hbase_table_name不需要指定。

      external

      Boolean

      true

      如果external=true ,表示该表为HBase数据源中表的一个映射表,不支持删除HBase数据源上的原始表;如果external=false,则删除Hetu-HBase表的同时,会删除HBase数据源上的表。

数据类型映射

HBase是基于字节的分布式存储系统,它将所有数据类型存储为字节数组。要在HetuEngine中表示HBase数据,需要先在HetuEngine中通过创建映射表的方式为HetuEngine列限定符选择与HBase列限定符的值相匹配的数据类型。

目前HetuEngine列限定符支持以下数据类型:VARCHAR、TINYINT、SMALLINT、INTEGER、BIGINT、DOUBLE、BOOLEAN、TIME、DATE和TIMESTAMP。

性能优化

  • 谓词下推

    查询支持大部分算子下推,支持的谓词条件有:=、>=、>、<、<=、!=、IN、NOT IN、IS NULL、IS NOT NULL和BETWEEN AND。

  • 批量GET查询

    批量GET即在HBase的API中将所要查询的多个Row Key封装成一个List<Get>,然后请求这个列表以获取数据的查询方式。该方式能避免每个Row Key都发起一次请求。

  • HBase单表查询范围扫描优化

    HBase单表查询范围扫描优化是指根据HBase的列的谓词条件尝试自动推断rowkey的起止地址,在tableScan的时候设置hbase scan起止地址从而提高访问性能。

    比如假设HBase数据表的rowkey由building_code:house_code:floor:uuid四列组成,对于查询过滤条件where building_code = ‘123’and house_code = ‘456’,HetuEngine单表查询优化会只扫描rowkey范围前缀为‘123-456’的列,从而提高性能。

    开启HBase单表查询范围扫描优化的功能需要在5.c中添加自定义参数“hbase.rowkey.adaptive.optimization.enabled”,值为“true”。

    此外,在建表语句的建表属性中需指定rowkey的组成列和分隔字符:

    表2-797 HBase的rowkey组成列和分隔字符

    表属性

    表属性含义

    样例

    row_id_construct_columns

    HBase数据表的rowkey组成列

    building_code:house_code:floor:uuid

    row_id_construct_columns_terminal

    HBase数据表的rowkey组成列的分割字符

    例如一个由building_code:house_code:floor:uuid四列组成的rowkey的建表语句如下:

    CREATE TABLE test.table_hbase_test (
    row_id string,
    col1 string,
    col2 string,
    col3 string,
    building_code string,
    house_code string,
    floor string,
    uuid string)
    WITH (column_mapping = '
    col1:attr:col1,
    col2:attr:col2,
    col3:attr:col3,
    building_code:attr:building_code,
    house_code:attr:house_code,
    floor:attr:floor,
    uuid:attr:uuid',
    row_id = 'row_id',
    row_id_construct_columns = 'building_code:house_code:floor:uuid',
    row_id_construct_columns_terminal = ':',
    hbase_table_name='test:table_hbase_test',
    external = true)
  • Hbase多表联合查询动态过滤优化

    HBase支持动态过滤优化。

    开启动态过滤功能,需先开启HBase单表查询范围扫描优化功能,然后还需要在计算实例的“coordinator.config.properties”和“worker.config.properties”参数文件中添加自定义参数“enable-dynamic-filtering”,值为“true”,可参考3.e

约束

不支持如下语法:ALTER,VIEW。

添加跨集群HetuEngine数据源

操作场景

本章节指导用户在安全模式集群下通过HSConsole界面添加另一个HetuEngine数据源。

操作步骤

  1. 获取他域HetuEngine集群的代理用户的“user.keytab”文件。

    1. 登录他域HetuEngine集群FusionInsight Manager页面。
    2. 选择“系统 > 权限 > 用户”。
    3. 选择对应的数据源用户,在“操作”列中选择“更多 > 下载认证凭据”。
    4. 从下载的文件中解压出来的“user.keytab”文件就是用户的凭据文件。

  2. 使用HetuEngine管理员用户登录FusionInsight Manager,选择“集群 > 服务 > HetuEngine”,进入HetuEngine服务页面。
  3. 在概览页签下的“基本信息”区域,单击“HSConsole WebUI”后的链接,进入HSConsole界面。
  4. 选择“数据源”,单击“添加数据源”。在“添加数据源”页面填写参数。

    1. 配置“基本配置”,填写数据源名称,选择数据源类型“HetuEngine”。
    2. 配置“HetuEngine配置”,参数配置请参考表2-798
      表2-798 HetuEngine配置

      参数

      描述

      取值样例

      用户名

      开启安全模式时填写此参数。

      访问远端HetuEngine的用户。就是步骤 1中获取“user.keytab”所属用户。

      hetu_test

      keytab文件

      开启安全模式时填写此参数。

      访问远端DataCenter的用户Keytab文件。在本地选择步骤 1k获取的“user.keytab”文件。

      user.keytab

      开启双向传输

      跨域数据传输是否开启双向传输,默认为“是”

      • 是:双向传输,请求通过本端的HSFabric将转发至远端的HSFabric,如果开启双向传输,需要配置本端HSFabric地址。
      • 否,单向传输,请求直接发至远端的HSFabric。

      本端地址信息

      本端MRS集群的HetuEngine服务负责对外通信的HSFabric实例的主机IP地址及端口号。

      1. 登录本端集群FusionInsight Manager,选择“集群 > 服务 > HetuEngine > 实例”,查看HSFabric的业务IP地址。
      2. 单击“HSFabric”,选择“实例配置”,查看“server.port”的值,默认为“29900”

      192.168.1.1:29900,192.168.1.2:29900

      远端地址信息

      远端MRS集群的HetuEngine服务负责对外通信的HSFabric实例的主机IP地址及端口号。

      1. 登录远端集群FusionInsight Manager,选择“集群 > 服务 > HetuEngine > 实例”,查看HSFabric的业务IP地址。
      2. 单击“HSFabric”,选择“实例配置”,查看“server.port”的值,默认为“29900”

      192.168.1.1:29900,192.168.1.2:29900

      区域

      当前请求发起方所属区域,只能包数字和下划线。

      0755_01

      接收超时时长(秒)

      等待接收数据的超时时长(单位:秒)。

      60

      Task总超时时长(秒)

      每个跨域Task执行的总超时时长(单位:秒)。

      300

      Worker节点使用Task数

      每个Worker节点接收数据时使用的Task数量。

      5

      开启数据压缩

      • 是:启动数据压缩。
      • 否:不启动数据压缩。

      hsfabric.local.tenant

      指定远端HetuEngine计算所使用的租户队列。

      • 未配置该参数,系统会根据配置的用户,随机选择该用户所属的租户。
      • 配置该参数,系统则会指定租户。适用于包括开启了租户的严格校验模式等场景。
      • 若目标集群“tenant.strict.mode.enabled”参数的值为“true”时,此参数为必填项。
      说明:

      登录Manager,选择“集群 > 服务 > HetuEngine > 配置 > 全部配置”,搜索“tenant.strict.mode.enabled”,查看该参数的值。

      -

    3. (可选)自定义配置。
      • 单击“增加”可以增加自定义配置参数。配置HetuEngine数据源自定义参数,参考表2-799
        表2-799 HetuEngine数据源自定义配置参数

        名称

        描述

        取值样例

        hsfabric.health.check.time

        设置检测HSFabric实例状态的周期间隔,单位:秒

        60

        hsfabric.subquery.pushdown

        开启跨域查询下推参数,默认开启。

        • true:开启跨域查询下推。
        • false:不开启跨域查询下推。

        true

      • 单击“删除”可以删除已增加的自定义配置参数。
    4. 单击“确定”。

  5. 登录集群客户端所在节点,执行以下命令,切换到客户端安装目录并认证用户。

    cd /opt/hadoopclient

    source bigdata_env

    kinit HetuEngine组件操作用户 (普通模式集群跳过)

  6. 执行以下命令,登录数据源的catalog。

    hetu-cli --catalog 数据源名称 --schema 数据库名 --tenant 租户名称

    例如执行以下命令:

    hetu-cli --catalog hetuengine_1 --schema default --tenant default

  7. 执行以下命令,可正常查看数据库表信息或不报错即表示连接成功。

    show tables;

数据类型映射

目前HetuEngine数据源支持的数据类型为:BOOLEAN、TINYINT、SMALLINT、INT、BIGINT、REAL、DOUBLE、DECIMAL、VARCHAR、CHAR、DATE、TIMESTAMP(0)~TIMESTAMP(6)、ARRAY、MAP、TIME WITH TIMEZONE、TIMESTAMP WITH TIME ZONE、TIME。

性能优化

支持使用查询下推功能,提高查询速度。

查询下推功能默认打开,也可参考4.c添加相关自定义参数开启查询下推功能。

约束

不支持如下语法:CREATE、ALTER、DROP VIEW、INSERT OVERWRITE、UPDATE、DELETE。

不支持跨域数据源的INSERT操作。

添加IoTDB数据源

操作场景

本章节指导用户在安全模式集群的HSConsole界面添加IoTDB类型的JDBC数据源。

前提条件

  • 数据源所在集群域名与HetuEngine集群域名不能相同。
  • 数据源所在集群与HetuEngine集群节点网络互通。
  • 已创建HetuEngine计算实例。
  • 安全集群的IoTDB默认开启了SSL,开启了SSL后需上传“truststore.jks”文件,可参考使用IoTDB客户端获取该文件。

操作步骤

  1. 使用HetuEngine管理员用户登录FusionInsight Manager,选择“集群 > 服务 > HetuEngine”,进入HetuEngine服务页面。
  2. 在“概览”页签下的“基本信息”区域,单击“HSConsole WebUI”后的链接,进入HSConsole界面。
  3. 选择“数据源”,单击“添加数据源”。在“添加数据源”页面填写参数。

    1. 配置“基本配置”,填写数据源名称,选择数据源类型“JDBC > IoTDB”。
    2. 配置“IoTDB配置”,参数配置请参考表2-800
      表2-800 IoTDB配置

      参数

      描述

      取值样例

      JDBC URL

      连接IoTDB的JDBC URL地址。

      格式为:jdbc:iotdb://IoTDBServer业务IP1,IoTDBServer业务IP2:端口号

      jdbc:iotdb://192.168.1.1,192.168.1.2:22260

      用户名

      连接IoTDB数据源的IoTDB用户名。

      说明:

      当IoTDB所在集群为非安全模式时,需使用IoTDB默认用户“root”。

      密码

      连接IoTDB数据源的IoTDB用户密码。

      说明:

      当IoTDB所在集群为非安全模式时,请咨询IoTDB所在集群的集群管理员获取用户“root”的密码。

      开启ssl

      IoTDB服务是否开启了SSL,安全集群默认开启。

      truststore文件

      IoTDB开启SSL后需上传“truststore.jks”文件。

      -

      • IoTDBServer业务IP:

        登录Manager,选择“集群 > 服务 > IoTDB > 实例”,查看IoTDBServer的业务IP。

      • 端口号:

        登录Manager,选择“集群 > 服务 > IoTDB > 配置”,搜索并查看“IOTDB_SERVER_RPC_PORT”的值,默认为“22260”。

    3. (可选)根据需求可添加自定义配置。
    4. 单击“确定”。

  4. 登录集群客户端所在节点,执行以下命令,切换到客户端安装目录并认证用户。

    cd /opt/hadoopclient

    source bigdata_env

    kinit HetuEngine组件操作用户 (普通模式集群跳过)

  5. 执行以下命令,登录数据源的catalog。

    hetu-cli --catalog 数据源名称 --schema 数据库名 --tenant 租户名称

    例如执行以下命令:

    hetu-cli --catalog iotdb_1 --schema root.ln --tenant default

  6. 执行以下命令,可正常查看数据库表信息或不报错即表示连接成功。

    show tables;

数据类型映射

IoTDB数据类型(data type)

HetuEngine数据类型(data type)

BOOLEAN

BOOLEAN

INT32

BIGINT

INT64

BIGINT

FLOAT

DOUBLE

DOUBLE

DOUBLE

TEXT

VARCHAR

功能增强

  • IoTDB可为时间序列设置任意标签字段,HetuEngine侧查询可将IoTDB的这些标签字段与其他数据源进行融合查询。
  • IoTDB数据库节点到时间序列中的任意节点,均可作为HetuEngine侧查询的表进行数据查询。

约束

  • 不支持IoTDB数据创建,只支持IoTDB数据查询。
  • 使用HetuEngine进行查询的IoTDB用户至少需要配置根目录root下的读权限。

添加MySQL数据源

HetuEngine支持配置MySQL数据源实现对MySQL数据源的接入与查询功能。本章节指导用户在集群的HSConsole界面添加MySQL类型的JDBC数据源。

前提条件

  • 数据源与HetuEngine集群节点网络互通。
  • 集群已启用Kerberos认证(安全模式)创建HetuEngine管理员用户,集群未启用Kerberos认证(普通模式)创建HetuEngine业务用户,并为其赋予HDFS管理员权限,即创建用户时需同时加入“hadoop”和“hadoopmanager”用户组,创建用户可参考创建HetuEngine权限角色
  • 已创建HetuEngine计算实例,可参考创建HetuEngine计算实例
  • 已获取MySQL数据库所在的IP地址,端口号,用户名及密码。

HetuEngine对接MySQL数据源约束

  • HetuEngine支持对接MySQL操作的SQL语法:SHOW CATALOGS/SCHEMAS/TABLES/COLUMNS、DESCRIBE、USE、SELECT表/视图。
  • HetuEngine支持的MySQL数据源的Schema和Table名称不区分大小写。
  • 不支持在具有CHAR或VARCHAR等文本类型的列上下推任何谓词。

    例如:由于name是VARCHAR类型的列,因此如下两个查询的谓词均不会下推。

    SELECT * FROM nation WHERE name>'abcd';
    SELECT * FROM nation WHERE name='abcd';

配置MySQL数据源步骤

安装集群客户端

  1. 安装包含HetuEngine服务的集群客户端,例如安装目录为“/opt/hadoopclient”。

准备MySQL驱动

  1. 从MySQL官网获取MySQL驱动文件,格式为“xxx.jar”,支持版本为MySQL 5.7,MySQL 8.0及以后版本。
  2. 上传MySQL驱动文件至HetuEngine所在集群。

    可通过如下两种方式:
    • 通过Manager界面上传至HDFS:
      1. 使用HetuEngine管理员用户登录FusionInsight Manager,选择“集群 > 服务 > HDFS”,进入HDFS服务页面。
      2. 在“概览”页签下的“基本信息”区域,单击“NameNode Web UI”后的链接,进入NameNode Web UI界面。
      3. 选择“Utilities > Browse the file system”,单击,创建“/user/hetuserver/fiber/extra_file/driver/mysql”目录。
      4. 进入“/user/hetuserver/fiber/extra_file/driver/mysql”目录,单击上传步骤 2获取的MySQL驱动文件。
      5. 单击驱动文件所在行的“Permission”列的值,勾选“User”列的“Read”和“Write”,“Group”列的“Read”和“Other”列的“Read”,单击“Set”。
    • 通过使用HDFS命令直接上传:
      1. 登录HDFS服务客户端所在节点,切换到客户端安装目录,如“/opt/hadoopclient”。

        cd /opt/hadoopclient

      2. 执行以下命令配置环境变量。

        source bigdata_env

      3. 如果集群为安全模式,执行以下命令进行用户认证。普通模式集群无需执行用户认证。

        kinit HetuEngine管理员用户

        根据回显提示输入密码。

      4. 执行如下命令创建目录“/user/hetuserver/fiber/extra_file/driver/mysql”,并上传步骤 2获取的MySQL驱动,然后修改对应的权限。

        hdfs dfs -mkdir -p /user/hetuserver/fiber/extra_file/driver/mysql

        hdfs dfs -put ./MySQL驱动文件 /user/hetuserver/fiber/extra_file/driver/mysql

        hdfs dfs -chmod -R 644 /user/hetuserver/fiber/extra_file/driver/mysql

配置MySQL数据源

  1. 使用HetuEngine管理员用户登录FusionInsight Manager,选择“集群 > 服务 > HetuEngine”,进入HetuEngine服务页面。
  2. 在“概览”页签下的“基本信息”区域,单击“HSConsole WebUI”后的链接,进入HSConsole界面。
  3. 选择“数据源”,单击“添加数据源”。在“添加数据源”页面填写参数。

    1. 配置“基本配置”,填写数据源名称,选择数据源类型“JDBC > MySQL”。
    2. 配置“MySQL配置”,参数配置请参考表2-801
      表2-801 MySQL配置

      参数

      描述

      取值样例

      驱动名称

      选择步骤 2中已提前上传的待使用的MySQL驱动,格式为xxx.jar。

      mysql-connector-java-8.0.11.jar

      JDBC URL

      连接MySQL的JDBC URL地址。

      格式:jdbc:mysql://MySQL数据库所在的IP地址:端口号

      端口号默认为3306。

      • IPv4:jdbc:mysql://192.168.1.1:3306
      • IPv6:jdbc:mysql://[192:168::1:1]:3306

      用户名

      连接MySQL数据源的MySQL用户名。

      -

      密码

      连接MySQL数据源的MySQL用户密码。

      -

    3. (可选)自定义配置。
      单击“增加”可以增加自定义配置参数。配置MySQL数据源自定义参数,参考表2-802
      表2-802 MySQL数据源自定义配置参数

      参数

      描述

      取值样例

      mysql.auto-reconnect

      是否自动重连。

      • true(默认值):开启自动重连。
      • false:关闭自动重连。

      true

      mysql.max-reconnects

      最大重连次数,默认值:3。

      3

      mysql.jdbc.use-information-schema

      驱动程序是否应该使用INFORMATION_SCHEMA来派生“DatabaseMetaData”使用的信息。

      true

      use-connection-pool

      是否使用JDBC连接池,默认值:false。

      false

      jdbc.connection.pool.maxTotal

      JDBC连接池中最大连接数,默认值:8。

      8

      jdbc.connection.pool.maxIdle

      JDBC连接池中最大空闲连接数,默认值:8。

      8

      jdbc.connection.pool.minIdle

      JDBC连接池中最小空闲连接数,默认值:0。

      0

      case-insensitive-name-matching

      HetuEngine支持的MySQL数据源的Schema和Table名称大小写格式敏感。

      • false(默认值):仅支持查询全小写的Schema和Table。
      • true:
        • 忽略大小写后无同名的Schema和Table:支持查询该Schema和Table。
        • 忽略大小写后存在同名的Schema和Table:不支持查询该Schema和Table。

      false

      case-insensitive-name-matching.cache-ttl

      MySQL数据源的大小写敏感的Schema和Table名称缓存超时时长,默认值:1m(1分钟)。

      1m

      dynamic-filtering.enabled

      是否将动态过滤器下推到JDBC查询中。

      • true(默认值):开启下推。
      • false:关闭下推。

      true

      dynamic-filtering.wait-timeout

      在启动JDBC查询之前,HetuEngine将等待从连接的构建端收集动态过滤器的最大持续时间。使用较大的超时可能会导致更详细的动态过滤器。但是也会增加某些查询的延迟,默认值:20s。

      20s

      unsupported-type-handling

      当连接器不支持此数据类型时,是否将其转换为VARCHAR,从而避免失败。

      • CONVERT_TO_VARCHAR:将不支持的类型转为VARCHAR类型,并且只支持对它们的读操作。
      • IGNORE(默认值):不支持的类型将不在查询结果中显示。

      IGNORE

      join-pushdown.enabled

      是否启用Join下推。

      • true(默认值):开启Join下推。
      • false:关闭Join下推。

      true

      join-pushdown.strategy

      用于评估Join操作是否被下推的策略。默认值:AUTOMATIC

      • AUTOMATIC(默认值):启用基于成本的连接下推。
      • EAGER:尽可能下推Join。即使表统计信息不可用,EAGER也可以下推Join,这可能会导致查询性能下降,因此仅建议将EAGER用于测试和故障排除场景。

      AUTOMATIC

      单击“删除”可以删除已增加的自定义配置参数。

    4. 单击“确定”。

  4. 登录集群客户端所在节点,执行以下命令,切换到客户端安装目录并认证用户。

    cd /opt/hadoopclient

    source bigdata_env

    kinit HetuEngine组件操作用户 (普通模式集群跳过)

  5. 执行以下命令,登录数据源的catalog。

    hetu-cli --catalog 数据源名称 --schema 数据库名 --tenant 租户名称

    例如执行以下命令:

    hetu-cli --catalog mysql_1 --schema mysql --tenant default

  6. 执行以下命令,可正常查看数据库表信息或不报错即表示连接成功。

    show tables;

MySQL与HetuEngine数据类型映射

MySQL数据类型到HetuEngine数据类型映射

MySQL类型

HetuEngine类型

BIT

BOOLEAN

BOOLEAN

TINYINT

TINYINT

TINYINT

SMALLINT

SMALLINT

INTEGER

INTEGER

BIGINT

BIGINT

DOUBLE PRECISION

DOUBLE

FLOAT

REAL

REAL(m, d)

REAL(m, d)

DECIMAL(p, s)

DECIMAL(p, s)

CHAR(n)

CHAR(n)

VARCHAR(n)

VARCHAR(n)

TINYTEXT

VARCHAR(255)

TEXT

VARCHAR(65535)

MEDIUMTEXT

VARCHAR(16777215)

LONGTEXT

VARCHAR

ENUM(n)

VARCHAR(n)

BINARY, VARBINARY, TINYBLOB, BLOB, MEDIUMBLOB, LONGBLOB

VARBINARY

JSON

JSON

DATE

DATE

TIME(n)

TIME(n)

DATETIME(n)

TIMESTAMP(n)

TIMESTAMP(n)

TIMESTAMP(n)

添加Oracle数据源

HetuEngine支持配置Oracle数据源实现对Oracle数据源的接入与查询功能。本章节指导用户在集群的HSConsole界面添加Oracle类型的JDBC数据源。

前提条件

  • 数据源与HetuEngine集群节点网络互通。
  • 集群已启用Kerberos认证(安全模式)创建HetuEngine管理员用户,集群未启用Kerberos认证(普通模式)创建HetuEngine业务用户,并为其赋予HDFS管理员权限,即创建用户时需同时加入“hadoop”和“hadoopmanager”用户组,创建用户可参考创建HetuEngine权限角色
  • 已创建HetuEngine计算实例,可参考创建HetuEngine计算实例
  • 已获取Oracle数据库所在的IP地址,端口号,数据库实例名称或是数据库pdb名称,用户名及密码。

HetuEngine对接Oracle数据源约束

  • 目前Oracle数据源默认为只读模式,支持Oracle12及以后版本。
  • HetuEngine支持的Oracle数据源的Schema和Table名称不区分大小写。
  • 不支持如下语法:CREATE SCHEMA、ALTER SCHEMA、DROP SCHEMA、INSERT INTO ... SELECT、INSERT OVERWRITE、UPDATE、ANALYZE、VIEW相关。
  • 当使用CLOB、NCLOB、BLOB或RAW(n)这些Oracle数据库类型的列,或者使用映射到这些Oracle数据库类型的Trino数据类型的列,不支持下推。
    例如:由于name在HetuEngine中是VARCHAR类型的列,映射到Oracle中是NCLOB,因此如下两个查询的谓词均不会下推。
    SELECT * FROM nation WHERE name>'abcd';
    SELECT * FROM nation WHERE name='abcd';
  • 如果指定了WHERE子句,则仅当WHERE中的谓词能够完全下推至Oracle的情况下才能执行DELETE。

配置Oracle数据源步骤

安装集群客户端

  1. 安装包含HetuEngine服务的集群客户端,例如安装目录为“/opt/hadoopclient”。

准备Oracle驱动

  1. 从Oracle官网获取Oracle驱动文件,格式为“ojdbcxxx.jar”,例如“ojdbc8.jar”。

    此处上传的驱动文件名有校验规则:Oracle数据源的驱动文件校验前缀“ojdbc”以及结尾的“jar”,中间的版本号不做校验,可以是任意字符,但是整体长度不能超过80个字符,且文件大小不超过100MB。

  2. 上传Oracle驱动文件至HetuEngine所在集群。

    可通过如下两种方式:
    • 通过Manager界面上传至HDFS:
      1. 使用HetuEngine管理员用户登录FusionInsight Manager,选择“集群 > 服务 > HDFS”,进入HDFS服务页面。
      2. 在“概览”页签下的“基本信息”区域,单击“NameNode Web UI”后的链接,进入NameNode Web UI界面。
      3. 选择“Utilities > Browse the file system”,单击,创建“/user/hetuserver/fiber/extra_file/driver/oracle”目录。
      4. 进入“/user/hetuserver/fiber/extra_file/driver/oracle”目录,单击上传步骤 2获取的Oracle驱动文件。
      5. 单击驱动文件所在行的“Permission”列的值,勾选“User”列的“Read”和“Write”,“Group”列的“Read”和“Other”列的“Read”,单击“Set”。
    • 通过使用HDFS命令直接上传:
      1. 登录HDFS服务客户端所在节点,切换到客户端安装目录,如“/opt/hadoopclient”。

        cd /opt/hadoopclient

      2. 执行以下命令配置环境变量。

        source bigdata_env

      3. 如果集群为安全模式,执行以下命令进行用户认证。普通模式集群无需执行用户认证。

        kinit HetuEngine管理员用户

        根据回显提示输入密码。

      4. 执行如下命令创建目录“/user/hetuserver/fiber/extra_file/driver/oracle”,并上传步骤 2获取的Oracle驱动,然后修改对应的权限。

        hdfs dfs -mkdir -p /user/hetuserver/fiber/extra_file/driver/oracle

        hdfs dfs -put ./Oracle驱动文件 /user/hetuserver/fiber/extra_file/driver/oracle

        hdfs dfs -chmod -R 644 /user/hetuserver/fiber/extra_file/driver/oracle

配置Oracle数据源

  1. 使用HetuEngine管理员用户登录FusionInsight Manager,选择“集群 > 服务 > HetuEngine”,进入HetuEngine服务页面。
  2. 在“概览”页签下的“基本信息”区域,单击“HSConsole Web UI”后的链接,进入HSConsole界面。
  3. 选择“数据源”,单击“添加数据源”。在“添加数据源”页面填写参数。

    1. 配置“基本配置”,填写数据源名称,选择数据源类型“JDBC > Oracle”。
    2. 配置“Oracle配置”,参数配置请参考表1 Oracle配置
      表2-803 Oracle配置

      参数

      描述

      取值样例

      驱动名称

      选择步骤 2中已提前上传的待使用的Oracle驱动,格式为ojdbcxxx.jar。

      ojdbc8.jar

      JDBC URL

      连接Oracle的JDBC URL地址。端口号默认为1521。

      可选择如下格式:

      • jdbc:oracle:thin@Oracle数据库所在的IP地址:端口号/Oracle数据库pdb名称
      • jdbc:oracle:thin@Oracle数据库所在的IP地址:端口号:Oracle数据库实例名称
      • jdbc:oracle:thin:@192.168.1.1:1521/orclpdb
      • jdbc:oracle:thin:@192.168.1.1:1521:orcl

      用户名

      连接Oracle数据源的Oracle用户名。

      -

      密码

      连接Oracle数据源的Oracle用户密码。

      -

    3. (可选)自定义配置。
      单击“增加”可以增加自定义配置参数。配置Oracle数据源自定义参数,参考表2 Oracle数据源自定义配置参数
      表2-804 Oracle数据源自定义配置参数

      参数

      描述

      取值样例

      case-insensitive-name-matching

      HetuEngine支持的Oracle数据源的Schema和Table名称大小写格式敏感。

      • false(默认值):仅支持查询全小写的Schema和Table。
      • true:
        • 忽略大小写后无同名的Schema和Table:支持查询该Schema和Table。
        • 忽略大小写后存在同名的Schema和Table:不支持查询该Schema和Table。

      false

      case-insensitive-name-matching.cache-ttl

      Oracle数据源的大小写敏感的Schema和Table名称缓存超时时长,默认值:1m(1分钟)。

      1m

      dynamic-filtering.enabled

      是否将动态过滤器下推到JDBC查询中。

      • true(默认值):开启下推。
      • false:关闭下推。

      true

      dynamic-filtering.wait-timeout

      在启动JDBC查询之前,HetuEngine将等待从连接的构建端收集动态过滤器的最大持续时间。使用较大的超时可能会导致更详细的动态过滤器。但是也会增加某些查询的延迟,默认值:20s。

      20s

      unsupported-type-handling

      当连接器不支持此数据类型时,是否将其转换为VARCHAR,从而避免失败。

      • CONVERT_TO_VARCHAR:将不支持的类型转为VARCHAR类型,并且只支持对它们的读操作。除了数据类型映射表格中有的类型,其余类型均不支持。
      • IGNORE(默认值):不支持的类型将不在查询结果中显示。

      IGNORE

      join-pushdown.enabled

      是否启用Join下推,启用连接下推可能会对某些查询语句产生负面影响。

      • true:开启Join下推。
      • false(默认值):关闭Join下推。

      false

      join-pushdown.strategy

      用于评估Join操作是否被下推的策略。

      • AUTOMATIC(默认值):启用基于成本的连接下推。
      • EAGER:尽可能下推Join。即使表统计信息不可用,EAGER也可以下推Join,这可能会导致查询性能下降,因此仅建议将EAGER用于测试和故障排除场景。

      AUTOMATIC

      oracle.number.default-scale

      Oracle Number(不带精度和小数位数)数据类型映射的HetuEngine Decimal类型的小数位数。默认未设置,如果不设置会视为该列不受支持。

      5

      oracle.remarks-reporting.enabled

      是否公开元数据注释:

      • true:公开元数据注释。
      • false(默认值):不通过REMARKS列公开元数据注释。

      false

      oracle.synonyms.enabled

      是否启用同义词功能,HetuEngine基于性能原因默认禁用了对Oracle SYNONYM的支持:

      • true:开启同义词功能。
      • false(默认值):禁用同义词功能。

      false

      oracle.source-encoding

      配置远端数据来源环境的字符集编码,防止数据出现乱码:

      • ZHS16GBK或GBK
      • AL32UTF8或UTF-8(默认值)

      UTF-8

      单击“删除”可以删除已增加的自定义配置参数。

    4. 单击“确定”。

  4. 登录集群客户端所在节点,执行以下命令,切换到客户端安装目录并认证用户。

    cd /opt/hadoopclient

    source bigdata_env

    kinit HetuEngine组件操作用户 (普通模式集群跳过)

  5. 执行以下命令,登录数据源的catalog。

    hetu-cli --catalog 数据源名称 --schema 数据库名 --tenant 租户名称

    例如执行以下命令:

    hetu-cli --catalog oracle_1 --schema oracle --tenant default

  6. 执行以下命令,可正常查看数据库表信息或不报错即表示连接成功。

    show tables;

Oracle与HetuEngine数据类型映射

数据映射约束:

  • HetuEngine不支持直接读取Oracle侧没有设置精度和规模的Number类型数据,需要在数据源配置中添加自定义参数“oracle.number.default-scale=s”来将其映射至decimal(38, s)类型。
  • HetuEngine不支持读取Number(p, s)数据类型中“p-s>38”的列。
  • Oracle侧的Date类型只存储到秒,所以映射到HetuEngine的数据类型为timestamp(0)。
  • HetuEngine查询的时间戳类型数据,如果秒的小数精度大于3,会直接截断为3位小数,而不是四舍五入。
  • 由于JDBC驱动程序中对于时间和日期支持的格式不同,插入或查询早于“1582-10-15”的日期时间时可能会出错。
  • HetuEngine中VARCHAR(n)会被映射到Oracle中的VARCHAR2(n CHAR), 如果n大于4000,则会被映射到NCLOB中;CHAR(n)会被映射到CHAR(n CHAR),如果n大于2000,也会被映射到NCLOB中。
  • HetuEngine不能将CHAR和VARCHAR数据类型写入到长度不合适的列中。
  • 使用CREATE TABLE AS从一个CHAR值创建NCLOB列会将初始值中的后缀空格去掉;但是如果将一个CHAR值插入到已存在的NCLOB列中,则会保留后缀的空格。
表2-805 Oracle数据类型到HetuEngine数据类型映射

Oracle类型

HetuEngine类型

NUMBER(p, s)

DECIMAL(p, s)

NUMBER(p)

DECIMAL(p, 0)

FLOAT[(p)]

DOUBLE

BINARY_FLOAT

REAL

BINARY_DOUBLE

DOUBLE

VARCHAR2(n CHAR)

VARCHAR(n)

VARCHAR2(n BYTE)

VARCHAR(n)

NVARCHAR2(n)

VARCHAR(n)

CHAR(n)

CHAR(n)

NCHAR(n)

CHAR(n)

CLOB

VARCHAR

NCLOB

VARCHAR

RAW(n)

VARBINARY

BLOB

VARBINARY

DATE

TIMESTAMP(0)

TIMESTAMP(p)

TIMESTAMP(3)

TIMESTAMP(p) WITH TIME ZONE

TIMESTAMP(3) WITH TIME ZONE

表2-806 HetuEngine数据类型到Oracle数据类型映射

HetuEngine类型

Oracle类型

TINYINT

NUMBER(3)

SMALLINT

NUMBER(5)

INTEGER

NUMBER(10)

BIGINT

NUMBER(19)

DECIMAL(p, s)

NUMBER(p, s)

REAL

BINARY_FLOAT

DOUBLE

BINARY_DOUBLE

VARCHAR

NCLOB

VARCHAR(n)

VARCHAR2(n CHAR) or NCLOB

CHAR(n)

CHAR(n CHAR) or NCLOB

VARBINARY

BLOB

DATE

DATE

TIMESTAMP

TIMESTAMP(3)

TIMESTAMP WITH TIME ZONE

TIMESTAMP(3) WITH TIME ZONE

功能增强

连接器中提供query功能支持直接查询底层数据库,仅支持Oracle原生的语法,因为完整的语句会被下推并且在Oracle中执行。可以用于访问HetuEngine中不可用的Oracle功能,或是当某些语句在Oracle侧执行的更快时使用。
SELECT * FROM TABLE(
  oracle.system.query(
    query => 'SELECT * FROM tpch.nation'));

添加GBase数据源

HetuEngine支持配置GBase数据源实现对GBase数据源的接入与查询功能。本章节指导用户在集群的HSConsole界面添加GBase类型的JDBC数据源。

前提条件

  • 数据源与HetuEngine集群节点网络互通。
  • HetuEngine所在集群的所有节点的“/etc/hosts”文件中,添加待对接数据源所在集群的主机名称和对应的IP映射。
  • 集群已启用Kerberos认证(安全模式)创建HetuEngine管理员用户,集群未启用Kerberos认证(普通模式)创建HetuEngine业务用户,并为其赋予HDFS管理员权限,即创建用户时需同时加入“hadoop”和“hadoopmanager”用户组,创建用户可参考创建HetuEngine权限角色
  • 已创建HetuEngine计算实例,可参考创建HetuEngine计算实例
  • 已获取GBase数据库所在的IP地址,端口号,用户名及密码。

HetuEngine对接GBase数据源约束

  • HetuEngine支持对接GBase操作的SQL语法:SHOW CATALOGS/SCHEMAS/TABLES/COLUMNS、DESCRIBE、USE、SELECT表/视图。
  • HetuEngine支持的GBase数据源的Schema和Table名称不区分大小写。

配置GBase数据源步骤

安装集群客户端

  1. 安装包含HetuEngine服务的集群客户端,例如安装目录为“/opt/hadoopclient”。

准备GBase驱动

  1. 从GBase官网获取GBase驱动文件,格式为“xxx.jar”,需为“gbase-connector-java-9.5.0.1-build1-bin.jar”及以后版本。
  2. 上传GBase驱动文件至HetuEngine所在集群。

    可通过如下两种方式:

    • 通过Manager界面上传至HDFS:
      1. 使用HetuEngine管理员用户登录FusionInsight Manager,选择“集群 > 服务 > HDFS”,进入HDFS服务页面。
      2. 在“概览”页签下的“基本信息”区域,单击“NameNode Web UI”后的链接,进入NameNode Web UI界面。
      3. 选择“Utilities > Browse the file system”,单击,创建“/user/hetuserver/fiber/extra_file/driver/gbase”目录。
      4. 进入“/user/hetuserver/fiber/extra_file/driver/gbase”目录,单击上传步骤 2获取的GBase驱动文件。
      5. 单击驱动文件所在行的“Permission”列的值,勾选“User”列的“Read”和“Write”,“Group”列的“Read”和“Other”列的“Read”,单击“Set”。
    • 通过使用HDFS命令直接上传:
      1. 将获取的GBase驱动文件上传至HDFS服务客户端所在节点任意目录。
      2. 登录HDFS服务客户端所在节点,切换到客户端安装目录,如“/opt/hadoopclient”。

        cd /opt/hadoopclient

      3. 执行以下命令配置环境变量。

        source bigdata_env

      4. 如果集群为安全模式,执行以下命令进行用户认证。普通模式集群无需执行用户认证。

        kinit HetuEngine管理员用户

        根据回显提示输入密码。

      5. 执行如下命令创建目录“/user/hetuserver/fiber/extra_file/driver/gbase”,并上传步骤 2获取的GBase驱动,然后修改对应的权限。

        hdfs dfs -mkdir -p /user/hetuserver/fiber/extra_file/driver/gbase

        hdfs dfs -put GBase驱动文件路径 /user/hetuserver/fiber/extra_file/driver/gbase

        hdfs dfs -chmod -R 644 /user/hetuserver/fiber/extra_file/driver/gbase

配置GBase数据源

  1. 使用HetuEngine管理员用户登录FusionInsight Manager,选择“集群 > 服务 > HetuEngine”,进入HetuEngine服务页面。
  2. 在“概览”页签下的“基本信息”区域,单击“HSConsole WebUI”后的链接,进入HSConsole界面。
  3. 选择“数据源”,单击“添加数据源”。在“添加数据源”页面填写参数。

    1. 配置“基本配置”,填写数据源名称,选择数据源类型“JDBC > GBase”。
    2. 配置“GBase配置”,参数配置请参考表2-807
      表2-807 GBase配置

      参数

      描述

      取值样例

      驱动名称

      选择步骤 2中已提前上传的待使用的GBase驱动,格式为xxx.jar。

      gbase-connector-java-9.5.0.1-build1-bin.jar

      JDBC URL

      连接GBase的JDBC URL地址。

      格式:jdbc:gbase://gbase数据库所在的IP地址:端口号

      端口号默认为5258。

      jdbc:gbase://192.168.1.1:5258

      用户名

      连接GBase数据源的GBase用户名。

      -

      密码

      连接GBase数据源的GBase用户密码。

      -

    3. (可选)自定义配置。

      单击“增加”可以增加自定义配置参数。配置GBase数据源自定义参数,参考表2-808

      表2-808 GBase数据源自定义配置参数

      参数

      描述

      取值样例

      GBase.auto-reconnect

      是否自动重连。

      • true(默认值):开启自动重连。
      • false:关闭自动重连。

      true

      GBase.max-reconnects

      最大重连次数,默认值:3。

      3

      GBase.jdbc.use-information-schema

      驱动程序是否应该使用INFORMATION_SCHEMA来派生“DatabaseMetaData”使用的信息。

      true

      use-connection-pool

      是否使用JDBC连接池,默认值:true。

      true

      jdbc.connection.pool.maxTotal

      JDBC连接池中最大连接数,默认值:8。

      8

      jdbc.connection.pool.maxIdle

      JDBC连接池中最大空闲连接数,默认值:8。

      8

      jdbc.connection.pool.minIdle

      JDBC连接池中最小空闲连接数,默认值:0。

      0

      unsupported-type-handling

      当连接器不支持此数据类型时,是否将其转换为VARCHAR,从而避免失败。

      • CONVERT_TO_VARCHAR:将不支持的类型转为VARCHAR类型,并且只支持对它们的读操作。
      • IGNORE(默认值):不支持的类型将不在查询结果中显示。

      IGNORE

      join-pushdown.enabled

      是否启用Join下推。

      • true(默认值):开启Join下推。
      • false:关闭Join下推。

      true

      单击“删除”可以删除已增加的自定义配置参数。

    4. 单击“确定”。

  4. 登录集群客户端所在节点,执行以下命令,切换到客户端安装目录并认证用户。

    cd /opt/hadoopclient

    source bigdata_env

    kinit HetuEngine组件操作用户 (普通模式集群跳过)

  5. 执行以下命令,登录数据源的catalog。

    hetu-cli --catalog 数据源名称 --schema 数据库名 --tenant 租户名称

    例如执行以下命令:

    hetu-cli --catalog gbase_1 --schema gbasedb --tenant default

  6. 执行以下命令,可正常查看数据库表信息或不报错即表示连接成功。

    show tables;

GBase与HetuEngine数据类型映射

表2-809 GBase与HetuEngine数据类型映射

GBase类型

HetuEngine类型

TINYINT

TINYINT

SMALLINT

SMALLINT

INTEGER

INTEGER

BIGINT

BIGINT

DOUBLE

DOUBLE

FLOAT

REAL

DECIMAL(p, s)

DECIMAL(p, s)

CHAR(n)

CHAR(n)

VARCHAR(n)

VARCHAR(n)

TEXT

VARCHAR(65535)

BLOB, LONGBLOB

VARBINARY

DATE

DATE

TIME

TIME

DATETIME

TIMESTAMP(6)

TIMESTAMP(n)

TIMESTAMP(n)

配置HetuEngine物化视图

HetuEngine物化视图概述

背景介绍

HetuEngine具备物化视图能力。在实际运用中,将高频访问的SQL查询和有高耗时的算子(连接, 聚合等算子)的SQL通过建立物化视图进行预计算,然后在查询的SQL中将能匹配到物化视图的查询或者子查询转换为物化视图,避免了数据的重复计算,这种情况下一般能较大地提高查询的响应效率。

物化视图通常基于对数据表进行聚合和连接的查询结果创建。

物化视图支持“查询重写”,这是一种优化技术,即将基于原始表编写的查询语句转换为查询一个或多个物化视图语句的等效请求。如下物化视图的SQL示例:

create materialized view mv.default.mv1 with(storage_table='hive.default.mv1') AS select id from hive.mvschema.t1;

该物化视图实际数据的存储表为“hive.default.mv1”,在查询重写时,查询SQL“select id from hive.mvschema.t1”会被重写成查询物化视图的表,即“select id from hive.default.mv1”。

使用场景

与普通的视图相比,物化视图会存储实际数据,占用存储资源,并且会有预计算带来的数据滞后性的问题,因此物化视图推荐在如下场景中使用:

  • 执行频次高的查询。
  • 查询包含非常耗时的操作,比如聚合、连接操作等。
  • 对查询结果数据可以允许有一定的滞后性。
  • 物化视图仅支持对接共部署Hive和外接Hive数据源,并且数据源表的存储格式为ORC或者PARQUET,不支持跨源跨域场景。

权限介绍

物化视图权限如表2-810。物化视图权限控制依赖Ranger,若关闭Ranger鉴权会带来权限失效的风险。

表2-810 HetuEngine物化视图权限介绍

操作

catalog mv权限

物化视图存储表的权限

原始物理表的权限

创建物化视图

表的Create权限

NA

对应列的查询权限

删除物化视图

删除表权限

NA

NA

刷新物化视图

表的更新权限

NA

对应列的查询权限

修改物化视图属性或状态

表的Alter权限

NA

NA

使用物化视图重写查询语句

NA

NA

对应列的查询权限

使用物化视图重写查询语句的执行计划(EXPLAIN)

NA

对应列的查询权限

对应列的查询权限

查询物化视图

对应列的查询权限

NA

NA

物化视图和非物化视图的物理表联合查询

对应列的查询权限

NA

对应列的查询权限

查看物化视图

NA

NA

NA

查看物化视图的创建语句

表的Show权限

表的Show权限

NA

使用介绍

表2-811 物化视图使用介绍

阶段

说明

参考章节

物化视图SQL示例

介绍物化视图支持的操作,包括创建物化视图、列举物化视图、查询物化视图等

HetuEngine物化视图SQL示例

配置物化视图改写能力

开启物化视图能力,提高查询的响应效率

配置HetuEngine物化视图改写能力

配置物化视图推荐能力

自动学习并推荐对业务最有价值的物化视图SQL,使在线查询效率获得倍数提升,同时有效降低系统负载压力

配置HetuEngine物化视图推荐能力

配置物化视图缓存能力

可将多次执行并改写后的SQL保存到缓存中,再次执行这条SQL时会直接从缓存中获取改写后的SQL,而不是重新对SQL进行改写,提高查询效率

配置HetuEngine物化视图缓存能力

配置物化视图有效期与数据刷新

  • 设置物化视图的有效期,当前系统只会使用有效期内的物化视图进行自动改写
  • 设置数据定期更新,可定时手动刷新或自动刷新物化视图

配置HetuEngine物化视图的有效期与数据刷新能力

配置智能物化视图

提供自动化物化视图的创建,无需手动执行SQL创建物化视图(推荐使用)

配置HetuEngine智能物化视图能力

查看物化视图自动化任务记录

看任务执行情况,帮助评估集群运行健康状况

查看HetuEngine物化视图自动化任务

HetuEngine物化视图SQL示例

物化视图SQL示例请参考表2-812

详细SQL语法请参考《MapReduce服务(MRS) 3.5.1-LTS HetuEngine SQL语法手册(for 华为云Stack 8.5.1)》

表2-812 物化视图的操作

操作

功能

物化视图SQL样例

备注

创建物化视图

(创建物化视图时,只创建了物化视图的定义,数据填充需要使用refresh materialized view name刷新物化视图数据)

创建永不过期的物化视图

create materialized view mv.default.mv1 with(storage_table='hive.default.mv11') AS select id from hive.mvschema.t1;

创建有效期为1天不启动自动刷新的物化视图

create materialized view mv.default.mv1 with(storage_table='hive.default.mv11', mv_validity = '24h') AS select id from hive.mvschema.t1;

mv_validity:物化视图的有效期

创建每小时自动刷新一次数据的物化视图

create materialized view mv.default.mv1 with(storage_table='hive.default.mv1', need_auto_refresh = true, mv_validity = '1h', start_refresh_ahead_of_expiry = 0.2, refresh_priority = 3, refresh_duration = '5m') AS select id from hive.mvschema.t1;

  • need_auto_refresh:是否启用自动刷新
  • start_refresh_ahead_of_expiry:刷新任务在“mv_validity*(1-start_refresh_ahead_of_expiry)”的时间触发一次更新状态为“可刷新”
  • refresh_priority:刷新任务优先级
  • refresh_duration:刷新任务的最大允许时间

列举物化视图

列举catalog名为“mv”,schema名为“mvschema”的所有物化视图

show materialized views from mvschema;

mvschema是schema的名称,catalog固定为“mv”

根据子句“LIKE”筛选视图名满足规则运算表达式的物化视图

show MATERIALIZED VIEWs in mvschema tables like '*mvtb_0001';

mvschema是schema的名称

查询物化视图的创建语句

查询mv.default.mv1的物化视图创建语句

show create materialized view mv.default.mv1;

mv1是物化视图的名称

查询物化视图

查询mv.default.mv1的数据

select * from mv.default.mv1;

mv1是物化视图的名称

刷新物化视图

刷新mv.default.mv1的物化视图

refresh materialized view mv.default.mv1;

-

修改物化视图属性

修改mv.default.mv1的物化视图的属性

Alter materialized view mv.mvtestprop.pepa_ss set PROPERTIES refresh_priority = 2;

refresh_priority = 2是物化视图的属性

修改物化视图状态

修改mv.default.mv1的物化视图的状态

alter materialized view mv.default.mv1 set status SUSPEND;

SUSPEND是物化视图的状态,状态还包括:

  • SUSPEND:暂停使用状态,暂停使用的物化视图不会参与改写
  • ENABLE:可使用状态
  • REFRESHING:正在刷新物化视图数据,不可用于改写
  • DISABLE:关闭使用

仅支持ENABLE和SUSPEND相互转换,以及将DISABLE状态修改为SUSPEND或ENABLE

删除物化视图

删除mv.default.mv1的物化视图

drop materialized view mv.default.mv1;

-

启用使用物化视图改写SQL进行优化

在session级别启用使用物化视图改写SQL进行优化

set session materialized_view_rewrite_enabled=true;

-

验证查询是否能通过改写成物化视图进行SQL优化

验证查询SQL语句能否被mv.default.mv1改写优化

verify materialized view mvname(mv.default.mv1) originalsql select id from hive.mvschema.t1;

-

SQL级别使用指定的物化视图进行SQL改写优化

在查询中强制使用mv.default.mv1进行优化

/*+ REWRITE(mv.default.mv1) */ select id from hive.mvschema.t1;

-

SQL级别禁用物化视图进行SQL改写优化

在查询中禁止物化视图进行优化

/*+ NOREWRITE */ select id from hive.mvschema.t1;

-

刷新物化视图元数据信息缓存

同步不同租户间物化视图元数据信息缓存

refresh catalog mv;

-

创建物化视图的“AS SELECT”的子句

创建物化视图的“AS SELECT”的子句不能包含calcite SQL解析和改写功能中的保留关键词,如“default”。如果想要在创建物化视图的“AS SELECT”子句中使用保留关键词,需要遵循以下的任一解决方案:
  • 在创建MV和执行原始查询时,需给默认模式名称添加双引号

    以在“AS SELECT”子句中使用保留关键词“default”为例:

    创建物化视图

    CREATE MATERIALIZED VIEW mv.default.mv1 WITH(storage_table='hive.default.mv11') AS SELECT id FROM hive."default".t1;

    SELECT查询

    SELECT id FROM hive."default".t1;
  • 在Session级别设置相应的catalog和schema,而不是在查询中传递完全限定的名称

    以指定catalogname为“hive”,schemaname为“default”为例:

    USE hive.default; 

    创建物化视图

    CREATE MATERIALIZED VIEW mv.default.mv1 WITH(storage_table='hive.default.mv11') AS SELECT id FROM t1;

    SELECT查询

    SELECT id FROM t1;

配置HetuEngine物化视图改写能力

开启物化视图改写能力

HetuEngine支持在System级别或者Session级别开启物化视图改写能力,开启方法如下所示:

  • Session级别:

    HetuEngine客户端执行set session materialized_view_rewrite_enabled=true

  • System级别:
    1. 使用具有访问HetuEngine WebUI界面权限的用户登录FusionInsight Manager。
    2. 选择“集群 > 服务 > HetuEngine”,进入HetuEngine服务页面。
    3. 在概览页签下的“基本信息”区域单击“HSConsole WebUI”后的链接,进入HSConsole界面。
    4. 单击“计算实例”,查看待操作的租户的实例状态,当绿色图标和蓝色图标数量均为“0”时,可执行5配置开启物化视图改写能力。
    5. 在“计算实例”页签,在待操作的实例所属租户所在行的“操作”列单击“配置”,进入“配置实例”页签,添加如下自定义参数。

      名称

      参数文件

      materialized.view.rewrite.enabled

      true

      coordinator.config.properties

      materialized.view.rewrite.timeout

      5

      coordinator.config.properties

      • materialized.view.rewrite.timeout:物化视图的重写超时控制(单位:秒),推荐5s。物化视图重写时会消耗一定的时间,添加该参数可限制重写所带来的性能损耗,物化视图重写超时后会执行原始SQL。
      • 若使用Session级别开启物化视图功能,并需要开启物化视图重写超时控制,可先执行set session materialized_view_rewrite_timeout = 5
    6. 参数添加完成后, 将“立即启动”置为“是”,单击“确定”。

物化视图改写能力支持范围

  • 物化视图支持的类型

    BOOLEAN、DECIMAL、DOUBLE、REAL/FLOAT、INT、BIGINT、SMALLINT、TINYINT、CHAR/VARCHAR、DATE、TIME、TIMESTAMP、INTERVAL YEAR TO MONTH、INTERVAL DAY TO SECOND、BINARY/VARBINARY、UUID。

  • 物化视图改写支持的函数
    • 转换函数:只支持CAST函数。
    • 二进制函数:支持《MapReduce服务(MRS) 3.5.1-LTS HetuEngine SQL语法手册(for 华为云Stack 8.5.1)》上声明的所有二进制函数。
    • 字符串函数:支持所有字符串函数,包括char_length、character_length、chr、codepoint、decode、encode、find_in_set、format_number、locate、hamming_distance、instr、levenshtein、levenshtein_distance、ltrim、lpad、octet_length、position、quote、repeat2。
    • 数学运算符:支持所有数学运算符。
    • 聚合函数:支持的聚合函数包括COUNT、SUM、MIN、MAX、AVG、LEAD、LAG、FIRST_VALUE、LAST_VALUE、COVAR_POP、COVAR_SAMP、REGR_SXX、REGR_SYY、STDDEV_POP、STDDEV_SAMP、VAR_POP、VAR_SAMP、ROW_NUMBER、RANK、PERCENT_RANK、DENSE_RANK、CUME_DIST。

    以下场景,物化视图不支持对包含了函数的SQL查询进行改写:

    • SQL中包含无参函数
    • SQL中包含了HetuEngine支持的会根据参数的类型获得不同类型的返回值的函数
    • SQL中函数存在嵌套使用,或者是使用的函数会发生异常导致重写失败的函数

    函数详情信息可参考《MapReduce服务(MRS) 3.5.1-LTS HetuEngine SQL语法手册(for 华为云Stack 8.5.1)》的“SQL函数和操作符”章节。

  • 物化视图创建语句改写不支持二段式表名,支持一段式和三段式表名。

    如支持改写表名为“hive.mvschema.t1”和“t1”,不支持改写表名为“mvschema.t1”。

物化视图改写场景示例

物化视图的改写的核心原理是逻辑上创建的物化视图的数据要包含未来的查询语句要查询的数据,也可以是未来查询中的子查询要包含的全部数据。建议用户打开自动创建物化视图功能针对性的创建物化视图,以下为部分场景示例:

创建物化视图SQL样例中省略“CREATE MATERIALIZED VIEW xxx WITH(xxx) AS”,完整语句模板可参考表2-812

表2-813 物化视图改写场景示例

场景

描述

创建物化视图SQL样例

用户查询SQL样例

查询SQL是否能被改写

备注

全表查询

最基本的全表查询场景

select * from tb_a;

select * from tb_a;

创建全表扫描的物化视图没有实际意义,不支持

列查询

最基本的列查询场景

select col1,col2,col3 from tb_a;

select col1,col2,col3 from tb_a;

-

用户查询重命名

select col1 from tb_a;

select col1 as a from tb_a;

-

select col1,col2,col3 from tb_a;

select col1 as a,col2 as b,col3 as c from tb_a;

-

数学表达式

select col1*col2 from tb_a;

select col2*col1 from tb_a;

需要两个列的类型一样

物化视图使用源列,用户查询使用cast

select col1,col2 from tb_a;

select cast(col1 as varchar),col2 from tb_a;

物化视图使用原数据列,用户查询使用函数没有过滤条件不改写

物化视图使用原数据列,用户查询也使用原数据列加过滤条件可改写

case when场景

select col1, (case col2 when 1 then 'b' when 2 'a' end) as col from tb_a;

select col1, (case col2 when 1 then 'b' when 2 'a' end) as col from tb_a;

不支持查询列中出现case when场景

字符串函数

select col13 from tb_a;

select length(col13) from tb_a;

所有的字符串函数用原表数据建立物化视图不加过滤条件的查询做物化视图不会改写

select length(col13) from tb_a;

select length(col13) from tb_a;

-

聚合函数列查询

count

物化视图和用户查询一样使用count

select count(col1) from tb_a;

select count(col1) from tb_a;

-

物化视图使用源数据,用户查询使用count

select col1 from tb_a;

select count(col1) from tb_a;

-

sum

物化视图和用户查询一样使用sum

select sum(col1) from tb_a;

select sum(col1) from tb_a;

-

物化视图使用源数据,用户查询使用sum

select col1 from tb_a;

select sum(col1) from tb_a;

-

过滤查询

(核心在于物化视图的数据逻辑上要比查询SQL相同或者更多)

where过滤

物化视图最大范围(<)

select col1 from tb_a;

select col1 from tb_a where col1<11;

-

物化视图范围大于用户查询范围(<)

select col1 from tb_a where col1<50;

select col1 from tb_a where col1<45;

-

select col1 from tb_a where col1<50;

select col1 from tb_a where col1<=45;

-

select col1 from tb_a where col1<50;

select col1 from tb_a where col1 between 21 and 29;

-

物化视图范围等于用户查询范围(>)

select col1 from tb_a where col1<50;

select col1 from tb_a where col1<50;

-

物化视图范围大于用户查询范围(and)

select col1 from tb_a where col1<60 and col1>30;

select col1 from tb_a where col1<55 and col1>30;

-

select col1 from tb_a where col1<60 and col1>30;

select col1 from tb_a where col1 between 35 and 55;

-

select col1 from tb_a where col1<60 and col1>30;

select col1 from tb_a where (col1<55 and col1>30) and col1 = 56;

-

where嵌套子查询

子查询源表做物化视图

select col1 from tb_a;

select count(col1) from tb_a where col1=(select min(col1) from tb_a);

-

子查询做物化视图

select min(col1) from tb_a;

select count(col1) from tb_a where col1=(select min(col1) from tb_a);

-

父查询源表做物化视图

select col1 from tb_a where col1=(select min(col1) from tb_a);

select count(col1) from tb_a where col1=(select min(col1) from tb_a);

-

父查询做物化视图

select count(col1) from tb_a where col1=(select min(col1) from tb_a);

select count(col1) from tb_a where col1=(select min(col1) from tb_a);

-

limit

limit在查询里

select col1 from tb_a;

select col1 from tb_a limit 5;

-

select col1 from tb_a limit 5;

select col1 from tb_a limit 5;

-

select col1 from tb_a limit 5;

select col1 from tb_a;

-

limit结合order by

select col1 from tb_a;

select col1 from tb_a order by col1 limit 5;

创建物化视图时使用order by可能导致改写后结果无序,如果开启物化视图改写功能,查询SQL中有order by和limit,建议创建物化视图SQL去掉limit和order by

select col1 from tb_a order by col1;

select col1 from tb_a order by col1 limit 5;

select col1 from tb_a order by col1 limit 5;

select col1 from tb_a order by col1 limit 5;

having过滤

物化视图最大范围(<)

select col1 from tb_a;

select col1 from tb_a group by col1 having col1 <11;

group by + having:having的场景和where不一样,having的条件无法做到补偿,要求物化视图SQL的没有having条件或者与用户查询SQL的having条件一致

物化视图范围大于用户查询范围(<)

select col1 from tb_a group by col1 having col1<50;

select col1 from tb_a group by col1 having col1<45;

select col1 from tb_a group by col1 having col1<50;

select col1 from tb_a group by col1 having col1<=45;

select col1 from tb_a group by col1 having col1<50;

select col1 from tb_a group by col1 having col1=45;

select col1 from tb_a group by col1 having col1<50;

select col1 from tb_a group by col1 having col1 between 21 and 29;

物化视图范围等于用户查询范围(<)

select col1 from tb_a group by col1 having col1<50;

select col1 from tb_a group by col1 having col1<50;

JOIN关联查询

两个子查询做物化视图

select col1,col3 from tb_a where col1<11;

with t1 as (select col1,col3 from tb_a where col1<11),t2 as (select cast(col2 as varchar) col2,col3 from tb_b) select col1,col2 from t1 join t2 on t1.col3=t2.col3;

-

select cast(col2 as varchar) col2,col3 from tb_b;

with t1 as (select col1,col3 from tb_a where col1<11),t2 as (select cast(col2 as varchar) col2,col3 from tb_b) select col1,col2 from t1 join t2 on t1.col3=t2.col3;

-

父查询做物化视图

with t1 as (select col1,col3 from tb_a),t2 as (select col2,col3 from tb_b) select col1,col2 from t1 join t2 on t1.col3=t2.col3;

with t1 as (select col1,col3 from tb_a where col1<11),t2 as (select cast(col2 as varchar) col2,col3 from tb_b) select col1,col2 from t1 join t2 on t1.col3=t2.col3;

-

聚合+JOIN查询

源表数据做物化视图

select col1,col3 from tb_a;

with t1 as (select col1,col3 from tb_a where col1<11),t2 as (select cast(col2 as varchar) col2,col3 from tb_b) select count(col1) from t1 join t2 on t1.col3=t2.col3;

-

select col2,col3 from tb_b;

with t1 as (select col1,col3 from tb_a where col1<11),t2 as (select cast(col2 as varchar) col2,col3 from tb_b) select count(col1) from t1 join t2 on t1.col3=t2.col3;

-

子查询做物化视图

select col1,col3 from tb_a where col1<11;

with t1 as (select col1,col3 from tb_a where col1<11),t2 as (select cast(col2 as varchar) col2,col3 from tb_b) select count(col1) from t1 join t2 on t1.col3=t2.col3;

-

select cast(col2 as varchar) col2,col3 from tb_b;

with t1 as (select col1,col3 from tb_a where col1<11),t2 as (select cast(col2 as varchar) col2,col3 from tb_b) select count(col1) from t1 join t2 on t1.col3=t2.col3;

-

子查询使用源表的父查询(非聚合查询)做物化视图

with t1 as (select col1,col3 from tb_a),t2 as (select col2,col3 from tb_b) select col1,col2 from t1 join t2 on t1.col3=t2.col3;

with t1 as (select col1,col3 from tb_a where col1<11),t2 as (select cast(col2 as varchar) col2,col3 from tb_b) select count(col1) from t1 join t2 on t1.col3=t2.col3;

-

父查询(非聚合查询)做物化视图

with t1 as (select col1,col3 from tb_a where col1<11),t2 as (select cast(col2 as varchar) col2,col3 from tb_b) select col1,col2 from t1 join t2 on t1.col3=t2.col3;

with t1 as (select col1,col3 from tb_a where col1<11),t2 as (select cast(col2 as varchar) col2,col3 from tb_b) select count(col1) from t1 join t2 on t1.col3=t2.col3;

-

父查询做物化视图

with t1 as (select col1,col3 from tb_a where col1<11),t2 as (select cast(col2 as varchar) col2,col3 from tb_b) select count(col1) from t1 join t2 on t1.col3=t2.col3;

with t1 as (select col1,col3 from tb_a where col1<11),t2 as (select cast(col2 as varchar) col2,col3 from tb_b) select count(col1) from t1 join t2 on t1.col3=t2.col3;

-

配置HetuEngine物化视图推荐能力

操作场景

HetuEngine QAS实例可对用户的SQL执行历史记录提供自动感知、自动学习、自动诊断服务,开启物化视图推荐能力后,系统能自动学习并推荐对业务最有价值的物化视图SQL,使HetuEngine具备自动预计算加速能力,在相关场景下在线查询效率获得倍数提升,同时有效降低系统负载压力。

前提条件

  • 集群运行正常并至少安装一个QAS实例。
  • 已创建用于访问HetuEngine WebUI界面的用户,如Hetu_user,用户创建具体操作请参见创建HetuEngine权限角色

开启物化视图推荐功能

  1. Hetu_user用户登录FusionInsight Manager页面。
  2. 选择“集群 > 服务 > HetuEngine > 配置 > 全部配置 > QAS(角色) > 物化视图推荐”,参考表2-814配置物化视图推荐参数,其他参数保持默认即可。

    表2-814 物化视图推荐参数

    参数名称

    描述

    qas.enable.auto.recommendation

    true

    开启物化视图推荐,默认值为“false”

    qas.sql.submitter

    如:default,zuhu1

    启用物化视图推荐功能的租户名称,多租户用英文逗号隔开

    qas.schedule.fixed.delay

    1d

    推荐物化视图的周期,建议一天一次

    qas.threshold.for.mv.recommend

    0.05

    物化视图推荐筛选阈值,取值范围为“0.001-1”,建议根据实际业务情况调整

  3. 单击“保存”,保存配置。
  4. 单击“实例”,勾选所有QAS实例,选择“更多 > 重启实例”,输入密码重启QAS所有实例使参数生效。

查看物化视图推荐结果

  1. Hetu_user用户登录FusionInsight Manager页面。
  2. 选择“集群 > 服务 > HetuEngine”,进入HetuEngine服务页面。
  3. 在概览页签下的“基本信息”区域单击“HSConsole WebUI”后的链接,进入HSConsole界面。
  4. 选择“SQL运维 > 物化视图推荐”,可根据“租户”、“状态”、“推荐周期”、“物化视图名称”进行搜索,支持模糊搜索,支持导出指定物化视图推荐结果信息。

    物化视图任务的“状态”包括如下:
    表2-815 物化视图任务的“状态”

    状态名称

    描述

    状态名称

    描述

    To Be Created

    待创建

    Deleting

    删除中

    Creating

    创建中

    Deleted

    已删除

    Created

    创建完成

    Planning

    计划中

    Failed

    创建失败

    Aborted

    已终止

    Updating

    更新中

    Duplicated

    重复推荐

配置HetuEngine物化视图缓存能力

对于一条SQL,创建了对应的物化视图后,执行这条SQL时,将被改写为通过物化视图查询。如果开启了物化视图的“重写缓存”功能,那么多次执行这条SQL后,改写后的SQL将会保存到缓存中(默认最多保存10000条),在缓存有效时间(默认24小时)内,执行这条SQL时会直接从缓存中获取改写后的SQL,而不是重新对SQL进行改写。

可在计算实例中添加自定义参数“rewrite.cache.timeout”和“rewrite.cache.limit”分别设置缓存有效时间和最多能保存的改写SQL的条数。

  • 创建一个新的物化视图,或者删除一个已有的物化视图时,缓存将失效。
  • 如果缓存中被改写的SQL查询所关联的物化视图失效,或者处于REFRESHING状态,该条被改写的SQL查询将不会被使用。
  • 当使用缓存时,被执行的SQL不能有任何改变,否则它将被当做一条新的SQL查询。
  • 创建的物化视图中最多有500个可以用于SQL查询的改写,也就是SQL改写时使用的物化视图如果被包含在这500个中,那么就会进行改写,否则就当做普通SQL执行。可参考•System级别:在计算实例中添加自定义参数“hetu.select.top.materialized.view”来改变允许使用的物化视图个数。

开启物化视图“重写缓存”

  • Session级别:

    HetuEngine客户端执行set session rewrite_cache_enabled=true

  • System级别:
    1. 使用具有访问HetuEngine WebUI界面权限的用户登录FusionInsight Manager。
    2. 选择“集群 > 服务 > HetuEngine”,进入HetuEngine服务页面。
    3. 在概览页签下的“基本信息”区域单击“HSConsole WebUI”后的链接,进入HSConsole界面。
    4. 单击“计算实例”,查看待操作的租户的实例状态,当绿色图标和蓝色图标数量均为“0”时,可执行5配置开启物化视图改写能力。
    5. 在“计算实例”页签,在待操作的实例所属租户所在行的“操作”列单击“配置”,进入“配置实例”页签,添加如下自定义参数。

      名称

      参数文件

      描述

      rewrite.cache.enabled

      true

      coordinator.config.properties

      启用物化视图“重写缓存”

      rewrite.cache.timeout

      86400000

      coordinator.config.properties

      • 修改“重写缓存”的有效期
      • 不填则使用默认值:86400000,单位:ms

      rewrite.cache.limit

      10000

      coordinator.config.properties

      • 修改“重写缓存”的缓存上限
      • 不填则使用默认值:10000,单位:条
    6. 参数添加完成后,将“立即启动”置为“是”,单击“确定”。

配置HetuEngine物化视图的有效期与数据刷新能力

物化视图的有效期

创建物化视图的“mv_validity”字段为物化视图的有效期,HetuEngine只会使用有效期内的物化视图进行自动改写。

物化视图的数据刷新

如果需要数据定期更新,需要定时刷新物化视图,可以使用如下两种方式实现:

  • 手动刷新物化视图

    HetuEngine客户端执行refresh materialized view <mv name>,或者在用户的业务程序通过JDBC驱动执行refresh materialized view <mv name>进行手动更新。

  • 自动刷新物化视图
    1. 如果要启动物化视图的自动刷新能力,必须存在一个被设置为维护实例的计算实例,设置维护实例可参考14.6.4-配置HetuEngine维护实例
    2. 使用“create materialized view”创建具备自动刷新的物化视图。
      • 如果物化视图过多,可能会导致物化视图在刷新的等待队列中等待时间过长而过期。
      • 自动刷新功能不会自动刷新状态为disable的物化视图。

查询外部Hive数据源使用自动刷新物化视图注意事项

维护实例默认使用HetuEngine内置用户hetuserver/hadoop.<系统域名>作为执行物化视图自动刷新的用户, 当创建物化视图语句查询外部Hive数据源,且该数据源开启数据源鉴权时,需修改执行自动刷新的用户,修改方法如下:

  1. 对端集群是否已安装HetuEngine服务。

  2. 准备系统用于自动刷新的用户。

    1. 在本端集群和对端集群同时创建同名人机用户。

      mvuser为例,对端集群需要为mvuser添加“supergroup”用户组,本端集群需要为mvuser添加“supergroup”和“hive”用户组,并且添加对应维护实例的租户角色。

    2. (可选)若本端集群开启了Ranger鉴权,则需要给mvuser用户添加刷新物化视图和set session的权限,可分别参考表2-810表2-1263

  3. 使用HetuEngine管理员用户登录FusionInsight Manager页面。
  4. 选择“集群 > 服务 > HetuEngine > 配置 > 全部配置”,进入HetuEngine服务配置页面。
  5. 搜索“jobsystem.customized.properties”,添加用户自定义配置名称为“hetuserver.engine.jobsystem.inner.principal”,值为如下内容,添加完成后单击“保存”,根据界面提示保存配置。

    • 对端集群已安装HetuEngine服务:值为“hetuserver”。
    • 对端集群未安装HetuEngine服务:值为2.a创建的用户名。

  6. 单击“实例”,勾选所有HSBroker实例,选择“更多 > 重启实例”,根据界面提示重启HSBroker实例。
  7. 单击“概览”,在“基本信息”区域单击“HSConsole WebUI”后的链接,进入HSConsole界面。在“计算实例”页签,找到维护实例,单击“操作”列的“重启”根据界面提示重启维护实例。

    在计算实例的“实例名”列中,存在图标的即为维护实例,也可以通过14.6.4-配置HetuEngine维护实例章节确认维护实例。

配置HetuEngine智能物化视图能力

概述

基于智能物化视图,HetuEngine可以提供智能预计算与缓存加速能力。HetuEngine QAS角色能够自动提取历史SQL语句进行分析学习,基于收益最大化原则自动生成高价值物化视图的候选SQL。在实际运用中,HetuEngine管理员可选择通过配置“维护实例”等,开启物化视图的自动创建与自动刷新功能。业务用户可以通过配置客户端Session来获得基于自动创建的物化视图的自动改写与提速。

该能力可以极大降低用户使用物化视图功能的使用难度,带来业务无感知的分析加速效果。HetuEngine管理员通过付出少量的计算资源和存储空间,可实现对高频SQL业务的智能加速。同时,该能力可以降低数据平台的整体负载(CPU、内存、IO等),有助于提升系统稳定性。

智能物化视图包括以下几个功能:

  • 自动推荐物化视图
  • 自动创建物化视图
  • 自动刷新物化视图
  • 自动删除物化视图

前提条件

集群运行正常并至少安装一个QAS实例。

应用流程

图2-255 HetuEngine智能物化视图应用流程
表2-816 HetuEngine智能物化视图应用流程说明

阶段

说明

参考章节

开启物化视图推荐功能

开启物化视图推荐功能之后,QAS实例会根据用户的SQL执行记录自动推荐高价值的物化视图SQL,推荐的物化视图语句可在HSConsole界面的物化视图推荐页面查看,可参考查看物化视图推荐结果

开启物化视图推荐功能

设置维护实例

设置计算实例为维护实例之后,维护实例会对物化视图推荐功能所推荐的物化视图SQL进行自动创建、刷新、删除等操作,所产生的自动化任务记录可在HetuEngine自动化任务页面查看,可参考查看HetuEngine物化视图自动化任务

配置HetuEngine维护实例

启用物化视图改写能力

开启物化视图改写能力之后,HetuEngine会根据用户输入的SQL语句判断是否满足物化视图改写,将能匹配到物化视图的查询或者子查询转换为物化视图,避免了数据的重复计算。

配置HetuEngine物化视图改写能力

查看HetuEngine物化视图自动化任务

操作场景

本章节指导用户在HSConsole页面查看HetuEngine自动化任务的任务状态和任务执行结果等信息。用户可定期查看任务执行情况,帮助评估集群运行健康状况。

前提条件

已创建用于访问HetuEngine WebUI界面的用户,用户创建具体操作请参见创建HetuEngine权限角色

操作步骤

  1. 使用具有访问HetuEngine WebUI界面权限的用户登录FusionInsight Manager,选择“集群 > 服务 > HetuEngine”,进入HetuEngine服务页面。
  2. 在概览页签下的“基本信息”区域单击“HSConsole WebUI”后的链接,进入HSConsole界面。
  3. 单击“自动化任务”进入任务查询页面,用户可根据任务的“任务类型”、“状态”、“附加信息”、“起止时间”进行搜索,支持模糊搜索。

    搜索条件

    描述

    任务类型

    ALL:所有类型

    Refresh of materialized view:刷新物化视图

    Recommendation of materialized view:推荐物化视图

    Auto create materialized view:自动创建物化视图

    Drop auto created and stale materialized view:自动删除物化视图

    状态

    ALL:所有状态

    success:任务运行成功

    failed:任务运行失败

    waiting:任务等待

    running:任务正常运行

    skipped:此任务跳过

    timeout:任务执行超时

    unknown:任务状态未知

  4. 单击“查询”,页面即展示匹配的任务信息。

配置HetuEngine SQL诊断功能

操作场景

HetuEngine QAS实例可对用户的SQL执行历史记录提供自动感知、自动学习、自动诊断服务,提升在线SQL运维能力,自动加速在线SQL分析任务,开启SQL诊断能力后,系统可实现如下能力:

  • 自动感知并向集群管理员展现不同时间周期范围内的租户级、用户级的SQL任务统计,帮助集群管理员快速预判业务运行状态和潜在风险。
  • 自动诊断出大SQL、慢SQL及相关提交信息,面向集群管理员多维度可视化呈现,同时提供大SQL、慢SQL的诊断与优化建议。

前提条件

  • 集群运行正常并至少安装一个QAS实例。
  • 已创建用于访问HetuEngine WebUI界面的用户,如Hetu_user,用户创建具体操作请参见创建HetuEngine权限角色

开启SQL诊断功能

HetuEngine的SQL诊断功能默认开启,可参考如下步骤配置其他常见参数或保持默认:

  1. Hetu_user用户登录FusionInsight Manager页面。
  2. 选择“集群 > 服务 > HetuEngine > 配置 > 全部配置 > QAS(角色) > SQL诊断”,参数“qas.sql.auto.diagnosis.enabled”为“true”表示开启SQL诊断功能,可根据业务需求配置SQL诊断推荐参数。
  3. 单击“保存”,保存配置。
  4. 单击“实例”,勾选所有QAS实例,选择“更多 > 重启实例”,输入密码重启QAS所有实例使参数生效。

查看SQL诊断结果

  1. Hetu_user用户登录FusionInsight Manager页面。
  2. 选择“集群 > 服务 > HetuEngine”,进入HetuEngine服务页面。
  3. 在概览页签下的“基本信息”区域单击“HSConsole WebUI”后的链接,进入HSConsole界面。
  4. 单击“SQL运维”,可查看如下SQL诊断结果:

    • 在“概览”页面,可查看历史任务的整体运行状况,包括:查询分段耗时分布图、查询用户分布图、SQL提交总数、SQL执行成功率、SQL平均响应时间、查询个数、平均执行耗时、平均等待耗时。
    • 在“慢查询分布”页面,用户可查看历史任务的慢查询分布情况,包括:
      • 慢SQL统计:统计各个租户的慢查询(查询时间大于慢查询阈值)提交个数。
      • 慢查询TOP用户请求统计列表:统计各个用户的慢查询统计明细,支持列表排序和全部导出功能。
    • 在“慢查询列表”页面,用户可查看历史任务的慢查询列表、诊断结果和优化建议,支持导出查询结果。

      历史统计信息的有效期取决于HSConsole实例的JVM内存大小,最多不超过60天。

使用第三方可视化工具访问HetuEngine

使用DBeaver访问HetuEngine

本章节以DBeaver 22.1.5版本为例,讲解如何访问HetuEngine

前提条件

操作步骤

  1. 下载HetuEngine客户端获取JDBC jar包。

    1. 登录FusionInsight Manager。
    2. 选择“集群 > 服务 > HetuEngine > 概览”。
    3. 在页面右上角,选择“更多 > 下载客户端”,根据界面提示下载“完整客户端”文件到本地。
    4. 解压HetuEngine客户端压缩包文件“FusionInsight_Cluster_集群ID_ HetuEngine_Client.tar”获取jdbc文件,并存放在本地,例如“D:\test”。

      jdbc文件获取方法:

      在“FusionInsight_Cluster_集群ID_HetuEngine_ClientConfig\HetuEngine\xxx\”路径下解压获取“hetu-jdbc-*.jar”文件。

      备注:xxx为“arm”或“x86”。

  2. 在本地hosts文件添加主机映射。

    根据使用HSFabric方式或HSBroker方式添加对应实例所在主机映射,格式为:主机IP 主机名

    例如:192.168.42.90 server-2110081635-0001

    Windows本地hosts文件存放路径举例:“C:\Windows\System32\drivers\etc”。

  3. 打开DBeaver,选择“数据库 > 新建连接”,在“ALL”中搜索“Trino”并打开Trino。
  4. 单击“编辑驱动设置”,参考下表信息设置相关参数。

    表2-817 驱动设置信息

    参数名

    参数值

    类名

    io.trino.jdbc.TrinoDriver

    URL模板

    • 通过HSFabric方式访问HetuEngine

      jdbc:trino://<HSFabricIP1:port1>,<HSFabricIP2:port2>,<HSFabricIP3:port3>/catalog名/schema名?serviceDiscoveryMode=hsfabric&tenant=租户名

      示例:

      jdbc:trino://192.168.42.90:29902,192.168.42.91:29902,192.168.42.92:29902/hive/default?serviceDiscoveryMode=hsfabric&tenant=default

    • 通过HSBroker方式访问HetuEngine

      jdbc:trino://<HSBrokerIP1:port1>,<HSBrokerIP2:port2>,<HSBrokerIP3:port3>/catalog名/schema名?serviceDiscoveryMode=hsbroker&tenant=租户名

      示例:

      jdbc:trino://192.168.42.90:29860,192.168.42.91:29860,192.168.42.92:29860/hive/default?serviceDiscoveryMode=hsbroker&tenant=default

    • 获取HSFabric、HSBroker节点IP及端口号:
      1. 登录FusionInsight Manager。
      2. 选择“集群 > 服务 > HetuEngine > 实例”,获取HSFabric或HSBroker所有实例的业务IP,可选择一个或多个正常状态的进行连接。
      3. 获取端口号,选择“集群 > 服务 > HetuEngine > 配置 > 全部配置”:

        搜索“gateway.port”,获取HSFabric的端口号,安全模式默认为29902,普通模式默认29903;

        搜索“server.port”,获取HSBroker的端口号,安全模式默认为29860,普通模式默认29861;

    • 若连接不成功,请关闭代理重试。
    • tenant:HetuEngine默认启用租户的严格校验模式,此参数必填。若想关闭租户的严格校验模式,需设置“tenant.strict.mode.enabled”参数的值为“false”,即不指定租户,随机匹配一个租户。

  5. 单击“添加文件”,上传步骤 1中获取的JDBC驱动包。
  6. 单击“找到类”,自动获取驱动类,单击“确定”完成驱动设置,如下图所示。若“库”中存在“io.trino:trino-jdbc:RELEASE”,单击“找到类”前需将其删掉。

    图2-256 安全模式驱动设置(设置)
    图2-257 安全模式驱动设置(库)

  7. 连接设置。

    • 安全模式(开启Kerberos认证的集群):

      在创建新连接页面的“常规”页签,输入前提条件中创建的用户名和密码,单击“测试链接”,连接成功后,单击“确定”,再单击“完成”。可单击“连接详情(名称、类型...)”修改连接名称。

      图2-258 安全模式“常规”参数设置
    • 普通模式(未开启Kerberos认证的集群):

      在创建新连接页面的“常规”页签,配置“JDBC URL”后,不填写用户名的“密码”。

      在创建新连接页面的“驱动属性”配置如下参数,“user”为前提条件中创建的用户。单击“测试链接”,连接成功后,单击“确定”,再单击“完成”。可单击“连接详情(名称、类型...)”修改连接名称。

      图2-259 普通模式“驱动属性”参数设置

  8. 连接成功后进入如下图所示页面。

    图2-260 连接成功

使用FineBI访问HetuEngine

本章节以FineBI 6.0 版本为例,讲解如何访问安全模式集群的HetuEngine

前提条件

操作步骤

  1. 将获取的jar包放在目录“%FineBI%\webapps\webroot\WEB-INF\lib”,重启FineBI。
  2. 打开FineBI,选择“管理系统 > 数据连接 > 数据连接管理 > 新建数据连接 > 所有”,选择“trino”并打开。
  3. 参考下表配置连接参数,支持HSFabric方式和HSBroker方式。输入URL和已创建的“人机”用户的用户名及密码。

    表2-818 驱动设置信息

    参数名

    参数值

    类名

    io.trino.jdbc.TrinoDriver

    URL模板

    • 通过HSFabric方式访问HetuEngine

      jdbc:trino://<HSFabricIP1:port1>,<HSFabricIP2:port2>,<HSFabricIP3:port3>/catalog名/schema名?serviceDiscoveryMode=hsfabric&tenant=租户名

      示例:

      jdbc:trino://192.168.42.90:29902,192.168.42.91:29902,192.168.42.92:29902/hive/default?serviceDiscoveryMode=hsfabric&tenant=default

    • 通过HSBroker方式访问HetuEngine

      jdbc:trino://<HSBrokerIP1:port1>,<HSBrokerIP2:port2>,<HSBrokerIP3:port3>/catalog名/schema名?serviceDiscoveryMode=hsbroker&tenant=租户名

      示例:

      jdbc:trino://192.168.42.90:29860,192.168.42.91:29860,192.168.42.92:29860/hive/default?serviceDiscoveryMode=hsbroker&tenant=default

    • 获取HSFabric、HSBroker节点IP及端口号:
      1. 登录FusionInsight Manager。
      2. 选择“集群 > 服务 > HetuEngine > 实例”,获取HSFabric或HSBroker所有实例的业务IP,可选择一个或多个正常状态的进行连接。
      3. 获取端口号,选择“集群 > 服务 > HetuEngine > 配置 > 全部配置”:

        搜索“gateway.port”,获取HSFabric的端口号,安全模式默认为29902,普通模式默认29903;

        搜索“server.port”,获取HSBroker的端口号,安全模式默认为29860,普通模式默认29861;

    • 若连接不成功,请关闭代理重试。
    • tenant:HetuEngine默认启用租户的严格校验模式,此参数必填。若想关闭租户的严格校验模式,需设置“tenant.strict.mode.enabled”参数的值为“false”,即不指定租户,随机匹配一个租户。

  4. 配置完成后单击“测试连接”,或在“模式”单击“点击连接数据库”测试数据连接,测试成功后单击“保存”。
  5. 参考图2-261所示配置数据库表,选择“公共数据 > 全部数据”,新建或选择已有数据文件夹,单击文件夹右边的“+”添加表,选择“数据库表 ”。

    图2-261 配置数据

  6. 设置需要用于做分析的表,如图2-262~图2-264所示。

    图2-262 单击“数据连接”
    图2-263 选择数据库
    图2-264 数据预览

  7. 单击“更新信息”中的“单表更新”,进行数据同步。

    图2-265 数据同步

  8. 单击“我的分析”,单击“新建分析主题”,选择需要分析的数据,单击“确定”。

    图2-266 新建分析主题
    图2-267 选择要分析的数据表

  9. 单击下方“组件”。

    图2-268 进入组件分析

  10. 组件操作界面如下。

    图2-269 组件操作界面

  11. 例如,将“cdate”拖入“维度”,将“clong”拖入“指标”,即可分析相关数据。如图2-270所示。

    图2-270 分析表

  12. 如果需要用图显示,则可在“图表类型”中选择相对应的图。样例中是选择“柱状图”。

    图2-271 选择图表类型

使用Tableau访问HetuEngine

本章节以Tableau Desktop 2022.2版本为例,讲解如何访问HetuEngine

前提条件

操作步骤

  1. 将获取的Jar包放在Tableau安装目录,如“C:\Program Files\Tableau\Drivers”。
  2. 打开Tableau,选择“到服务器 > 其他数据库(JDBC)”,输入URL和已创建的“人机”用户的用户名及密码,单击“登录”。

    图2-272 填写连接信息

  3. URL:支持HSFabric方式和HSBroker方式,参考下表信息设置相关参数。

    表2-819 驱动设置信息

    参数名

    参数值

    类名

    io.trino.jdbc.TrinoDriver

    URL模板

    • 通过HSFabric方式访问HetuEngine

      jdbc:trino://<HSFabricIP1:port1>,<HSFabricIP2:port2>,<HSFabricIP3:port3>/catalog名/schema名?serviceDiscoveryMode=hsfabric&tenant=租户名

      示例:

      jdbc:trino://192.168.42.90:29902,192.168.42.91:29902,192.168.42.92:29902/hive/default?serviceDiscoveryMode=hsfabric&tenant=default

    • 通过HSBroker方式访问HetuEngine

      jdbc:trino://<HSBrokerIP1:port1>,<HSBrokerIP2:port2>,<HSBrokerIP3:port3>/catalog名/schema名?serviceDiscoveryMode=hsbroker&tenant=租户名

      示例:

      jdbc:trino://192.168.42.90:29860,192.168.42.91:29860,192.168.42.92:29860/hive/default?serviceDiscoveryMode=hsbroker&tenant=default

    • 获取HSFabric、HSBroker节点IP及端口号:
      1. 登录FusionInsight Manager。
      2. 选择“集群 > 服务 > HetuEngine > 实例”,获取HSFabric或HSBroker所有实例的业务IP,可选择一个或多个正常状态的进行连接。
      3. 获取端口号,选择“集群 > 服务 > HetuEngine > 配置 > 全部配置”:

        搜索“gateway.port”,获取HSFabric的端口号,安全模式默认为29902,普通模式默认29903;

        搜索“server.port”,获取HSBroker的端口号,安全模式默认为29860,普通模式默认29861;

    • 若连接不成功,请关闭代理重试。
    • tenant:HetuEngine默认启用租户的严格校验模式,此参数必填。若想关闭租户的严格校验模式,需设置“tenant.strict.mode.enabled”参数的值为“false”,即不指定租户,随机匹配一个租户。

  4. 登录成功后,将要操作的数据表拖到右边操作窗口,刷新数据。

使用永洪BI访问HetuEngine

本章节以Yonghong Desktop 9.1版本为例,讲解如何访问HetuEngine。

前提条件

操作步骤

  1. 打开Yonghong Desktop,选择“添加数据源 > presto”。

    图2-273 打开presto

  2. 在数据源配置页面参考图2-274完成参数配置,“用户名”和“密码”为已创建的“人机”用户的用户名和用户密码。配置完成后可以单击“测试连接”测试。

    图2-274 数据源配置

    • 驱动:选择“自定义 > 选择自定义驱动”,单击,编辑驱动名称,单击“上传文件”上传已获取的JDBC jar包,单击“确定”。
      图2-275 驱动管理设置
    • URL:支持HSFabric方式和HSBroker方式,参考下表信息设置相关参数。
      表2-820 驱动设置信息

      参数名

      参数值

      类名

      io.trino.jdbc.TrinoDriver

      URL模板

      • 通过HSFabric方式访问HetuEngine

        jdbc:trino://<HSFabricIP1:port1>,<HSFabricIP2:port2>,<HSFabricIP3:port3>/catalog名/schema名?serviceDiscoveryMode=hsfabric&tenant=租户名

        示例:

        jdbc:trino://192.168.42.90:29902,192.168.42.91:29902,192.168.42.92:29902/hive/default?serviceDiscoveryMode=hsfabric&tenant=default

      • 通过HSBroker方式访问HetuEngine

        jdbc:trino://<HSBrokerIP1:port1>,<HSBrokerIP2:port2>,<HSBrokerIP3:port3>/catalog名/schema名?serviceDiscoveryMode=hsbroker&tenant=租户名

        示例:

        jdbc:trino://192.168.42.90:29860,192.168.42.91:29860,192.168.42.92:29860/hive/default?serviceDiscoveryMode=hsbroker&tenant=default

      • 获取HSFabric、HSBroker节点IP及端口号:
        1. 登录FusionInsight Manager。
        2. 选择“集群 > 服务 > HetuEngine > 实例”,获取HSFabric或HSBroker所有实例的业务IP,可选择一个或多个正常状态的进行连接。
        3. 获取端口号,选择“集群 > 服务 > HetuEngine > 配置 > 全部配置”:

          搜索“gateway.port”,获取HSFabric的端口号,安全模式默认为29902,普通模式默认29903;

          搜索“server.port”,获取HSBroker的端口号,安全模式默认为29860,普通模式默认29861;

      • 若连接不成功,请关闭代理重试。
      • tenant:HetuEngine默认启用租户的严格校验模式,此参数必填。若想关闭租户的严格校验模式,需设置“tenant.strict.mode.enabled”参数的值为“false”,即不指定租户,随机匹配一个租户。
    • 服务器登录:选择“用户名和密码”并填写相应的用户名及密码。

  3. 单击“新建数据集”,在弹出的页面参考图2-276修改保存路径及文件名称,单击“确定”保存修改路径及文件名称。

    图2-276 修改路径及名称

  4. 在数据源选择步骤 3新建的数据集的文件名称,此处以默认文件名称“未命名-0”为例,选择“未命名-0 > hive > default > 视图”,在右侧“新建数据集”选择“SQL数据集”。

    图2-277 选择SQL数据集

  5. 在“数据源”处选择步骤 3新建的数据集,显示所有表信息,选中其中一个表,如“test”表,单击“刷新数据”,可在右侧“数据详情”中显示表的所有信息。

    图2-278 查看表信息

开发和部署HetuEngine UDF

开发和部署HetuEngine Function Plugin

用户可以自定义一些函数,用于扩展SQL以满足个性化的需求,这类函数称为UDF。

本章节主要介绍开发和应用HetuEngine Function Plugin的具体步骤。

需要基于JDK17.0.4及以上版本开发。本章节以MRS 3.3.0版本为例。

开发Function Plugin项目

本样例实现两个Function Plugin,说明见下表。

表2-821 HetuEngine Function Plugin说明

名称

说明

类型

add_two

输入一个整数,返回其加2后的结果

ScalarFunction

avg_double

聚合计算指定列的平均值,且该列的字段类型为double

AggregationFunction

  1. 创建Maven项目,“groupId”配置“com.test.functions”,“artifactId”配置“myfunctions”。这个两个值可根据实际情况自定义。
  2. 修改“pom.xml”文件如下:

    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
           <modelVersion>4.0.0</modelVersion>
           <groupId>com.test.functions</groupId>
           <artifactId>myfunctions</artifactId>
           <version>0.0.1-SNAPSHOT</version>
           <packaging>trino-plugin</packaging>
          <properties>
              <project.build.targetJdk>17</project.build.targetJdk>
              <dep.guava.version>31.1-jre</dep.guava.version>
               <dep.hetu.version>399-h0.cbu.mrs.321.r13</dep.hetu.version>
          </properties>
    
           <dependencies>
               <dependency>
                   <groupId>com.google.guava</groupId>
                   <artifactId>guava</artifactId>
                   <version>${dep.guava.version}</version>
               </dependency>
     
               <dependency>
                   <groupId>io.trino</groupId>
                   <artifactId>trino-spi</artifactId>
                   <version>${dep.hetu.version}</version>
                   <scope>provided</scope>
               </dependency>
    
           </dependencies>
     
           <build>
               <plugins>
                   <plugin>
                       <groupId>org.apache.maven.plugins</groupId>
                       <artifactId>maven-assembly-plugin</artifactId>
                       <version>3.3.0</version>
                       <configuration>
                           <encoding>UTF-8</encoding>
                       </configuration>
                   </plugin>
                   <plugin>
                       <groupId>io.trino</groupId>
                       <artifactId>trino-maven-plugin</artifactId>
                       <version>11</version>
                       <extensions>true</extensions>
                   </plugin>
               </plugins>
           </build>
       </project>

  3. 创建Function Plugin实现类。

    1. 创建Function Plugin实现类com.test.functions.scalar.MyFunction,其内容如下:
      package com.test.functions.scalar;
      import io.trino.spi.function.ScalarFunction;
      import io.trino.spi.function.SqlNullable;
      import io.trino.spi.function.SqlType;
      import io.trino.spi.type.StandardTypes;
      import jdk.jfr.Description;
      public class MyFunction {
          private MyFunction() {
          }
          @Description("Add two")
          @ScalarFunction("add_two")
          @SqlType(StandardTypes.INTEGER)
          public static long add2(@SqlNullable @SqlType(StandardTypes.INTEGER) Long i) {
              return i + 2;
          }
      }
    2. 创建Function Plugin实现类com.test.function.aggregation.MyAverageAggregationFunction,其内容如下:
      package com.test.functions.aggregation;
      
      import static io.trino.spi.type.DoubleType.DOUBLE;
      
      import io.trino.spi.block.BlockBuilder;
      import io.trino.spi.function.AggregationFunction;
      import io.trino.spi.function.AggregationState;
      import io.trino.spi.function.CombineFunction;
      import io.trino.spi.function.InputFunction;
      import io.trino.spi.function.OutputFunction;
      import io.trino.spi.function.SqlType;
      import io.trino.spi.type.StandardTypes;
      
      @AggregationFunction("avg_double")
      public class MyAverageAggregationFunction
      {
          private MyAverageAggregationFunction() {}
      
          @InputFunction
          public static void input(
              @AggregationState LongAndDoubleState state,
              @SqlType(StandardTypes.DOUBLE) double value)
          {
              state.setLong(state.getLong() + 1);
              state.setDouble(state.getDouble() + value);
          }
      
          @CombineFunction
          public static void combine(
              @AggregationState LongAndDoubleState state,
              @AggregationState LongAndDoubleState otherState)
          {
              state.setLong(state.getLong() + otherState.getLong());
              state.setDouble(state.getDouble() + otherState.getDouble());
          }
      
          @OutputFunction(StandardTypes.DOUBLE)
          public static void output(@AggregationState LongAndDoubleState state, BlockBuilder out)
          {
              long count = state.getLong();
              if (count == 0) {
                  out.appendNull();
              }
              else {
                  double value = state.getDouble();
                  DOUBLE.writeDouble(out, value / count);
              }
          }
      }

  4. 创建AverageAggregation的依赖接口com.test.functions.aggregation.LongAndDoubleState

    package com.test.functions.aggregation;
    
    import io.trino.spi.function.AccumulatorState;
    
    public interface LongAndDoubleState
        extends AccumulatorState
    {
        long getLong();
    
        void setLong(long value);
    
        double getDouble();
    
        void setDouble(double value);
    }

  5. 创建Function Plugin注册类com.test.functions.MyFunctionsPlugin,其内容如下:

    package com.test.functions;
    
    import com.google.common.collect.ImmutableSet;
    import com.test.functions.aggregation.MyAverageAggregationFunction;
    import com.test.functions.scalar.MyFunction;
    
    import io.trino.spi.Plugin;
    
    import java.util.Set;
    
    public class MyFunctionsPlugin
        implements Plugin
    {
        @Override
        public Set<Class<?>> getFunctions() {
            return ImmutableSet.<Class<?>>builder()
                .add(MyFunction.class)
                .add(MyAverageAggregationFunction.class)
                .build();
        }
    }

  6. 打包Maven项目,获取target目录下的myfunctions-0.0.1-SNAPSHOT目录,最终项目整体结构如下图所示。

部署Function Plugin

部署前需要确认:

  • HetuEngine服务处于正常状态。
  • HDFS和HetuEngine客户端已经安装到集群节点,例如“/opt/hadoopclient”目录下。
  • 已创建HetuEngine用户,用户创建请参考创建HetuEngine权限角色
  1. 将打包Maven项目得到的myfunctions-0.0.1-SNAPSHOT目录上传到安装客户端节点的任意目录。
  2. myfunctions-0.0.1-SNAPSHOT目录上传到HDFS中。

    同时上传步骤 6中target目录下的所有jar包。

    1. 登录客户端安装节点,执行安全认证。

      cd /opt/hadoopclient

      source bigdata_env

      kinit HetuEngine的用户

      根据回显提示输入密码,首次认证需要修改密码。

    2. HDFS中创建如下路径,如已存在则不需创建。

      hdfs dfs -mkdir -p /user/hetuserver/udf/data/externalFunctionsPlugin

    3. 上传myfunctions-0.0.1-SNAPSHOT目录到HDFS。

      hdfs dfs -put myfunctions-0.0.1-SNAPSHOT /user/hetuserver/udf/data/externalFunctionsPlugin

    4. 修改目录属主。

      hdfs dfs -chown -R hetuserver:hadoop /user/hetuserver/udf/data

  3. 重启HetuEngine计算实例。

使用验证Function Plugin

  1. 登录客户端安装节点,执行安全认证。

    cd /opt/hadoopclient

    source bigdata_env

    kinit HetuEngine用户

    hetu-cli --tenant 租户名称

  2. 选择验证环境上有数值(int或double类型)列的表,此处选择hive.default.test1,执行如下命令验证Function Plugin。

    1. 查询表。

      select * from hive.default.test1;

      select * from hive.default.test1;
      name  |  price
      --------|-------
      apple   |  17.8
      orange |  25.0
      (2 rows)
    2. 返回平均值。

      select avg_double(price) from hive.default.test1;

      select avg_double(price) from hive.default.test1;
      _col0
      -------
        21.4
      (1 row)
    3. 返回输入整数加2的值。

      select add_two(4);

      select add_two(4);
      _col0
      -------
          6
      (1 row)

开发和部署对接HetuEngine的Hive UDF

用户可以自定义一些函数,用于扩展SQL以满足个性化的需求,这类函数称为UDF。

本章节主要介绍开发和应用Hive UDF的具体步骤。

需要基于JDK17.0.4及以上版本开发。本章节以MRS 3.3.0版本为例。

开发Hive UDF项目

本样例实现一个Hive UDF,说明见下表。

表2-822 Hive UDF说明

名称

说明

AutoAddOne

对输入的数字加1后返回

  • 一个普通Hive UDF必须继承自“org.apache.hadoop.hive.ql.exec.UDF”。
  • 一个普通Hive UDF必须至少实现一个evaluate()方法,evaluate方法支持重载。
  • 当前只支持以下数据类型:
    • boolean、byte、short、int、long、float、double
    • Boolean、Byte、Short、Int、Long、Float、Double
    • List、Map

    目前暂不支持除以上类型外的更复杂数据类型的UDF、UDAF和UDTF。

  • 当前只支持入参数量小于或等于5个的Hive UDF,大于5个入参的Hive UDF将无法被注册。
  • 如果Hive UDF入参为null,系统调用Hive UDF将直接返回null,不会解析null作为入参的Hive UDF逻辑,这可能导致处理null值的Hive UDF执行结果与Hive执行结果不一致。
  • 需要在maven工程中添加hive-exec-3.1.1的依赖,可从Hive服务安装目录下获取。
  • (可选)若用户存在Hive UDF依赖的配置文件,建议将其作为资源文件放在resources目录下,即可打包到Hive UDF函数包中。
  1. 创建Maven项目,“groupId”配置“com.test.udf”,“artifactId”配置“udf-test”。这个两个值可根据实际情况自定义。
  2. 修改“pom.xml”文件如下:

    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
           <modelVersion>4.0.0</modelVersion>
           <groupId>com.test.udf</groupId>
           <artifactId>udf-test</artifactId>
           <version>0.0.1-SNAPSHOT</version>
    
           <dependencies>
             <dependency>
                <groupId>org.apache.hive</groupId>
                <artifactId>hive-exec</artifactId>
                <version>3.1.1</version>
             </dependency>
           </dependencies>
    
           <build>
             <plugins>
                <plugin>
                    <artifactId>maven-shade-plugin</artifactId>
                    <executions>
                        <execution>
                            <phase>package</phase>
                            <goals>
                                <goal>shade</goal>
                            </goals>
                        </execution>
                    </executions>
                </plugin>
                <plugin>
                    <artifactId>maven-resources-plugin</artifactId>
                    <executions>
                        <execution>
                            <id>copy-resources</id>
                            <phase>package</phase>
                            <goals>
                                <goal>copy-resources</goal>
                            </goals>
                            <configuration>
                                <outputDirectory>${project.build.directory}/</outputDirectory>
                                <resources>
                                    <resource>
                                        <directory>src/main/resources/</directory>
                                        <filtering>false</filtering>
                                    </resource>
                                </resources>
                            </configuration>
                        </execution>
                    </executions>
                </plugin>
             </plugins>
           </build>
    </project>

  3. 创建Hive UDF实现类。

    import org.apache.hadoop.hive.ql.exec.UDF; 
    
    /** 
     * AutoAddOne 
     * 
     * @since 2020-08-24 
     */ 
    public class AutoAddOne extends UDF { 
        public int evaluate(int data) { 
            return data + 1; 
        } 
    }

  4. 打包Maven项目,target目录下的udf-test-0.0.1-SNAPSHOT.jar文件即为Hive UDF函数包。

    需要将所有依赖文件都打包到jar包里。

配置Hive UDF

用户通过在配置文件“udf.properties”中添加注册信息来注册Hive UDF,需按“函数名称 类路径”格式添加每一行内容:

“udf.properties” 为例,已明确要注册的四个Hive UDF:

booleanudf io.hetu.core.hive.dynamicfunctions.examples.udf.BooleanUDF
shortudf io.hetu.core.hive.dynamicfunctions.examples.udf.ShortUDF
byteudf io.hetu.core.hive.dynamicfunctions.examples.udf.ByteUDF
intudf io.hetu.core.hive.dynamicfunctions.examples.udf.IntUDF
  • 如果用户添加的Hive UDF注册信息有误,比如错误的格式或者不存在的类路径,系统将忽略这些错误的注册信息,并打印相应日志。
  • 如果用户注册重复的Hive UDF,系统将只注册一次,并忽略重复的注册。
  • 如果用户注册的Hive UDF与系统内部注册的相同,系统将会发生异常并无法正常启动。解决该异常需要用户删除对应的Hive UDF注册信息。

部署Hive UDF

要在HetuEngine中使用Hive UDF,需要用户将相应的UDF函数包、“udf.properties”、UDF依赖的配置文件上传到指定HDFS路径,例如“/user/hetuserver/udf/”,并重启HetuEngine计算实例。

  1. 创建“/user/hetuserver/udf/data/externalFunctions”文件夹,将“udf.properties”放在“/user/hetuserver/udf”,将UDF函数包放在“/user/hetuserver/udf/data/externalFunctions”,将UDF依赖的配置文件放在“/user/hetuserver/udf/data”

    • 使用HDFS的页面上传。
      1. 使用HetuEngine用户登录FusionInsight Manager,选择“集群 > 服务 > HDFS”,进入HDFS服务页面。
      2. 在概览页签下的“基本信息”区域,单击“NameNode WebUI”后的链接,进入NameNode WebUI界面。
      3. 选择Utilities > Browse the file system,单击创建“/user/hetuserver/udf/data/externalFunctions”
      4. 进入“/user/hetuserver/udf”,单击上传“udf.properties”
      5. 进入“/user/hetuserver/udf/data/”,单击上传UDF依赖的配置文件。
      6. 进入“/user/hetuserver/udf/data/externalFunctions”,单击上传UDF函数包。
    • 使用HDFS命令行上传。
      1. 登录HDFS服务客户端所在节点,切换到客户端安装目录,例如“/opt/hadoopclient”。

        cd /opt/hadoopclient

      2. 执行以下命令配置环境变量。

        source bigdata_env

      3. 如果集群为安全模式,执行以下命令进行用户认证。普通模式集群无需执行用户认证。

        kinitHetuEngine用户

        根据回显提示输入密码。

      4. 执行如下命令创建目录,并将已准备好相应的UDF函数包、“udf.properties”、UDF依赖的配置文件上传到目录路径。

        hdfs dfs -mkdir /user/hetuserver/udf/data/externalFunctions

        hdfs dfs -put ./UDF依赖的配置文件 /user/hetuserver/udf/data

        hdfs dfs -put ./udf.properties /user/hetuserver/udf

        hdfs dfs -put ./UDF函数包 /user/hetuserver/udf/data/externalFunctions

  2. 重启HetuEngine计算实例。

使用Hive UDF

使用客户端访问:

  1. 进入HetuEngine客户端。
  2. 执行如下命令应用Hive UDF:

    select AutoAddOne(1);

    select AutoAddOne(1);
    _col0
    -------
         2
    (1 row)

开发和部署HetuEngine UDF

用户可以自定义一些函数,用于扩展SQL以满足个性化的需求,这类函数称为UDF。

本章节主要介绍开发和应用HetuEngine UDF。

需要基于JDK17.0.4及以上版本开发。本章节以MRS 3.3.0版本为例。

开发HetuEngine UDF项目

本样例实现一个HetuEngine UDF,说明见下表。

表2-823 HetuEngine UDF说明

名称

说明

AddTwo

对输入的数字加2后返回

  1. 创建Maven项目,“groupId”配置“com.test.udf”,“artifactId”配置“udf-test”。这个两个值可根据实际情况自定义。
  2. 修改“pom.xml”文件如下:

    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
           <modelVersion>4.0.0</modelVersion>
           <groupId>com.test.udf</groupId>
           <artifactId>udf-test</artifactId>
           <version>0.0.1-SNAPSHOT</version>
    
           <build>
             <plugins>
                <plugin>
                    <artifactId>maven-shade-plugin</artifactId>
                    <executions>
                        <execution>
                            <phase>package</phase>
                            <goals>
                                <goal>shade</goal>
                            </goals>
                        </execution>
                    </executions>
                </plugin>
                <plugin>
                    <artifactId>maven-resources-plugin</artifactId>
                    <executions>
                        <execution>
                            <id>copy-resources</id>
                            <phase>package</phase>
                            <goals>
                                <goal>copy-resources</goal>
                            </goals>
                            <configuration>
                                <outputDirectory>${project.build.directory}/</outputDirectory>
                                <resources>
                                    <resource>
                                        <directory>src/main/resources/</directory>
                                        <filtering>false</filtering>
                                    </resource>
                                </resources>
                            </configuration>
                        </execution>
                    </executions>
                </plugin>
             </plugins>
           </build>
    </project>

  3. 创建HetuEngine UDF实现类。

    package com.xxxbigdata..hetuengine.functions;
    
    public class AddTwo {
        public Integer evaluate(Integer num) {
            return num + 2;
        }
    }

  4. 打包Maven项目,target目录下的“udf-test-0.0.1-SNAPSHOT.jar”文件即为HetuEngine UDF函数包。

    • 一个普通HetuEngine UDF必须至少实现一个evaluate()方法,evaluate方法支持重载。
    • 当前只支持入参数量小于或等于5个的HetuEngine UDF,大于5个入参的HetuEngine UDF将无法被注册。
    • 需要将所有依赖文件都打包到jar包里。
    • (可选)若用户存在HetuEngine UDF依赖的配置文件,建议将其作为资源文件放在resources目录下,即可打包到HetuEngine UDF函数包中。

部署HetuEngine UDF

要在HetuEngine中使用HetuEngine UDF,需要用户将相应的UDF函数包上传到指定HDFS路径,例如“/udf/hetuserver”。这个路径可根据实际情况自定义。

创建“/udf/hetuserver”文件夹,将UDF函数包放在“/udf /hetuserver”
  • 使用HDFS的页面上传。
    1. 使用HetuEngine用户登录FusionInsight Manager,选择“集群 > 服务 > HDFS”,进入HDFS服务页面。
    2. 在概览页签下的“基本信息”区域,单击“NameNode WebUI”后的链接,进入NameNode WebUI界面。
    3. 选择Utilities > Browse the file system,单击创建“/udf/hetuserver”
    4. 进入“/udf/hetuserver”,单击上传UDF函数包。
  • 使用HDFS命令行上传。
    1. 登录HDFS服务客户端所在节点,切换到客户端安装目录,例如“/opt/hadoopclient”。

      cd /opt/hadoopclient

    2. 执行以下命令配置环境变量。

      source bigdata_env

    3. 如果集群为安全模式,执行以下命令进行用户认证。普通模式集群无需执行用户认证。

      kinitHetuEngine用户

      根据回显提示输入密码。

    4. 执行如下命令创建目录,并将已准备好相应的UDF函数包上传到目录路径。

      hdfs dfs -mkdir -p /udf/hetuserver

      hdfs dfs -put ./UDF函数包 /udf/hetuserver

    5. 修改UDF函数包权限。

      hdfs dfs -chmod 644 /udf/hetuserver/UDF函数包

  • 将UDF JAR文件上传到HDFS上自定义的目录存放,要确保用户对JAR文件具有读权限,建议权限设置“chmod 644”。若希望HetuEngine服务在卸载时一并删除UDF JAR文件,那么可以将自定义的目录创建在“/user/hetuserver/”路径中。
  • 当前HetuEngine仅支持UDF JAR文件存放在“hdfs://资源URI”的HDFS中。
  • 因修改函数或增加函数而导致的重新上传JAR文件,HetuEngine会默认缓存5分钟,不会即时生效,5分钟后才会进行JAR文件的更新和重新加载。

使用HetuEngine UDF

使用客户端访问:

  1. 进入HetuEngine客户端。
  2. 执行如下命令创建HetuEngine UDF:
    CREATE FUNCTION example.namespace01.add_two (
     num integer
    )
    RETURNS integer
    LANGUAGE JAVA
    DETERMINISTIC
    SYMBOL "com.xxx.bigdata.hetuengine.functions.AddTwo"
    URI "hdfs://hacluster/udf/hetuserver/udf-test-0.0.1-SNAPSHOT.jar";
  3. 执行如下命令使用HetuEngine UDF:
    select example.namespace01.add_two(2);
    _col0
    -------
         4
    (1 row)
  • 函数实现类中通过重载方法来区分同名的不同函数,在创建HetuEngine UDF时要指定不同的函数名称。
  • 关于HetuEngine UDF创建、使用、管理更多细节请参考《MapReduce服务(MRS) 3.5.1-LTS HetuEngine SQL语法手册(for 华为云Stack 8.5.1)》

管理HetuEngine数据源

操作场景

HetuEngine的WebUI界面,用户可以对已添加的数据源进行查看、编辑和删除等操作。

前提条件

已创建用于访问HetuEngine WebUI界面的HetuEngine管理员用户,用户创建具体操作请参见创建HetuEngine权限角色

操作步骤

  1. 使用HetuEngine管理员用户登录Manager,选择“集群 > 服务 > HetuEngine”,进入HetuEngine服务页面。
  2. 在“概览”页签下的“基本信息”区域,单击“HSConsole WebUI”后的链接,进入HSConsole界面。
  3. 单击“数据源”,在数据源列表中可以查看数据源名称、数据源描述、数据源类型和创建时间等信息,在“操作”列下也可以编辑和删除数据源。

    HetuEngine服务在安装时已经将共部署的Hive数据源默认实现对接,数据源名称为“hive”,不可删除。

管理HetuEngine计算实例

配置HetuEngine资源组

资源组介绍

资源组机制从资源分配的角度控制实例的整体查询负载,并可以对查询实施排队策略。可以在一个计算实例资源下创建多个资源组,并且每个提交的查询将分配给一个特定的资源组执行。在资源组执行新查询之前,将检查当前资源组的资源负载是否超过实例分配给它的资源量。如果超过,则将阻止新到达的查询,使其处于排队状态,甚至直接拒绝它。

资源组使用场景

通过资源组可以实现计算实例内的资源管理。对不同用户、不同查询分配不同的资源组,可以起到资源隔离的作用,避免单个用户或查询独占计算实例的资源,也能通过资源组件的权重优先级配置保障重要任务优先执行。典型资源组使用场景如表2-824所示。

表2-824 典型资源组使用场景

典型场景

解决方案

随着使用计算实例的业务团队的增加,当某个团队的任务更加重要并且不想执行查询时没有资源。

每个团队分配一个指定的资源组;重要任务分配到资源较多的资源组;保证子资源组的占比和小于等于100%时,可保证某一个队列的资源不被其他资源组抢占,类似于静态化分资源。

当实例资源负载很高时,两个用户同时提交一个查询。一开始,两个查询都在排队。当有空闲资源时,可以调度特定用户的查询首先获取到资源。

两个用户分配不同的资源组,重要的任务可以分配到权重高或优先级高的资源组,调度策略由schedulingPolicy配置,不同的调度策略,会有不同的资源分配顺序。

对于即席查询和批量查询,可以根据不同的SQL类型进行更合理的资源分配。

可以对不同的查询类型,比如EXPLAIN、INSERT、SELECT和DATA_DEFINITION等类型,匹配到不同的资源组,分配不同的资源来执行查询。

启用资源组

在创建计算实例的时候,增加参数文件“resource-groups.json”的自定义配置参数,具体操作请参见创建HetuEngine计算实例中的3.e

资源组属性

资源组属性配置请参见表2-825

表2-825 资源组属性

配置项

必选/可选

配置说明

name

必选

资源组名称。

maxQueued

必选

最大排队查询数,当达到此阈值后,新的查询将被拒绝。

hardConcurrencyLimit

必选

最大运行查询数。

softMemoryLimit

可选

资源组最大内存使用量,当达到此阈值后,新任务进入排队;可以指定为固定值(如,10GB)或百分比(如,集群内存的10%)。

softCpuLimit

可选

在一个周期内(参见全局属性的cpuQuotaPeriod参数)可以使用CPU的时间,必须同时指定hardCpuLimit参数,在达到该阈值后,该资源组内占据最大CPU资源的查询的CPU资源会被减少。

hardCpuLimit

可选

在一个周期内可以使用的最大CPU时间。

schedulingPolicy

可选

指定查询从排队到运行状态的调度策略。

  • fair(default)

    当一个资源组下,有几个子资源组都同时有排队的查询,这些子资源组间按照定义的顺序,轮流获得资源,同一个子资源组的查询按照先来先执行的规则获取资源。

  • weighted_fair

    采取这种策略的每一个资源组会配置一个属性schedulingWeight,每个子资源组会计算一个比值:当前子资源组查询数量/schedulingWeight。比值越小的子资源组越先得到资源。

  • weighted

    默认值为1,子资源组的schedulingWeight越大,越先得到资源。

  • query_priority

    所有的子资源组都要配置为query_priority ,排队的查询严格按照指定的query_priority大小顺序来进行获取资源。

schedulingWeight

可选

该分组的权重,见schedulingPolicy,默认为1。

jmxExport

可选

如果为true,则组统计信息将被导出到JMX中进行监控,默认为false。

subGroups

可选

子分组列表。

killPolicy

可选

当查询提交给Worker后,如果总内存使用量超过softMemoryLimit,可选择一种策略终止正在运行的查询,策略如下所示:

  • no_kill(默认值):不终止查询。
  • recent_queries:根据执行顺序的倒序终止查询。
  • oldest_queries:根据执行顺序终止查询。
  • finish_percentage_queries:根据查询执行百分比终止查询。执行百分比最小的查询将首先被终止。high_memory_queries:根据内存使用量终止查询。具有较高内存使用量的查询将首先被终止,以便在查询终止次数最少的情况下,释放更多内存。当两个查询的内存使用量都在限制的10%以内,则进度慢(执行的百分比)的查询被终止,同时两个查询在完成百分比方面的差异在5%以内,则内存使用量大的查询被终止。

选择器规则

选择器按顺序进行匹配,将使用第一个匹配到的资源组,一般来说建议配置一个默认资源组,如果没有设置默认资源组,而又不符合其他资源组选择器条件则查询会被拒绝。选择器规则参数配置请参见表2-826

表2-826 选择器规则

配置项

必选/可选

配置说明

user

可选

匹配用户名的正则表达式。

source

可选

匹配请求源,参见选择器属性的配置中--source选项的配置值。

queryType

可选

配置任务类型:

  • DATA_DEFINITION:更改/创建/删除模式/表/视图的元数据的查询,以及管理预准备语句、权限、会话和事务的查询。
  • DELETE:DELETE查询。
  • DESCRIBE:DESCRIBE、DESCRIBE INPUT、DESCRIBE OUTPUT和SHOW查询。
  • EXPLAIN:EXPLAIN查询。
  • INSERT:插入和CREATE TABLE AS查询。
  • SELECT:SELECT查询。

clientTags

可选

匹配客户端标签,每个标签都必须在用户提交任务的标签列表里,参见选择器属性的配置中--client-tags选项的配置值。

group

必选

在其中运行查询的资源组。

全局属性

全局属性配置请参见表2-827

表2-827 全局属性

配置项

必选/可选

配置说明

cpuQuotaPeriod

可选

CPU配额生效的时间段,与资源组属性的softCpuLimit以及hardCpuLimit结合使用。

选择器属性的配置

数据源名称(source)可设置如下:

  • CLI:使用--source选项。
  • JDBC:在Connection实例上设置ApplicationName客户端信息属性。

客户端标签(clientTags)的设置方式如下:

  • CLI:使用--client-tags选项。
  • JDBC:在Connection实例上设置ClientTags client info属性。

配置示例

图2-279 配置示例

图2-279所示:

  • 对于global资源组而言,最多可同时运行100个查询,有1000查询处于排队状态,在它下面有三个子资源组:data_definition、adhoc和pipeline;
  • pipeline资源组下每一个用户最多可同时运行5个查询,占用pipeline资源组50%的内存资源,其组内默认采用fair的调度策略,所以是按照先来先执行的顺序执行;
  • 为了充分利用实例资源,各个子资源组的内存配额的总和可大于父资源组,比如global资源组(80%)+admin(100%)=180%>100% 。

在下面的示例配置中,存在多个资源组,其中一些资源组是模板。模板允许HetuEngine管理员动态构建资源组树。例如,在pipeline_${USER}组中,${USER}将扩展为提交查询的用户名称。${SOURCE}也支持,后续会扩展到提交查询的来源。也可以在source表达式和user正则表达式中使用自定义命名变量。

资源组选择器示例如下:

"selectors": [{
	"user": "bob",
	"group": "admin"
},
{
	"source": ".*pipeline.*",
	"queryType": "DATA_DEFINITION",
	"group": "global.data_definition"
},
{
	"source": ".*pipeline.*",
	"group": "global.pipeline.pipeline_${USER}"
},
{
	"source": "jdbc#(?<toolname>.*)",
	"clientTags": ["hipri"],
	"group": "global.adhoc.bi-${toolname}.${USER}"
},
{
	"group": "global.adhoc.other.${USER}"
}]

有四个选择器用于定义在哪个资源组中运行查询:

  • 第一个选择器匹配来自bob的查询,并将它们放在admin组中。
  • 第二个选择器匹配来自包括pipeline的源名称的所有数据定义(DDL)查询,并将它们放在global.data_definition组中。这有助于减少此类查询的排队时间,因为它们预计速度很快。
  • 第三个选择器匹配来自包括pipeline的源名称的查询,并将它们放在global.pipeline组下动态创建的单用户管道组中。
  • 第四个选择器匹配来自BI工具的查询,BI工具有一个源与正则表达式jdbc#(?.*)匹配,并且客户端提供的标签是hi-pri的超集。这些查询被放置在global.adhoc组下动态创建的子组中。动态子组将基于命名变量toolname创建,该命名变量从源的正则表达式中提取。假设有一个源为jdbc#powerfulbi,用户为kayla,客户端标签为hipri和fast的查询。此查询将被路由到global.adhoc.bi-powerfulbi.kayla资源组。
  • 最后一个选择器是一个默认选择器,它将所有尚未匹配的查询放入该资源组。

这些选择器一起实现以下策略:

  • bob是HetuEngine管理员用户,可以同时运行50个查询。查询将根据用户提供的优先级运行。
  • 对于剩余用户:
    • 同时运行的查询总数不能超过100个。
    • 使用源pipeline最多可以运行5个并发的DDL查询。查询按FIFO顺序运行。
    • 非DDL查询将在global.pipeline组下运行,总并发数为45,每用户并发数为5。查询按FIFO顺序运行。
    • 对于BI工具,每个工具最多可以运行10个并发查询,每个用户最多可以运行3个。如果总需求超过10个限制,运行查询最少的用户将获得下一个并发槽。这项策略使得资源争夺时更加公平。
    • 所有剩余的查询都放在global.adhoc.other下的每个用户组中,该组行为类似。

查询匹配选择器的说明:

  • 如上每一个大括号代表一个匹配资源组的选择器selector,这里一共配置了5个选择器以匹配上面的5个资源组:
    admin 
    global.data_definition 
    global.pipeline.pipeline_${USER}
    global.adhoc.bi-${toolname}.${USER}
    global.adhoc.other.${USER}
  • 要全部满足当前selector全部条件,才可放进当前队列执行。比如amy用户使用jdbc方式提交的查询,如果没有配置clientTags,是不能够分配到资源组global.adhoc.bi-${toolname}.${USER}对应的资源;
  • 当一个查询能同时满足两个selector时,会匹配第一个满足要求的selector。比如bob用户提交一个source为pipeline的DATA_DEFINITION类型的job,只会匹配到资源组admin对应的资源,而非global.data_definition对应的资源;
  • 当前4个selector都没有匹配上,会使用最后一个selector指定的资源组global.adhoc.other.${USER}的资源。该资源组相当于起到一个默认资源组的作用,如果没有设置默认资源组,而又不符合其他资源组选择器条件则会被拒绝执行。

    如下是完整样例:

    {
    	"rootGroups": [{
    		"name": "global",
    		"softMemoryLimit": "80%",
    		"hardConcurrencyLimit": 100,
    		"maxQueued": 1000,
    		"schedulingPolicy": "weighted",
    		"jmxExport": true,
    		"subGroups": [{
    			"name": "data_definition",
    			"softMemoryLimit": "10%",
    			"hardConcurrencyLimit": 5,
    			"maxQueued": 100,
    			"schedulingWeight": 1
    		},
    		{
    			"name": "adhoc",
    			"softMemoryLimit": "10%",
    			"hardConcurrencyLimit": 50,
    			"maxQueued": 1,
    			"schedulingWeight": 10,
    			"subGroups": [{
    				"name": "other",
    				"softMemoryLimit": "10%",
    				"hardConcurrencyLimit": 2,
    				"maxQueued": 1,
    				"schedulingWeight": 10,
    				"schedulingPolicy": "weighted_fair",
    				"subGroups": [{
    					"name": "${USER}",
    					"softMemoryLimit": "10%",
    					"hardConcurrencyLimit": 1,
    					"maxQueued": 100
    				}]
    			},
    			{
    				"name": "bi-${toolname}",
    				"softMemoryLimit": "10%",
    				"hardConcurrencyLimit": 10,
    				"maxQueued": 100,
    				"schedulingWeight": 10,
    				"schedulingPolicy": "weighted_fair",
    				"subGroups": [{
    					"name": "${USER}",
    					"softMemoryLimit": "10%",
    					"hardConcurrencyLimit": 3,
    					"maxQueued": 10
    				}]
    			}]
    		},
    		{
    			"name": "pipeline",
    			"softMemoryLimit": "80%",
    			"hardConcurrencyLimit": 45,
    			"maxQueued": 100,
    			"schedulingWeight": 1,
    			"jmxExport": true,
    			"subGroups": [{
    				"name": "pipeline_${USER}",
    				"softMemoryLimit": "50%",
    				"hardConcurrencyLimit": 5,
    				"maxQueued": 100
    			}]
    		}]
    	},
    	{
    		"name": "admin",
    		"softMemoryLimit": "100%",
    		"hardConcurrencyLimit": 50,
    		"maxQueued": 100,
    		"schedulingPolicy": "query_priority",
    		"jmxExport": true
    	}],
    	"selectors": [{
    		"user": "bob",
    		"group": "admin"
    	},
    	{
    		"source": ".*pipeline.*",
    		"queryType": "DATA_DEFINITION",
    		"group": "global.data_definition"
    	},
    	{
    		"source": ".*pipeline.*",
    		"group": "global.pipeline.pipeline_${USER}"
    	},
    	{
    		"source": "jdbc#(?<toolname>.*)",
    		"clientTags": ["hipri"],
    		"group": "global.adhoc.bi-${toolname}.${USER}"
    	},
    	{
    		"group": "global.adhoc.other.${USER}"
    	}],
    	"cpuQuotaPeriod": "1h"
    }

配置HetuEngine Worker节点数量

操作场景

HetuEngine的WebUI界面,可以对计算实例的Worker节点个数进行调整,实现计算实例在资源不够时扩充资源,资源空闲时释放资源。其中包含手动扩缩容和自动扩缩容两种方式进行Worker个数调整。

前提条件

已创建好用于访问HetuEngine WebUI界面的用户,用户创建具体操作请参见创建HetuEngine权限角色

  • 实例在扩缩容中时,原有业务不受影响,实例仍可以正常使用。
  • 实例动态扩缩容存在一定滞后性,旨在实现长时间周期内资源消耗的平滑调整,不能实时响应当前正在运行SQL任务对可用资源的需求。
  • 实例进行动态扩缩容后,HSConsole页面上实例配置处显示的Worker个数会保持初始设置的值,不随动态扩缩容个数变化而改变。
  • 实例开启动态扩缩容后,重启HSBroker和Yarn服务会影响扩缩容功能,如需重启,建议先关闭实例的动态扩缩容功能。
  • 进行计算实例扩容时,需要当前队列有足够的资源进行扩容,否则扩容无法达到预期,并影响后续缩容操作。
  • 手动扩缩容可以设置超时时间,通过在Manager界面,选择“HetuEngine > 配置 > 全部配置”,搜索“application.customized.properties”,增加“yarn.hetuserver.engine.flex.timeout.sec”参数,值默认值为“300”(单位秒)。
  • 手动扩容可以设置当Yarn资源不足时是否等待任务。

    通过在Manager界面,选择“HetuEngine > 配置 > 全部配置”,搜索“application.customized.properties”,增加“yarn.hetuserver.engine.worker.scale.out.resource.limit”参数,可分别设置如下值:

    • true(默认值):自动计算Yarn资源,若资源满足则直接扩容;若资源不足则不会下发扩容任务,手动扩容不生效。
    • false:不计算Yarn资源是否满足,直接下发任务到Yarn上。若资源满足则直接扩容;若资源不足则排队等待资源。

操作步骤

  1. 使用可访问HetuEngine WebUI界面的用户登录FusionInsight Manager,选择“集群 > 服务 > HetuEngine”,进入HetuEngine服务页面。
  2. 在概览页签下的“基本信息”区域,单击“HSConsole WebUI”后的链接,进入HSConsole界面。
  3. 在“计算实例”页签,在待操作的实例所属租户所在行的“操作”列单击“配置”,进入“配置实例”页签。

    • 如需手动扩缩容,修改配置界面中“Worker容器资源配置”中的“数量”的值,单击“确定”,此计算实例会进入“扩容中”或者“缩容中”状态,待扩缩容完成,计算实例状态恢复至“运行中”。
    • 如需自动扩缩容,将“高级配置”中的“是否开启动态伸缩”开关置于“是”,并参考表2-828配置参数,开启动态伸缩:

      处于“运行中”的计算实例会即时根据设置的动态伸缩参数进行扩缩容;其他状态的计算实例仅保存配置,保存的配置将在计算实例重启时生效。

      表2-828 动态伸缩参数说明

      参数

      描述

      取值样例

      负载采集周期

      每进行一次实例负载采集间隔的时间。单位:秒。

      10

      扩容阈值

      当实例资源的使用率在伸缩决策周期内的平均值都超过此阈值,实例自动启动扩容操作。

      0.9

      扩容量

      当实例启动扩容时,每次扩容的Worker数量。

      1

      扩容决策周期

      决策实例是否需要扩容的时间周期。单位:秒。

      200

      扩容超时时间

      扩容操作的超时时间。单位:秒。

      400

      缩容阈值

      当实例资源的使用率在伸缩决策周期内的平均值都超过此阈值,实例自动启动缩容操作。

      0.1

      缩容量

      当实例启动缩容时,每次缩容的Worker数量。

      1

      缩容决策周期

      决策实例是否需要缩容的时间周期。单位:秒。

      300

      缩容超时时间

      缩容操作的超时时间。单位:秒。

      600

  4. 配置完成后单击“确定”。

配置HetuEngine维护实例

操作场景

维护实例是承担自动化任务的一种特殊的计算实例,主要负责物化视图的自动刷新、自动创建和自动删除。

一个集群只能有一个计算实例被设置为维护实例,也可以同时承担计算实例的业务。一个租户存在多个计算实例时,仅有一个计算实例用作维护实例。

前提条件

  • 已创建好用于访问HetuEngine WebUI界面的用户,用户创建具体操作请参见创建HetuEngine权限角色
  • 待配置的计算实例状态需为“已停止”状态。

操作步骤

  1. 使用具有访问HetuEngine WebUI界面权限的用户登录FusionInsight Manager。
  2. 选择“集群 > 服务 > HetuEngine”,进入HetuEngine服务页面。
  3. 在概览页签下的“基本信息”区域单击“HSConsole WebUI”后的链接,进入HSConsole界面。
  4. 在“计算实例”页签,在待操作的实例所属租户所在行的“操作”列单击“配置”,进入“配置实例”页签。
  5. 查看“高级配置”的“是否开启维护实例”是否处于“是”,否则修改为“是”。
  6. 修改完成后,将“立即启动”置为“是”,单击“确定”。

配置HetuEngine Coordinator运行的节点范围

默认情况下,Coordinator和Worker节点会随机启动在Yarn的NodeManager节点上,若需要开放端口,需要开放所有NodeManager节点的端口。HetuEngine利用Yarn的资源标签提供了限制Coordinator在指定NodeManager节点上运行的方案。

前提条件

已创建好用于访问HetuEngine WebUI界面的用户,用户创建具体操作请参见创建HetuEngine权限角色

操作步骤

  1. 使用可访问HetuEngine WebUI界面的用户登录FusionInsight Manager。
  2. 配置Yarn参数指定scheduler处理PlacementConstraints。

    1. 选择“集群 > 服务 > Yarn > 配置 > 全部配置”,搜索参数“yarn.resourcemanager.placement-constraints.handler”,并将其“值”设置为“scheduler”,单击“保存”并确定,保存配置。
    2. 单击“实例”,勾选ResourceManager实例(主、备实例都需要重启),选择“更多 > 重启实例”重启Yarn的ResourceManager实例,等待实例重启成功。

  3. 配置资源标签。

    1. 选择“租户资源 > 资源池”,单击“添加资源池”。
    2. 选择集群,输入名称和资源标签,如“pool1”,勾选对应主机,单击将选中主机添加入新的资源池,单击“确定”。

  4. 配置资源池的队列容量策略。

    1. 单击“动态资源计划”,在“资源分布策略”的“资源池”,选择上一步创建的资源池。
    2. 在“资源分配”表格,指定租户资源名队列的“操作”列,单击“修改”。
    3. 在“修改资源分配”窗口设置任务队列在此资源池中的资源容量策略,需确保最大资源项大于0。
      • 管理Coordinator的Application Manager使用default资源池的资源,因此default资源池需要留有足够启动Application Manager的资源。至少为“pool1”中计算实例个数*2G。
      • 详细参数配置可参考如下:

  5. 配置HetuEngine参数开启Coordinator放置策略,输入节点资源标签。

    1. 选中“集群 > 服务 > HetuEngine > 配置 > 全部配置”,配置如下参数,单击“保存”保存配置。
      表2-829 HetuEngine参数配置

      参数

      yarn.hetuserver.engine.coordinator.placement.enabled

      true

      yarn.hetuserver.engine.coordinator.placement.label

      步骤 3中创建的资源标签(如:pool1)

    2. 单击“概览”,选择“更多 > 重启服务”,等待HetuEngine服务重启成功。

  6. 重启HetuEngine计算实例。

    1. 在概览页签下的“基本信息”区域,单击“HSConsole WebUI”后的链接,进入HSConsole界面。
    2. 停止正在运行的计算实例,然后单击待操作实例所在行的“操作”列的“启动”,启动HetuEngine计算实例。

  7. 查看Coordinator运行的节点范围。

    1. 返回Manager页面。
    2. 选择“集群 > 服务 > Yarn”,在概览页签下的“基本信息”区域,单击“ResourceManager WebUI”后的链接。
    3. 在左侧导航栏选择“Cluster > Nodes”,可以查看Coordinator启动在步骤 3设置的资源池节点上。

导入导出HetuEngine计算实例配置

操作场景

HetuEngine的WebUI界面,可以导入/导出实例配置文件、下载实例配置模板。

前提条件

已创建好用于访问HetuEngine WebUI界面的用户,用户创建具体操作请参见创建HetuEngine权限角色

操作步骤

  1. 使用可访问HetuEngine WebUI界面的用户登录FusionInsight Manager,选择“集群 > 服务 > HetuEngine”,进入HetuEngine服务页面。
  2. 在概览页签下的“基本信息”区域,单击“HSConsole WebUI”后的链接,进入HSConsole界面。
  3. 单击“计算实例”:

    • 导入实例配置文件:单击“导入”,在本地选择JSON格式的实例配置文件后,单击“打开”。

      导入导出功能,仅保存计算实例的配置,不保存实例ID、名称、开始时间、结束时间、状态等信息,重新导入后,这些信息将会重新生成。

    • 导出实例配置文件:勾选待导出的实例,然后单击“导出”,可将当前实例配置文件导出至本地。

查看HetuEngine实例监控页面

操作场景

HetuEngine的WebUI界面,可以查看指定业务的详细信息,包括每个SQL的执行情况。

前提条件

已创建好用于访问HetuEngine WebUI界面的管理员用户,用户创建具体操作请参见创建HetuEngine权限角色

操作步骤

  1. 使用可访问HetuEngine WebUI界面的管理员用户登录FusionInsight Manager,选择“集群 > 服务 > HetuEngine”,进入HetuEngine服务页面。
  2. 在概览页签下的“基本信息”区域单击“HSConsole WebUI”后的链接,进入HSConsole界面。
  3. 单击“计算实例”,单击待操作实例对应的租户名。
  4. 单击“WebUI”列的“LINK”链接,将在新页面展示计算实例任务监控页面信息。首次进入为“CLUSTER OVERVIEW”页面,可查看计算实例任务监控页面信息。

    表2-830 指标含义

    指标

    指标含义

    Running Queries

    当前实例并发执行的任务

    Active Workers

    当前实例中的有效Worker数量

    ROWS/SEC

    当前实例每秒处理的数据行数

    Queued Queries

    当前实例中等待队列中等待执行的任务数

    RUNNABLE DRIVERS

    当前实例中正在RUNNING的DRIVERS数量

    BYTES/SEC

    当前实例中每秒读取的数据量

    Blocked Queries

    当前实例中由于资源或其他原因被阻塞的任务数

    RESERVED MEMORY (B)

    当前实例中使用正在RUNNING状态的任务占用的内存

    WORKER PARALLEISM

    当前实例每秒每个Worker平均使用的CPU时间片时间

    Avg CPU cycles per worker

    当前实例每个Worker的平均CPU周期

  5. 通过“QUERY DETAILS”页面的State选项可以对查询任务进行筛选。

    表2-831 State含义

    State

    含义

    Running

    查看当前正在运行中的任务

    Queued

    查看等待队列中等待执行的任务

    Finished

    查看执行完成的任务

    Failed

    查看执行失败的任务,并可以按照任务失败原因进行过滤

  6. 单击任务编号,可以进一步查看任务的基本信息、资源占用情况、Stages划分、 Tasks划分等信息,对于失败的任务,也可以在查询详情页面查看相关日志。

    图2-280 查看任务详情
    图2-281 任务资源使用情况
    图2-282 任务Stages划分
    表2-832 Stages监控信息

    监控项

    含义

    SCHEDULED TIME SKEW

    代表当前Stage节点并发任务被调度的时间

    CPU TIME SKEW

    可以判断是否存在Stage阶段并发任务是否存在计算倾斜

    图2-283 Tasks划分(单击每个stage右边的小三角可见)
    表2-833 Tasks监控项

    监控项

    含义

    ID

    代表多阶段并发执行Task的ID,格式为StageID:TaskID

    Host

    代表当前任务在哪个Worker节点执行

    State

    当前任务执行的状态,主要状态PLANNED、RUNNING、FINISHED、CANCELED、ABORTED、FAILED

    Rows

    Task读取的总数据条数,单位为千(k)、百万(M),通过分析相同Stage阶段不同Task读取的条数可以快速判断当前任务是否存在数据倾斜

    Rows/s

    Task每秒钟读取的数据条数,通过分析相同Stage阶段不同Task每秒钟读取数据条数可以快速判断节点是否存在网络带宽差异,定位是否节点网卡存在问题

    Bytes

    Task读取的数据量

    Bytes/s

    Task每秒钟读取的数据量

    Elapsed

    Task执行时长

    CPU Time

    Task使用的CPU时间

    Mem

    Task内存

    Peak Mem

    Task峰值内存

  7. 单击“Host”的链接,可以查看每个节点task资源占用情况。

    图2-284 Task节点资源占用情况
    表2-834 节点资源监控指标

    指标名称

    含义

    Node ID

    节点ID

    Heap Memory

    最大堆内存大小

    Processors

    处理器个数

    Uptime

    运行时长

    External Address

    外部地址

    Internal Address

    内部地址

    Process CPU Utilization

    物理CPU使用率

    System CPU Utilization

    系统CPU使用率

    Heap Utilization

    堆内存使用率

    Non-Heap Memory Used

    非堆内存使用大小

    Memory Usage Pool

    当前Worker节点内存池大小

查看HetuEngine Coordinator和Worker日志

操作场景

HetuEngine的WebUI界面,可以通过单击LogUI链接跳转至Yarn WebUI界面查看Coordinator和Worker日志。

前提条件

已创建好用于访问HetuEngine WebUI界面的用户,用户创建具体操作请参见创建HetuEngine权限角色

操作步骤

  1. 使用可访问HetuEngine WebUI界面的用户登录FusionInsight Manager,选择“集群 > 服务 > HetuEngine”,进入HetuEngine服务页面。
  2. 在概览页签下的“基本信息”区域,单击“HSConsole WebUI”后的链接,进入HSConsole界面。
  3. 单击“计算实例”,选择对应租户名下待操作的计算实例。单击“LogUI”列的“Coordinator”或“Worker”,将在Yarn WebUI展示Coordinator和Worker日志。

配置HetuEngine查询容错执行能力

操作场景

当集群中的节点因网络、硬件或软件问题发生故障时,在故障节点上运行的所有查询任务都将丢失。这可能会严重影响集群生产力并造成资源浪费,尤其对于长时间运行的查询影响较大。HetuEngine提供一种故障恢复机制,即容错执行能力。集群可通过自动重新运行受影响的查询或其组件任务来降低查询失败概率。可降低人工干预并提高了容错性,但会延长总执行时间。

当前支持如下两种容错执行机制:

  • QUERY级重试策略:开启QUERY级别容错不会进行中间数据落盘,如果查询任务失败,将自动重试该查询任务的所有task。当集群的大部分工作由小查询组成时建议使用此策略。
  • TASK级重试策略:开启TASK级别容错会默认配置HDFS作为交换区,将exchange中间数据落盘,如果查询任务失败,将重试失败的task。建议在执行大批量查询时使用此策略,集群可以更高效的重试查询中的小颗粒任务,而不是整个查询。

本示例介绍设置“TASK”重试策略容错执行机制。

使用须知

  • 容错不适用于已损坏的查询或其他用户错误场景。例如:不会花费资源重试由于无法解析SQL而失败的查询任务。
  • 不同数据源对SQL语句的容错支持能力存在差异:
    • 所有数据源都支持读操作的容错执行。
    • Hive数据源支持写操作的容错执行。
  • 容错能力非常适合大批量查询,如果用户在容错集群上同时运行大量短时间小查询,则可能会遇到延迟。因此,建议处理批处理操作时使用专用的容错计算实例,与进行交互式查询的更高查询量的计算实例分开。

操作步骤

  1. 使用可访问HetuEngine WebUI界面的用户登录FusionInsight Manager,选择“集群 > 服务 > HetuEngine”,进入HetuEngine服务页面。
  2. 在概览页签下的“基本信息”区域,单击“HSConsole WebUI”后的链接,进入HSConsole界面。
  3. 在“计算实例”页签,在待操作的实例所属租户所在行的“操作”列单击“配置”。
  4. 在“自定义配置”单击“增加”添加如下参数。

    表2-835 容错执行参数

    参数

    取值示例

    参数文件

    描述

    retry-policy

    TASK

    • coordinator.config.properties
    • worker.config.properties
    • 容错执行重试策略。
    • 取值范围:QUERY、TASK

    task-retry-attempts-per-task

    4

    • coordinator.config.properties
    • worker.config.properties
    • 开启TASK容错时,在声明查询失败之前尝试重试单个任务的最大次数。
    • 默认值:4

    query-retry-attempts

    4

    • coordinator.config.properties
    • worker.config.properties
    • 开启QUERY容错时,在声明查询失败之前尝试重试查询的最大次数。
    • 默认值:4

    fault-tolerant-execution-task-memory

    5GB

    • coordinator.config.properties
    • worker.config.properties
    • “retry-policy”设置为“TASK”时可配置该参数,不配置默认为5GB。节点会根据可用内存和估计的内存使用情况分配任务。
    • 用于初始任务分配节点时的内存需求估计。值越大表明每个TASK预估使用的内存更大,但会导致集群并发能力变小,可根据实际业务情况动态调整。

  5. 添加完成后将“立即启动”置为“是”,单击“确定”。

    • 启用TASK容错模式后,会产生中间数据并缓存到文件系统中,过大的查询并发会对文件系统产生较大的磁盘压力。当前HetuEngine默认支持将中间数据缓冲至HDFS文件系统的临时目录中。存算分离场景对接OBS文件系统时,也能够支持TASK容错,但是中间数据仍然落盘至HDFS临时目录中。
    • 集群默认会在查询结束时完成缓冲区文件清理,且每小时检测并清理存在超期1天的残留缓冲区文件,可通过如下操作关闭周期性清理功能:

      登录Manager,选择“集群 > 服务 > HetuEngine > 配置 > 全部配置 > HSBroker(角色) > 容错执行”,将参数“fte.exchange.clean.task.enabled”的值置为“false”并保存配置。单击“实例”,勾选所有HSBroker,选择“更多 > 重启实例”,根据界面提示重启实例以使配置生效。

HetuEngine性能调优

调整Yarn资源分配

操作场景

HetuEngine依赖Yarn服务提供的资源分配、控制等能力,需要根据实际业务和集群的服务器配置情况调整Yarn服务配置,以获得最佳的性能效果。

操作步骤

  1. 登录FusionInsight Manager页面。
  2. 选择“集群 > 服务 > Yarn > 配置 > 全部配置”,参考表2-836配置Yarn服务参数。

    表2-836 Yarn服务配置参数

    参数名称

    描述

    默认值

    建议值

    yarn.nodemanager.resource.memory-mb

    表示该节点上YARN可使用的物理内存总量,默认为16384,单位:MB。若该节点有其他业务的常驻进程,请降低此参数值给该进程预留足够运行资源。

    16384

    为达到最优性能,可配置为集群中节点最小物理内存的90%。

    yarn.nodemanager.resource.cpu-vcores

    可分配给container的CPU核数。

    8

    为达到最优性能,可配置为集群中节点最小CPU vCores。

    yarn.scheduler.maximum-allocation-mb

    为ResourceManager中每个container请求分配的最大内存。单位:MB。如果请求的内存量很多,将分配该参数设置的内存量。

    65536

    为达到最优性能,可配置为集群中节点最小物理内存的90%。

    yarn.scheduler.maximum-allocation-vcores

    ResourceManager中每个container请求的最大分配值,用虚拟CPU核数表示。高于该值的请求将不生效,且将覆写为该值。

    32

    为达到最优性能,可配置为集群中节点最小CPU vCores。

  3. 单击“保存”,保存配置。
  4. 选择“集群 > 服务 > Yarn > 更多 > 重启服务”,重启Yarn服务让参数生效。

调整HetuEngine集群节点资源配置

操作场景

HetuEngine默认的内存大小参数和硬盘溢出路径参数默认并非最佳,需要根据实际业务和集群的服务器配置情况调整集群节点资源配置,以获得最佳的性能效果。

操作步骤

  1. 登录FusionInsight Manager页面。
  2. 选择“集群 > 服务 > HetuEngine > 配置 > 全部配置”,参考表2-837调整集群节点资源配置参数。

    表2-837 集群节点资源配置参数

    参数名称

    默认值

    建议值

    参数解释

    参数文件

    yarn.hetuserver.engine.coordinator.memory

    5120

    “yarn.scheduler.maximum-allocation-mb”至少少2GB。

    单个Coordinator节点使用的内存大小。

    application.properties

    yarn.hetuserver.engine.coordinator.number-of-containers

    2

    2

    Coordinator节点数量。

    application.properties

    yarn.hetuserver.engine.coordinator.number-of-cpus

    1

    “yarn.scheduler.maximum-allocation-vcores”至少少2个vCores。

    单个Coordinator节点使用的CPU vCores。

    application.properties

    yarn.hetuserver.engine.worker.memory

    10240

    “yarn.scheduler.maximum-allocation-mb”至少少2GB。

    单个Worker节点使用的内存大小。

    application.properties

    yarn.hetuserver.engine.worker.number-of-containers

    2

    根据具体业务调整。

    Worker节点数量。

    application.properties

    yarn.hetuserver.engine.worker.number-of-cpus

    1

    “yarn.scheduler.maximum-allocation-vcores”至少少2个vCores。

    单个Worker节点使用的CPU vCores。

    application.properties

    extraJavaOptions参数中的Xmx大小

    8GB

    单个Worker节点使用的内存大小 * 0.8。

    Worker JVM进程最大可用内存。

    worker.jvm.config

    query.max-memory-per-node

    5GB

    Worker JVM * 0.7。

    Query单节点最大可用内存。

    worker.config.properties

    query.max-total-memory-per-node

    5GB

    Worker JVM * 0.7。

    Query + System单节点最大可用内存。

    worker.config.properties

    memory.heap-headroom-per-node

    3GB

    Worker JVM * 0.3。

    系统堆单节点最大可用内存。

    worker.config.properties

    extraJavaOptions参数中的Xmx大小

    4GB

    单个Coordinator节点使用的内存大小 * 0.8。

    Coordinator JVM进程最大可用内存。

    coordinator.jvm.config

    query.max-memory-per-node

    3GB

    Coordinator JVM * 0.7。

    节点查询可使用的用户内存最大值。

    coordinator.config.properties

    query.max-total-memory-per-node

    3GB

    Coordinator JVM * 0.7。

    Query + System单节点最大可用内存。

    coordinator.config.properties

    memory.heap-headroom-per-node

    1GB

    Coordinator JVM * 0.3。

    系统堆单节点最大可用内存。

    coordinator.config.properties

    query.max-memory

    7GB

    Sum(query.max-memory-per-node) * 0.7。

    Query集群最大可用内存。

    worker.config.properties/coordinator.config.properties

    spiller-spill-path

    CONTAINER_ROOT_PATH/tmp/hetuserver/hetuserver-sqlengine/

    一块或多块独立的SSD硬盘。

    磁盘吐出文件路径。

    worker.config.properties/coordinator.config.properties

    max-spill-per-node

    10GB

    Sum(每个节点可用空间) * 50%。

    所有查询在单节点上磁盘吐出文件可用空间。

    worker.config.properties/coordinator.config.properties

    query-max-spill-per-node

    10GB

    节点可用硬盘空间的80%。

    单个查询在单节点上磁盘吐出文件可用空间。

    worker.config.properties/coordinator.config.properties

    HetuEngine使用JDK17运行,默认关闭偏向锁特性(BiasedLocking),在大数据场景开启偏向锁特性可提升查询性能,建议在“coordinator.jvm.config”和“worker.jvm.config”参数文件的“extraJavaOptions”参数中添加“-XX:+UseBiasedLocking”开启偏向锁特性。

  3. 单击“保存”,保存配置。
  4. 选择“集群 > 服务 > HetuEngine > 更多 > 重启服务”,重启HetuEngine服务让参数生效。
  5. 若存在运行中的计算实例需重启HetuEngine计算实例。

    1. 使用HetuEngine管理员用户登录Manager,选择“集群 > 服务 > HetuEngine”,进入HetuEngine服务页面。
    2. 在“概览”页签下的“基本信息”区域,单击“HSConsole WebUI”后的链接,进入HSConsole界面。
    3. 单击“计算实例”,勾选待操作实例,单击“重启”根据界面提示重启HetuEngine计算实例。

调整HetuEngine INSERT写入优化

操作场景

HetuEngine向Hive数据源分区表写入数据时,需要根据实际业务的查询结果中分区列数量添加相关自定义配置,以获得最佳的性能效果。

操作步骤

  1. 使用HetuEngine管理员用户登录FusionInsight Manager页面,选择“集群 > 服务 > HetuEngine”,进入HetuEngine服务页面。
  2. 选择“配置 > 全部配置”,搜索“task.writer-count”(每个worker单一查询时writer的并行线程数),查看参数值是否为“1”,否则改为“1”。
  3. 在“概览”页签下的“基本信息”区域,单击“HSConsole WebUI”后的链接,进入HSConsole界面。
  4. 单击“数据源”,在Hive数据源所在行的“操作”列下单击“编辑”,在页面内新增自定义配置, 参考表2-838调整自定义参数。

    表2-838 INSERT语句性能调优参数

    参数名称

    hive.max-partitions-per-writers

    大于或等于要写入数据的Hive数据源分区表所有分区列distinct的count值的乘积。

    distinct的count值举例:

    结果表“t2”有“col1”,“col2”和“col3”三列,查询结果数据如下所示:

    col1 col2 col3

    A 100 5

    C 103 4

    B 101 3

    E 110 4

    D 100 5

    • 若“col3”为分区列,其distinct(去重)的count值为3,“hive.max-partitions-per-writers”的值建议大于或等于3。
    • 若结果表有多个分区列,如“col2”和“col3”都是分区列,“col2”的distinct的count值为4,“col3”的distinct的count值为3,则“hive.max-partitions-per-writers”的值建议大于或等于12(distinct的count值乘积)。

  5. 单击“确定”完成配置。

调整HetuEngine元数据缓存

操作场景

HetuEngine访问Hive数据源时,需要访问Hive metastore获取元数据信息。HetuEngine提供了元数据缓存的功能,当首次访问Hive数据源的库或表时,会将该库或表的元数据信息(数据库名、表名、表字段、分区信息、权限信息等)缓存起来,后续访问时不需要再次访问Hive metastore,在Hive数据源的表数据变化不频繁的场景下,可以一定程度上提升查询的性能。

操作步骤

  1. 使用HetuEngine管理员用户登录FusionInsight Manager页面,选择“集群 > 服务 > HetuEngine”,进入HetuEngine服务页面。
  2. 在“概览”页签下的“基本信息”区域,单击“HSConsole WebUI”后的链接,进入HSConsole界面。
  3. 单击“数据源”,在Hive数据源所在行的“操作”列下单击“编辑”,在页面内新增自定义配置,参考表2-839调整元数据缓存参数。

    表2-839 元数据缓存参数

    参数名称

    参数解释

    默认值

    hive.metastore-cache-ttl

    共部署hive数据源的元数据信息的缓存有效时间

    0s

    hive.metastore-cache-maximum-size

    共部署hive数据源的元数据信息的最大缓存大小

    10000

    hive.metastore-refresh-interval

    共部署hive的元数据的刷新周期。

    1s

    hive.per-transaction-metastore-cache-maximum-size

    共部署hive数据源的每条事务的元数据信息的最大缓存大小

    1000

  4. 单击“确定”完成配置。
  5. 重启HetuEngine服务。

    返回Manager,在“概览”选择“更多 > 重启服务”,根据界面提示重启HetuEngine服务。

  6. 若存在运行中的计算实例需重启HetuEngine计算实例。

    返回HSConsole界面,单击“计算实例”,勾选待操作实例,单击“重启”根据界面提示重启HetuEngine计算实例。

调整HetuEngine动态过滤

操作场景

HetuEngine提供了动态过滤的功能,在Join场景中开启动态过滤一般有较大的性能提升。

本章节介绍如何开启动态过滤功能。

操作步骤

  1. 使用可访问HetuEngine WebUI界面的用户登录FusionInsight Manager,选择“集群 > 服务 > HetuEngine”,进入HetuEngine服务页面。
  2. 在概览页签下的“基本信息”区域,单击“HSConsole WebUI”后的链接,进入HSConsole界面。
  3. 在“计算实例”页签,在待操作的实例所属租户所在行的“操作”列单击“配置”,进入“配置实例”页签。
  4. 在“自定义配置”单击“增加”添加如下参数。

    表2-840 动态过滤参数

    名称

    参数文件

    参数解释

    enable-dynamic-filtering

    true

    coordinator.config.properties和worker.config.properties

    开启动态过滤功能,默认“false”。

  5. 添加完成后将“立即启动”置为“是”,单击“确定”。

开启HetuEngine自适应查询执行

操作场景

一般来说,大任务的SQL语句(例如在从整个表中扫描大量数据的情况)会占用大量的资源,在资源紧张的情况下,会影响其他任务的负载。这不仅导致用户体验不佳,也会提高运维成本。为了解决上述问题,HetuEngine提供了自适应查询执行的功能,该功能会自适应地调度执行查询。

本章节介绍如何开启自适应查询执行功能。

操作步骤

  1. 使用HetuEngine管理员用户登录Manager,选择“集群 > 服务 > HetuEngine”,进入HetuEngine服务页面。
  2. 在“概览”页签下的“基本信息”区域,单击“HSConsole WebUI”后的链接,进入HSConsole界面。
  3. 单击“数据源”,在待修改的Hive数据源所在行的“操作”列下单击“编辑”,
  4. 可参考6.g,在自定义参数中添加“hive.strict-mode-restrictions”,值为“NONE”,开启自适应查询执行功能。
  5. 单击“确定”保存修改。
  6. 重启HetuEngine服务。

    返回Manager,在“概览”选择“更多 > 重启服务”,根据界面提示重启HetuEngine服务。

  7. 若存在运行中的计算实例需重启HetuEngine计算实例。

    返回HSConsole界面,单击“计算实例”,勾选待操作实例,单击“重启”根据界面提示重启HetuEngine计算实例。

调整Hive元数据超时

操作场景

大分区表包含过多分区,导致任务超时,同时大量分区可能需要更多时间来加载与元存储缓存同步。因此,为了在更大规模存储中获得更好的性能,建议相应地调整加载元数据缓存最大超时时间和加载元数据连接池最大等待时间。

操作步骤

  1. 使用HetuEngine管理员用户登录FusionInsight Manager页面,选择“集群 > 服务 > HetuEngine”,进入HetuEngine服务页面。
  2. 在“概览”页签下的“基本信息”区域,单击“HSConsole WebUI”后的链接,进入HSConsole界面。
  3. 单击“数据源”,在Hive数据源所在行的“操作”列下单击“编辑”,在页面内新增如下自定义配置:

    表2-841 元数据超时参数

    参数名称

    默认值

    描述

    hive.metastore-timeout

    10s

    • 共部署Hive数据源加载元数据缓存最大超时时间,单位为秒或分钟
    • 对于大分区表中的操作,值可为60s或更大,需要根据数据量进行配置

    hive.metastore.connection.pool.maxWaitMillis

    1000

    • 共部署Hive数据源加载元数据连接池最大等待时间,单位为毫秒
    • 对于访问连接池频繁且连接池连接数较少情况下,值可为100000或更大,需要根据业务量进行配置

  4. 单击“确定”完成配置。

调整Hudi数据源性能

HetuEngine具备高速访问Hive、Hudi等数据源的能力。对于Hudi数据源调优,可以分为对Hudi表本身和对集群环境的调优。

Hudi表调优

可参考如下建议优化表和数据设计:

  • 建表时尽量按照频繁使用的过滤条件字段进行分区。
  • 如果大部分查询场景均带有主键或主键子集的等值查询,建议使用bucket索引建表,并将查询字段作为分桶键。
  • 查询MOR表时,定期执行Compaction操作可使查询性能有较大的提升,可参考Compaction

集群环境调优

可以通过调整Yarn配置、集群节点资源配置、元数据缓存和动态过滤等策略对系统整体进行调优,可参考如下内容:

调优案例

某用户使用Hudi MOR表存储其设备的订单出借信息,可通过订单号查询订单详细信息,每天订单量相对稳定,部分节假日可能存在小高峰,该场景存在以下特点:

  • 订单号作为唯一值,并且80%以上的查询场景使用订单号进行等值查询,SQL形如select * from table where order_id = 'id1';
  • 每天订单量稳定,可采用天作为分区键。
  • 历史分区更新不频繁,主要数据更新在新分区。

调优建议:

  1. 使用Bucket索引建表(Spark-SQL),并且索引键为订单ID, 分区键为日期。
  2. 定期使用compaction合并日志,提高查询性能。

SQL示例:

set hoodie.compact.inline=true;
set hoodie.schedule.compact.only.inline=true;
set hoodie.run.compact.only.inline=false;
create table hudi_mor (order_id int, comb int, col1 string, col2 string, dt int)
using hudi
partitioned by(dt)
options(type='mor', primaryKey='order_id', preCombineField='comb',
hoodie.index.type = 'BUCKET',
hoodie.bucket.index.num.buckets=100,
hoodie.bucket.index.hash.field = 'order_id')

HetuEngine日志介绍

日志描述

日志存储路径:

HetuEngine的日志保存路径为“/var/log/Bigdata/hetuengine/”和“/var/log/Bigdata/audit/hetuengine/”。

日志归档规则

日志归档规则采用FixedWindowRollingPolicy策略,可配置项为单个文件最大值、日志归档的最大保留数目,具体规则如下:
  • 当单个文件超过默认单个文件最大值时,就会生成一个新的归档压缩文件,归档后的日志压缩文件命名规则为<原有日志名>.[编号].log.gz。
  • 日志删除规则:
    • 运行日志中的HetuEngine计算实例运行日志压缩文件总大小达到最大值时会删除最旧的日志文件。

      HetuEngine计算实例的运行日志会同步到HDFS,且默认保留30天(log.clean.task.expire-time.day),归档路径为:hdfs://hacluster/hetuserverhistory/租户/coordinator。

    • 其他日志归档文件数目达到最大值时,或压缩文件总大小达到最大值时会删除最旧的日志文件。

审计日志默认单个文件最大值为30MB,日志归档文件最大数目为20。

运行日志默认单个文件最大值为100MB,日志归档文件最大数目为20,其中HetuEngine计算实例运行日志单个文件最大值为100MB,归档在HDFS上的日志默认保留30天。

如果需要修改实例的运行日志或审计日志的单个文件最大值或者日志归档文件最大数目,请执行如下操作:

  1. 登录Manager。
  2. 选择“集群 > 服务 > HetuEngine > 配置 > 全部配置 ”。
  3. 在参数列表中查看日志级别的参数,搜索“logback.xml”,可以看到HSBroker、HSConsole、HSFabric、QAS当前的运行日志和审计日志的配置。

    HetuEngine计算实例运行日志相关参数:

    • log.clean.task.enabled:是否开启计算实例日志自动定时清理。
    • log.clean.task.expire-time.day:计算实例日志归档在HDFS的过期时间,默认值:30天。
    • log.max-history:计算实例日志在本地的最大保留时间,默认值:7天。
    • log.clean.task.schedule.plan:自动清理计算实例日志的调度计划。值为cron表达式,此处仅允许指定一天中固定的触发时间。
    • log.max-size:HetuEngine计算实例单个日志文件的最大值,默认值:100MB。
    • log.max-total-size:HetuEngine计算实例日志压缩文件总体最大值,默认值:5GB。

  4. 选择要修改的配置项进行修改。
  5. 单击“保存”,然后单击“确定”,成功后等待大约30秒,配置自动生效。
表2-842 HetuEngine日志列表

日志类别

日志文件名

描述

是否支持Manager在线检索

安装启停日志

prestart.log

启动前预处理脚本日志。

start.log

启动日志。

stop.log

停止日志。

postinstall.log

安装日志。

运行日志

实例名.log

运行日志。

实例名_wsf.log

接口参数校验日志。

hdfs://hacluster/hetuserverhistory/租户/coordinator或worker/application_ID/container_ID/yyyyMMdd/server.log

HetuEngine计算实例的运行日志。

状态检查日志

service_check.log

健康检查日志。

service_getstate.log

状态检查日志。

availability-check.log

HetuEngine服务是否可用状态检查日志。

haCheck.log

QAS检查高可用状态打印的日志。

审计日志

实例名-audit.log

审计日志。

hsbroker-audit.log

HSBroker操作的审计日志。

hsconsole-audit.log

HSConsole操作的审计日志。

hsfabric-audit.log

HetuEngine跨域查询操作的审计日志。

hdfs://hacluster/hetuserverhistory/租户/coordinator/application_ID/container_ID/yyyyMMdd/hetuserver-engine-audit.log

HetuEngine计算实例的审计日志。

queryInfo日志

hdfs://hacluster/hetuserverhistory/租户/coordinator/application_ID/container_ID/yyyyMMdd/queryinfo.log

HetuEngine计算实例的queryInfo日志,SQL运行的统计信息。

清理日志

cleanup.log

清理脚本日志。

初始化日志

hetupg.log

元数据初始化日志。

ranger-trino-plugin-enable.log

Ranger插件集成到HetuEngine内核的操作日志。

客户端日志

qas_client.log

QAS实例ZooKeeper客户端日志。

堆栈信息日志

threadDump-<DATE>.log

实例重启或实例停止时会打印。

其他

hetu-updateKrb5.log

部署Hive集群更换域后,Hive数据源配置自动刷新时打印的日志。

hetu_utils.log

启动时预处理脚本调用工具类上传文件到HDFS时打印的日志。

日志级别

HetuEngine中提供了如表2-843所示的日志级别。日志级别优先级从高到低分别是OFF、ERROR、WARN、INFO、DEBUG。程序会打印高于或等于所设置级别的日志,设置的日志等级越高,打印出来的日志就越少。

表2-843 日志级别

级别

描述

OFF

OFF表示不记录日志。

ERROR

ERROR表示记录当前时间处理存在错误信息。

WARN

WARN表示记录当前事件处理存在异常信息。

INFO

INFO表示记录系统及各事件正常运行状态信息。

DEBUG

DEBUG表示记录系统及系统的调试信息。

如果您需要修改实例的运行日志或审计日志级别,请执行如下操作:

  1. 登录FusionInsight Manager。
  2. 选择“集群 > 服务 > HetuEngine > 配置 > 全部配置 ”。
  3. 在参数列表中查看日志级别的参数,搜索“logback.xml”,可以看到HSBroker、HSConsole、HSFabric当前的运行日志和审计日志的级别。
  4. 选择所需修改的日志级别。
  5. 单击“保存”,然后单击“确定”,成功后等待大约30秒,配置自动生效。

如果要修改HetuEngine Coordinator/Worker日志级别,请执行如下操作:

  1. 登录FusionInsight Manager。
  2. 选择“集群 > 服务 > HetuEngine > 配置 > 全部配置 ”。
  3. 在参数列表中查看日志级别的参数,搜索“log.properties”,可以看到当前的日志级别。
  4. 选择所需修改的日志级别。
  5. 单击“保存”,然后单击“确定”,等待操作成功。
  6. 选择“集群 > 服务 > HetuEngine > 实例”,单击角色列表的HSBroker实例,选择“更多 > 重启实例”。
  7. 待HSBroker实例重启后,选择“集群 > 服务 > HetuEngine”在概览页面单击“HSConsole WebUI”后的链接,进入计算实例界面。
  8. 选择待重启的计算实例,单击“停止”,待全部实例停止后,再单击“启动”重新启动计算实例。

日志格式

HetuEngine的日志格式如下所示:

表2-844 日志格式

日志类型

格式

示例

运行日志

<yyyy-MM-dd HH:mm:ss,SSS>|<Log Level>|<产生该日志的线程名字>|<log中的message>|<日志事件的发生位置>

2024-05-22 06:03:35,696 | INFO | main | Construct zooKeeper helper finished. | com.xxx.hetuserver.hsbroker.core.zookeeper.ZooKeeperClient (ZooKeeperClient.java:312)

审计日志

<yyyy-MM-dd HH:mm:ss,SSS>|<Log Level>|<产生该日志的线程名字>|

UserName=<用户名称> UserIP=<用户IP> Time=<事件时间> Operation=<操作内容> Result=<操作结果> Detail=<具体信息> | xxx

2024-05-22 14:12:24,967 | INFO | https-jsse-nio-192.168.43.244-29860-exec-10 | UserName=hetuserver/hadoop.eef78bf6_bce3_47ff_b808_ec90ae6f6a2a.com@EEF78BF6_BCE3_47FF_B808_EC90AE6F6A2A.COM UserIP=192.168.43.244 Time=2024-05-22 14:12:24 Operation=Login stmt={kerberos login} Result=SUCCESS Detail=SUCCESS | audit xxx

HetuEngine常见问题

HetuEngine域名修改后需要做什么

问题

用户修改域名后,会导致已安装的客户端配置和数据源配置失效,且新创建的集群不可用。对接不同域的数据源时,HetuEngine会自动的合并krb5.conf文件。域名修改后,kerberos认证的域名会发生变化,所以此前对接的数据源信息会失效。

回答

  • 需要重新安装集群客户端。

通过客户端启动HetuEngine集群超时如何处理

问题

通过客户端启动集群,集群启动时间过长会等待超时并退出等待界面。

回答

等待集群启动超时,会自动退出等待界面,用户可以等待集群启动成功后再重新登录,用户还可以在HSConsole页面上查看集群的运行状态当集群处于运行中状态时再重新登录。如果集群启动失败用户可以通过启动日志定位失败原因(参见日志介绍)。

如何处理HetuEngine数据源丢失问题

问题

登录客户端查看HSConsole界面对接的数据源,数据源丢失。

回答

数据源丢失可能原因是DBservice主备倒换或数据库连接数使用率超过阈值造成,用户可以登录FusionInsight Manager页面查看告警信息,根据告警指导清除DBService告警,问题即可解决。

如何处理HetuEngine告警

问题

登录FusionInsight Manager,发现集群有HetuEngine相关告警信息。

回答

登录FusionInsight Manager,进入运维页面告警项,查看详细告警信息。单击关注告警的下拉按钮可以看到告警详细信息。大部分告警通过详情中的告警原因项就可以获得定位和处理告警的方法。用户还可以通过告警信息的查看帮助操作项查看告警的联机帮助信息,如果是非自动清除类告警,在告警处理完后用户可以手动清除告警信息。

  1. 登录FusionInsight Manager。
  2. 选择“运维 > 告警 > 告警 ”。
  3. 在告警信息列表中查看告警信息详情。
  4. 单击告警所在行“操作”列的“查看帮助”,查看告警联机帮助获取更多帮助信息。
  5. 根据联机帮助中提供的HetuEngine告警可能原因进行定位,并根据提供的处理步骤指导清除告警。

如何处理联邦场景表与/tmp目录命名空间不同导致的写表失败问题

问题

联邦场景,对表进行写操作(例如insert),报类似以下错误信息:

Error moving data files from hdfs://nsfed/tmp/hetuengine/presto-hetutest/.9f23b71e-234d-768a-8b93f-cdee9297f25f.crc to final location hdfs://nsfed/user/hive/warehouse/hetutb/20230928_022345_00209_ajke4@default@HetuEngine_234d-768a-8b93f-cdee92dqeqef

回答

该报错是因为联邦场景,“/tmp”和“/user”挂载在不同的nameservice, 但路径前缀使用“hdfs://nsfed”,未显式使用nameservice,导致文件移动失败。可通过如下两种方式解决:

  • 建表时显式地指定location中的nameservice,例如:

  • 在Hive数据源中增加配置hive.temporary-staging-directory-path=/user/tmp/hetuengine/presto-${USER}
    1. 使用HetuEngine管理员用户登录FusionInsight Manager,选择“集群 > 服务 > HetuEngine”,进入HetuEngine服务页面。
    2. 在概览页签下的“基本信息”区域,单击“HSConsole WebUI”后的链接,进入HSConsole界面。
    3. 选择“数据源”,在需要查询Hive建表的数据源后单击“编辑”。
    4. 添加自定义配置,名称填“hive.temporary-staging-directory-path”,值填“/user/tmp/hetuengine/presto-${USER}”。
    5. 检查填写无误后,单击“确定”,等待约1分钟后,重新执行查询语句即可。

如何配置HetuEngine SQL防御

当前大数据领域的SQL引擎层出不穷,在带给解决方案多样性的同时,也暴露出一定的问题,例如SQL输入语句质量良莠不齐、SQL问题难定位、大SQL语句消耗资源过多等。

低质量的SQL会对数据分析平台系统带来不可预料的冲击,影响系统的性能或者平台稳定性。

功能介绍

MRS在主力SQL引擎(Hive、Spark、HetuEngine、ClickHouse、Doris)中增加SQL防御能力,基于用户可理解的SQL防御策略,实现对典型大SQL、低质量SQL的主动防御,包括事前拦截和事中熔断,并不强制改变用户的SQL提交方式、SQL语法,对业务零改动且易落地。

  • 支持管理员界面化配置SQL防御策略,同时可支持防御规则的查询和修改。
  • 每个SQL引擎在进行SQL业务响应、执行过程中,基于SQL防御策略进行主动防御行为。
  • 管理员可将SQL防御行为在“提示”、“拦截”、“熔断”选项之间进行灵活切换,系统会将发生的SQL防御事件实时写入到防御审计日志中。运维人员可进行日志分析,评估现网SQL质量,提前感知潜在SQL风险,并做出有效预防措施。

SQL防御规则包含以下类型:

  • 静态拦截规则:基于纯粹的SQL语法规则进行拦截或提示。
  • 动态拦截规则:基于与数据表的统计信息、元数据信息等内容有关的规则进行拦截或提示。
  • 运行熔断规则:基于SQL语句运行时的系统动态信息(如CPU、内存、IO等)的规则进行阻断。

对于静态拦截规则、动态拦截规则,系统在SQL请求满足条件时,可对该请求进行中止或者提示处理。对于运行熔断规则,系统在SQL请求满足条件时,会阻断该SQL任务。

详情配置可参考配置HetuEngine SQL防御

如何处理视图拥有者权限不足缺少函数的grant权限

问题

访问独立部署Hive数据源的视图时,如果Hive视图中使用了函数,可能会出现如下报错信息:view owner does not have sufficient privileges。

图2-285 报错信息

回答

HetuEngine的Ranger权限控制中包含了function的权限控制。当独立部署Hive数据源集群的视图所有者在本集群没有同名用户时,在Ranger中配置function权限将无法为对应用户赋权。可参考添加HetuEngine的Ranger访问权限策略章节通过如下方案为用户添加相关权限解决:

  • 方案一

    在本集群创建一个视图所有者的同名用户,然后修改HetuEngine的Ranger访问权限策略中的all-function策略:

    1. 在“Allow Condition”的“Select User”中填写授权的视图所有者。
    2. 在“Permissions”勾选“Grant”和“execute”。
  • 方案二

    直接修改HetuEngine的Ranger访问权限策略中的all-function策略,让所有用户都具备如下权限:

    1. 在“Allow Condition”的Select User”中选择“{USER}”。
    2. 在“Permissions”勾选“Grant”和“execute”。

    此时,如果需要对特定的用户进行function权限控制,可以通过“Deny Conditions”进行配置:

    1. 在“Select User”选择用户。
    2. 在“Permissions”勾选“Grant”和“execute”,表示禁止该用户function的Grant和execute权限。

如何处理HetuEngine SQL运行过程中报错Encountered too many errors

问题

HetuEngine的业务SQL运行过程中,出现如下报错:

Encountered too many errors talking to a worker node. The node may have crashed or be under too much load. This is probably a transient issue, so please retry your query in a few minutes

回答

可能原因:

  • 部分Worker节点本身故障,例如网络故障、进程内存占用等。
  • Worker节点负载太高,出现OOM(Out of Memory)导致无法提供服务。
  • Worker节点出现GC导致自动重启。

调优方法:

  • Worker节点本身故障:

    若不同时间报错统一出现在同一个Worker上,优先排查该节点本身问题,例如网络是否正常,是否存在其它进程占用节点内存资源。

  • Worker节点负载太高或出现GC:
    1. 使用可访问HetuEngine WebUI界面的用户登录FusionInsight Manager,选择“集群 > 服务 > HetuEngine”,进入HetuEngine服务页面。
    2. 单击“概览”,在概览页签下的“基本信息”区域,单击“HSConsole WebUI”后的链接,进入HSConsole界面。
    3. 在“计算实例”页签,展开计算实例所属租户,确保待修改的计算实例状态为“停止”状态。
    4. 在计算实例所属租户所在行的“操作”列单击“配置”,进入“配置实例”页签。
      1. 增大计算实例中单个Worker的内存大小

        增大单个计算实例配置中的“Worker容器资源配置”的“容器内存(MB)”和“JVM”的“-Xmx”的值。

      2. 控制单个查询在单个Worker的内存使用大小

        在“自定义配置”中单击“增加”,添加2个同名参数“query.max-memory-per-node”,值设置为小于“JVM”中“-Xmx”值的70%的值,参数文件分别选择“coordinator.config.properties”和“worker.config.properties”。

    5. 单击“确定”,并重新启动计算实例。

HetuEngine故障排除

HetuEngine计算实例启动失败报错Python不存在

问题

启动HetuEngine计算实例失败,查看coordinator Container下面的“stderr.txt”日志报错如下:

/usr/bin/env: ‘python’: No such file or directory

回答

HetuEngine计算实例的启动依赖Python文件,需确保各节点“/usr/bin/”路径下面存在Python文件。

  1. 登录FusionInsight Manager,单击“主机”,查看并记录所有主机的业务IP。
  2. root用户登录步骤 1记录的节点,在所有节点都执行以下命令,在“/usr/bin/”目录下添加“python3”的软连接。

    cd /usr/bin

    ln -s python3 python

  3. 重新启动HetuEngine计算实例。

HetuEngine计算实例启动后状态为故障

问题

启动HetuEngine计算实例后,大约过了30秒,计算实例直接进入故障状态。

回答

HetuEngine启动计算实例时,会给Yarn发送命令启动对应的application,若30秒内没有接收到Yarn的响应消息,则因超时结束此次请求。

若由于机器性能或者是网络环境问题,无法在30秒内接收到Yarn启动application的响应消息时,可适当延长对应的超时时间。

  1. 登录FusionInsight Manager。
  2. 选择“集群 > 服务 > HetuEngine > 配置 > 全部配置”。
  3. 搜索参数“application.customized.properties”,添加并保存自定义参数“yarn.application.start.timeout”,根据需求填写超时时间(仅填写数字,不输入单位),单位:秒。
  4. 单击“实例”,勾选所有HSBroker实例,选择“更多 > 重启实例”根据界面提示完成重启HSBroker实例。