添加Iceberg数据源
操作场景
HetuEngine支持查询Iceberg v1/v2类型表数据。本章节指导用户在HSConsole界面配置Iceberg类型数据源。
前提条件
- 创建Iceberg数据源的代理用户,该代理用户为人机用户且需拥有hive组。
- 在HetuEngine所在集群的所有节点的“/etc/hosts”文件中,添加待对接数据源所在集群的主机名称和对应的IP映射,及其“/etc/hosts”文件中的“10.10.10.10 hadoop.系统域名”(如“10.10.10.10 hadoop.hadoop.com”),否则HetuEngine无法根据主机名称连接到非本集群节点。
- 参考创建HetuEngine权限角色创建HetuEngine管理员用户。
- 数据源所在集群与HetuEngine集群的时间需保持一致。
- 本章节仅适用于MRS 3.6.0-LTS及之后版本。
操作步骤
- 获取Iceberg数据源集群的“hdfs-site.xml”,“core-site.xml”配置文件。
- 登录Iceberg数据源所在集群的Manager页面。
- 在“主页”右上方单击“下载客户端”,根据界面提示下载“完整客户端”文件到本地。
- 将下载的客户端文件压缩包解压,获取“FusionInsight_Cluster_1_Services_ClientConfig/HDFS/config”路径下的“core-site.xml”和“hdfs-site.xml”。
- 查看“core-site.xml”文件中是否有“fs.trash.interval”配置项,若没有,则新增以下配置。
<property> <name>fs.trash.interval</name> <value>2880</value> </property>
- 查看“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>
若对接的Iceberg数据源集群和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
- 获取Iceberg数据源的代理用户的“user.keytab”和“krb5.conf”文件。
- 登录Iceberg数据源所在集群的Manager页面。
- 选择“系统 > 权限 > 用户”。
- 选择对应的数据源用户,在“操作”列中选择“更多 > 下载认证凭据”。
- 从下载的文件中解压后获取“user.keytab”和“krb5.conf”文件。
Iceberg数据源的代理用户需至少关联“hive”用户组。
- 获取Metastore URL和服务端Principal。
- 获取Iceberg数据源所在集群客户端文件压缩包解压路径下的“FusionInsight_Cluster_1_Services_ClientConfig/Hive/config”下的“hive-site.xml”文件。
- 打开“hive-site.xml”文件,搜索“hive.metastore.uris”,其对应的值即为Metastore URL的值。搜索“hive.server2.authentication.kerberos.principal”,其对应的值即为服务端Principal的值。
- 使用HetuEngine管理员用户登录FusionInsight Manager,选择“集群 > 服务 > HetuEngine”,进入HetuEngine服务页面。
- 在概览页签下的“基本信息”区域,单击“HSConsole WebUI”后的链接,进入HSConsole界面。
- 选择“数据源”,单击“添加数据源”。在“添加数据源”页面填写参数。
- 配置“基本配置”,填写数据源名称,选择数据源类型“Iceberg”。
- 配置“Iceberg配置”,参数配置请参考表1。
- 配置“Metastore配置”,参数配置请参考表2 Metastore配置。
表2 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
- (可选)修改自定义配置。
- 单击“增加”,参考表3 自定义配置增加自定义配置参数。
表3 自定义配置 参数
描述
取值样例
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
iceberg.register-table-procedure.enabled
允许用户调用register_table过程。主要用于数据迁移,将已存在的iceberg表注册到元数据中,默认为false。
false
- 单击“删除”,可以删除已增加的自定义配置参数。
- 单击“确定”。
- 登录集群客户端所在节点,执行以下命令,切换到客户端安装目录并认证用户。
cd /opt/client
source bigdata_env
kinit HetuEngine组件操作用户 (普通模式集群跳过)
- 执行以下命令,登录数据源的catalog。
hetu-cli --catalog 数据源名称 --schema 数据库名 --tenant 租户名称
例如执行以下命令:
hetu-cli --catalog iceberg --schema default --tenant default
- 执行以下命令,可正常查看数据库表信息或不报错即表示连接成功。
show tables;
数据类型映射
|
Iceberg type |
HetuEngine type |
|---|---|
|
BOOLEAN |
BOOLEAN |
|
INT |
INTEGER |
|
LONG |
BIGINT |
|
FLOAT |
REAL |
|
DOUBLE |
DOUBLE |
|
DECIMAL(p,s) |
DECIMAL(p,s) |
|
DATE |
DATE |
|
TIME |
TIME(6) |
|
TIMESTAMP |
TIMESTAMP(6) |
|
TIMESTAMPTZ |
TIMESTAMP(6) WITH TIME ZONE |
|
STRING |
VARCHAR |
|
UUID |
UUID |
|
BINARY |
VARBINARY |
|
FIXED (L) |
VARBINARY |
|
STRUCT(...) |
ROW(...) |
|
LIST(e) |
ARRAY(e) |
|
MAP(k,v) |
MAP(k,v) |
约束
- Iceberg数据源不支持数据源鉴权,仅支持Ranger鉴权。
- Iceberg数据源使用的指定表分区的表属性为partitioning,比如表的分区为c1和c2列,分区属性为partitioning = ARRAY['c1', 'c2']。
- Iceberg数据源使用时间旅行能力根据时间戳查询表的内容时,时间戳需要晚于建表时间,但是早于当前时间。
- 本章节仅适用于MRS 3.6.0及之后版本。