暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

华为GaussDB A 跨集群访问HDFS

墨天轮 2019-10-12
2306

跨集群访问HDFS

操作场景

当需要从Hive等Hadoop集群迁移数据到GaussDB 200集群时,因为数据量太大,可能无法导出到本地。此时需要GaussDB 200跨集群读取HDFS上的数据,并写入GaussDB 200集群。

目前GaussDB 200只支持跨集群访问FusionInsight HD中的HDFS。

前提条件

  • FusionInsight HD和GaussDB 200两个集群状态正常。
  • FusionInsight HD和GaussDB 200两个集群之间可以互相通信。
  • 远端FusionInsight HD集群被访问的表为ORC格式。
  • 远端FusionInsight HD集群HDFS服务配置选项“hadoop.rpc.protection”值为“authentication”
  • 远端FusionInsight HD集群存在具有访问集群HDFS数据目录权限的用户。
  • 远端FusionInsight HD集群已安装了客户端。可参见《FusionInsight HD 产品文档》的“软件安装 > 初始配置 > 配置客户端”章节。

操作步骤

  • 登录FusionInsight Manager。
  • 选择“集群 > 待操作的集群名称 > 服务 > MPPDB > 对接 > 对接HDFS”,单击“创建”,填写配置组名称,单击“确定”。
  • 填写配置参数,配置参数参见表1。

    表1 GaussDB 200跨集群访问HDFS的配置项

    参数

    描述

    默认值

    dfs.namenode.kerberos.principal

    远端FusionInsight HD集群的用户名,需有权限读取该集群HDFS上要访问的数据目录。

    注意:
    • 默认值admin@HADOOP.COM不一定有权限访问目标数据目录或者文件,若没有权限,则此处需要配置一个有权限的用户。
    • 修改远端FusionInsight HD集群的用户名时,修改后的用户名要添加域名。例如修改用户名为user,远端HDFS所在集群的域名是HADOOP.COM,那么修改后的参数值为user@HADOOP.COM。

    admin@HADOOP.COM

    remote_connect_core_config_file

    远端FusionInsight HD集群HDFS的配置文件“core-site.xml”。可从远端FusionInsight集群的HDFS客户端安装路径下的“HDFS/hadoop/etc/hadoop/”目录获取并上传到此处。

    -

    remote_connect_hdfs_cluster_name

    远端FusionInsight HD集群的名称,用户可以根据实际情况自定义集群名称,例如:hdfs_cluster_name1。

    为空

    remote_connect_hdfs_config_file

    远端FusionInsight HD集群HDFS的配置文件“hdfs-site.xml”。可从远端FusionInsight集群的HDFS客户端安装路径下的“HDFS/hadoop/etc/hadoop/”目录获取并上传到此处。

    -

    remote_connect_krb5_conf_file

    远端FusionInsight HD集群用户名对应的认证鉴权文件“krb5.conf”,该用户具有访问集群HDFS数据目录权限,可从远端FusionInsight集群“系统 > 权限 > 用户”下载并上传到此处。

    -

    remote_connect_user_keytab_file

    远端FusionInsight HD集群用户名对应的认证鉴权文件“user.keytab”,该用户具有访问集群HDFS数据目录权限,可从远端FusionInsight HD集群“系统 > 权限 > 用户”下载并上传到此处。

    -

    • 当开启远端连接HDFS的功能后,系统将显示需要配置“dfs.namenode.kerberos.principal”配置项的值,该值是远端HD集群上的用户名。验证此用户是否具有访问目标目录的权限的方法是:在远端HD集群上下载客户端,通过此用户利用HDFS客户端命令访问目标目录(例如用户名是admin,要访问的目录是/tmp/test):
      kinit admin hdfs dfs -ls /tmp/test
      • 如果上述命令执行成功,说明此用户有权限访问该目录,则可以把此用户配置到GaussDB 200集群上,作为本次GaussDB 200跨集群访问HDFS的用户。
      • 如果报错类似如下则说明此用户没有权限,则需要在远端HD集群上创建一个用户,并赋予权限,具体请参考《FusionInsight HD 产品文档》中的章节“创建用户”。
        omm@192-168-8-2:~> hdfs dfs -ls /user/hive ls: Permission denied: user=admin, access=READ_EXECUTE, inode="/user/hive":hive:hive:drwxrwx--- omm@192-168-8-2:~>
    • 开启远端连接HDFS的功能后,必须要上传四个文件:“hdfs-site.xml”“core-site.xml”“user.keytab”“krb5.conf”
    • 允许用户总共配置20组FusionInsight HD集群的HDFS服务配置。
    • 根据实际情况,不同配置组的“remote_connect_hdfs_cluster_name”可以相同。
    • 不同配置组的“remote_connect_hdfs_cluster_name”“dfs.namenode.kerberos.principal”不能同时相同。
    • 如果GaussDB 200 6.5.1是旧版本升级而来并且在旧版本中配置过HDFS,那么旧配置会自动迁移到对接HDFS的模块下而且默认没有“remote_connect_hdfs_cluster_name”值;如果用户手动添加了“remote_connect_hdfs_cluster_name”值,那么需要重新创建HDFS外表SERVER。

  • 单击“保存”。等待保存配置成功,单击“完成”
  • 单击更多 > 重启,执行相应操作重启服务。
  • omm用户身份登录CN节点,执行source ${BIGDATA_HOME}/mppdb/.mppdbgs_profile命令启动环境变量,使用如下命令连接数据库:

    gsql -d postgres -p 25308 -r

  • 创建HDFS外表SERVER。例如:

    create server server_test foreign data wrapper hdfs_fdw options(address '主namenodeIp:25000,备namenodeIp:25000',hdfscfgpath '集群安装目录/mppdb/hdfs_conf/${hdfs_cluster_name}/${hdfs_user}',type 'HDFS');
    说明:
    • 上例中的加粗斜体部分应该修改为相应的值:
      • server_testserver的名字,可自定义。
      • 主namenodeIp:25000,备namenodeIp:25000目标HDFS的主备namenode实例的业务IP及端口号。
      • 集群安装目录 当前GaussDB 200集群的安装目录,具体可进入“${BIGDATA_HOME}”目录,执行命令pwd,将真实路径放在此处。
      • ${hdfs_cluster_name} :远端HD集群的名称,具体为用户输入的参数“remote_connect_hdfs_cluster_name”的值。
      • ${hdfs_user} :远端HD集群用户,具体为用户输入的参数“dfs.namenode.kerberos.principal”的值。
    • 如果GaussDB 200 6.5.1是旧版本升级而来并且在旧版本中配置过HDFS,升级之前创建的HDFS外表SERVER依旧可以正常使用;如果用户在对接HDFS手动修改了该组旧配置,需要重新创建HDFS外表SERVER。
    • 如果用户没有修改旧配置,旧配置依然存在的前提下,对旧配置创建HDFS外表SERVER,使用以下语句:

      create server server_test foreign data wrapper hdfs_fdw options(address '主namenodeIp:25000,备namenodeIp:25000',hdfscfgpath '集群安装目录/mppdb/conf',type 'HDFS');

  • 创建HDFS外表:

    CREATE FOREIGN TABLE [ IF NOT EXISTS ] table_name ( [ column_name type_name [, ...] ] ) SERVER hdfs_server OPTIONS ( { option_name ' value ' } [, ...] ) DISTRIBUTE BY {ROUNDROBIN | REPLICATION} [ PARTITION BY ( column_name ) AUTOMAPPED] ;
    说明:
    • 创建的HDFS外表结构必须和远端FusionInsight HD集群上的表结构一致。
    • 当使用GaussDB 200对HDFS的ORC文件内的数据进行查询分析时,需要在ORC文件格式支持的数据类型与GaussDB 200自身支持的数据类型间进行匹配。具体请参见支持的数据类型。
    • IF NOT EXISTS

      如果已经存在相同名称的表,不会抛出一个错误,而会发出一个通知,告知表关系已存在。

    • table_name

      外表的表名。

      取值范围:字符串,要符合标识符的命名规范。

    • column_name

      外表中的字段名。可以选择多个字段名,中间用“,”隔开。

      取值范围:字符串,要符合标识符的命名规范。

    • type_name

      字段的数据类型,不支持的数据类型有BLOB、ByteA;Decimal/Numeric[p (, s)]数据类型目前最大精度支持到38位。

    • OPTIONS ( { option_name ' value ' } [, ...] )

      用于指定外表数据的各类参数,参数类型如下所示。

      • format:外表中数据源文件的格式。只支持ORC文件格式。
      • foldername:外表中数据源文件目录,即表数据目录在HDFS文件系统上对应的文件目录。
      • filenames:外表中数据源文件,以","间隔。
    • DISTRIBUTE BY ROUNDROBIN

      指定HDFS外表为ROUNDROBIN分布方式。

    • DISTRIBUTE BY REPLICATION

      指定HDFS外表为REPLICATION分布方式。

    • PARTITION BY ( column_name ) AUTOMAPPED

      column_name指定分区表。对于分区表,AUTOMAPPED表示HDFS分区外表指定的分区列会和HDFS数据中的分区目录信息自动对应,前提是必须保证HDFS分区外表指定分区列的顺序和HDFS数据中分区目录定义的顺序一致。

    例如:

    CREATE FOREIGN TABLE region ( R_REGIONKEY INT4, R_NAME TEXT, R_COMMENT TEXT) SERVER server_test OPTIONS( FORMAT 'orc', FOLDERNAME '/user/hive/warehouse/mppdb.db/region_orc11_64stripe/' ) DISTRIBUTE BY roundrobin;

  • 查询HDFS外表,例如:

    select * from region limit 10;
    说明:

    外表支持和普通表关联查询,具体请参见外表使用。


查看更多:华为GaussDB 200 跨集群访问其他数据平台
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论