FusionInsight平台——LibrA(MPP)批量数据导入

文章目录

  • LibrA(MPP)批量数据导入
    • COPY导入
    • GDS导入
    • HDFS导入

LibrA(MPP)批量数据导入

COPY导入

  • 多数数据库拥有该命令
  • 适用: 低并发,本地小数据量导入
  • 示例A - 从文件中copy
    --从/home/jerry/data01.txt文件拷贝数据到表tb_test
    COPY tb_test 
    FROM '/home/jerry/data01.txt' 
    WITH(
    	format 'text',  -- 导入格式为TEXT
    	delimiter ',',  -- 分隔符为','
    	ignore_extra_data 'true',  -- 忽略多余列
    	noescaping 'true' -- 不指定转义
    );
    
  • 示例B - 从标准输入中copy
    • 利用gaussdb200对应的jdbc的jar包,使用CopyManager导入数据
    • 代码如下
      // 将数据转换为InputStream
      ArrayList<String> list = new ArrayList<>();
      list.add("xiaowang,18,beijing");
      list.add("xiaohong,22,shanghai");
      list.add("lilei,25,guangdong");
      String data = String.join("\n", list);
      ByteArrayInputStream in = new ByteArrayInputStream(data.getBytes("UTF-8"));
      // 拷贝
      CopyManager copyManager = new CopyManager((BaseConnection)connection); 
      copyManager.copyIn("COPY " + tableName + " FROM STDIN", in);  
      
    • COPY tb_test FROM STDIN WITH(delimiter ',', encoding 'UTF-8') WITH后面可以传入分隔符、指定字符集

GDS导入

  • 架构图:FusionInsight平台——LibrA(MPP)批量数据导入_第1张图片
  • 利用多个DataNode并行将数据导入到LibrA数据库中
  • 适用: 高并发、大数据量导入
  • 操作示例:
    1. 数据导入流程图
      FusionInsight平台——LibrA(MPP)批量数据导入_第2张图片
    • 蓝色路径:建立外表指向服务器的GDS进程,GDS进程指向数据源路径
    • 橙色路径:执行SQL,从外表插入数据到实际表。外表向GDS进程取数据,GDS从数据路径获取
    1. GDS工具安装
      • GDS工具由华为提供 Gauss200-OLAP-V100R006C10-REDHAT-64bit-gauss-loader.tar.gz
      • 在Linux服务器上解压后,进入gauss_loaders目录
      • 执行install_gaussload.sh 命令,即可安装
      • gds命令在…/gauss_loaders/bin/gds/gds
    2. GDS工具运行
      • 示例: …/gauss_loaders/bin/gds/gds -d /data/test -p 192.168.0.10:5000 -H 192.168.0.115/24 -l /home/jerry/log/gds_log.txt -D -t 2
      • 命令解释:
        -d 指定数据路径文件夹; -p 指定GDS进程IP和端口;-H 指定MPP数据库其中一台主节点服务器IP; -l 指定日志输出文件
    3. 在MPP库中建立外表
      • 建外表示例:
      CREATE FOREIGN TABLE foreign_test (
       -- 外表字段结构应和实际表一样,但不能加字段约束等类似的标记
        name VARCHAR(20),
        phone VARCHAR(20),
        address VARCHAR(30)
      )
      SERVER gsmpp_server 
      OPTIONS (
          location 'gsfs://192.168.0.10:5000/*',  -- location参数 指定了GDS所在的服务器
          format 'CSV',
          mode 'normal', 
          encoding 'utf8', 
          delimiter ',',   -- delimiter参数 指定了数据源每个字段之间的分割符
          quote E'\x1b', 
          null '',
          fill_missing_fields 'false'
      )
      LOG INTO err_test PER NODE REJECT -- LOG INTO err_test 指定了错误日志的输出到err_test表(会自动创建)
      LIMIT 'unlimited';
      
    4. 数据源样例
      路径: /data/test/p-0001
      内容:
      小明,18912345678,北京
      小王,15112345678,重庆
      小红,13912345678,上海
      
    5. 执行SQL,导入数据至LibrA(MPP)
      • 确保数据源已经准备好
      • 确保GDS进程已经配置正确,且已开启
      • 确保MPP库中外表建立无误
      • 使用SQL查询外表数据,插入到实际表中
      • 插入SQL示例:
      INSERT INTO tb_test SELECT * FROM foreign_test;
      

HDFS导入

  • 将HDFS上的大量数据快速导入到LibrA(MPP)

  • 适用: 大批量导入;HDFS上数据量过大,无法导出到本地使用GDS导入。

  • 操作示例:

    • 在FusionInsightManager管理界面给LibrA(MPP)添加跨集群访问HDFS的配置项
    参数 描述
    remote_connect_hdfs_enable 是否开启远端连接HDFS功能的开关,请修改为true
    remote_connect_core_config_file HDFS的配置文件core-site.xml
    remote_connect_hdfs_config_file HDFS的配置文件hdfs-site.xml
    dfs.namenode.kerberos.principal 安全模式,集群的用户名
    remote_connect_krb5_conf_file 安全模式,认证鉴权文件krb5.conf
    remote_connect_user_keytab_file 安全模式,认证鉴权文件user.keytab
    • 取得当前库的外部数据服务访问权限
      1. 登入LibrA的主节点之一,使用omm用户
      2. 加载环境变量,示例 $source /opt/huawei/Bigdata/mppdb/.mppdbgs_profile (不同集群可能不一样)
      3. 以管理员身份进入对应的数据库 $gsql db_name -p 25308 -r
      4. 创建 hdfs_server,执行 SQL
        CREATE SERVER hdfs_server FOREIGN DATA WRAPPER hdfs_fdw 
        OPTIONS (
        	address '10.10.0.100:25000,10.10.0.101:25000', -- HDFS集群的主备节点所在的IP地址以	及端口
        	hdfscfgpath '/opt/hadoop_client/HDFS/hadoop/etc/hadoop' -- HDFS集群配置文件路径(不一定需要指定)
        );
        
      5. 授权,执行SQL
        GRANT USAGE ON FOREIGN SERVER hdfs_server TO username;
        
    • 创建指向HDFS目录的外表,示例:
    CREATE FOREIGN TABLE region_test(
      name TEXT,
      phone TEXT,
      address TEXT
    )
    SERVER hdfs_server -- 外部数据服务名称
    OPTIONS(
      FORMART 'orc', -- 数据文件格式,目前只支持orc格式
      FOLDERNAME '/data/test' -- HDFS数据存储路径
    )
    DISTRIBUTE BY roundrobin;
    
    • 执行SQL,导入数据至LibrA(MPP)
    INSERT INTO tb_test SELECT * FROM region_test;
    

你可能感兴趣的:(BigData,DataBase)