更新时间:2024-11-29 GMT+08:00

配置独立部署Hive数据源

操作场景

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

  • 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重定向”参数即可。

前提条件

  • 数据源所在集群域名与HetuEngine集群域名不能相同。
  • 数据源所在集群与HetuEngine集群节点网络互通。
  • HetuEngine所在集群的所有节点的“/etc/hosts”文件中,添加待对接数据源所在集群的主机名称和对应的IP映射,及其“/etc/hosts”文件中的“10.10.10.10 hadoop.系统域名”(如“10.10.10.10 hadoop.hadoop.com”),否则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配置”,参数配置请参考表1
      表1 Hive配置

      参数

      描述

      取值样例

      驱动

      默认为fi-hive-hadoop。

      fi-hive-hadoop

      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
      表2 Metastore配置

      参数

      描述

      取值样例

      Metastore URL

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

      thrift://10.92.8.42:21088,thrift://10.92.8.43:21088,thrift://10.92.8.44: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. 配置“连接池配置”,参数配置请参考表3
      表3 连接池配置

      参数

      描述

      取值样例

      是否开启连接池

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

      最大连接数

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

      50

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

      参数

      描述

      Data Source User

      数据源用户信息。

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

      keytab文件

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

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

      参数

      描述

      HetuEngine User

      HetuEngine用户信息。

      Data Source User

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

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

        参数

        描述

        取值样例

        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.ignore-absent-partitions

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

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

        true

      • 单击“删除”,可以删除已增加的自定义配置参数。
        • 以上自定义配置项,均可通过增加“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/client

    source bigdata_env

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

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

    hetu-cli --catalog 数据源名称 --schema 数据库名

    例如执行以下命令:

    hetu-cli --catalog hive_1 --schema 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连接器支持元数据缓存,以便更快地提供对各种操作的元数据请求。可参考调整元数据缓存

  • 动态过滤

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

  • 带分区条件查询

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

  • Insert优化

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

约束

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