通过工具将本地文件批量写入Holodesk

Impexp 工具借助多线程、pipeline 并行执行等方式实现高效写入,满足用户大规模数据写入需求

import to holo

图 5.2.1:通过工具批量导入

5.2.2.1. 部署工具
  1. 将 HDFS 配置文件拷贝到 repoconf 目录下:

    cd TDH-Client/impexp
    mkdir repoconf
    cp -r /etc/hdfs1/conf/* repoconf/
  2. 手动修改 repoconf 下 hdfs 服务配置文件中的 core-site.xml 文件:

    将 hadoop.security.group.mapping.ldap.bind.password.file 这个属性注释掉,不然后续任务会报错

  3. 配置文件 impexp/conf/argodb-impexp.properties

    表 5.2.1:连接配置
    配置项解释示例

    argodb.repository.conf.dir

    HDFS配置文件路径

    /etc/hdfs1/conf

    argodb.repository.kerberos.enabled

    是否开启 kerberos

    true

    argodb.server.hostname

    quark serv er 地址

    <host_ip>

    argodb.server.port

    quark server 端口

    <port>

    argodb.server.ldap.username

    若开启 LDAP,则需要填写用户名

    <user_name>

    argodb.server.ldap.password

    若开启 LDAP,则需要填写密码

    <password>

    argodb.export.compress.enable

    导出时是否开启压缩

    true

    argodb.export.fileds.delimiter

    导出到文件时的字段分隔符

    |

    argodb.export.pipeline.enable

    是否开启pipeline模式

    true

    argodb.export.thread.pool.size

    导出时文件下载线程数

    16

    表 5.2.1:导入配置
    配置项解释示例

    argodb.import.repository.targetdir

    表文件要上传到的 HDFS 路径

    /tmp/hive/impexp/import

    argodb.import.local.sourcedir

    表文件在本机的路径

    /root/test/import

    argodb.import.thread.pool.size

    导入时的文件上传线程数

    2

    argodb.import.buffersize

    1048576

    argodb.import.ext.table.delimiter

    不指定外表时,自动生成外表的列分割符

    |

    argodb.import.list.file

    用于将多个本地文件写入多张表

    argodb.import.pipeline.enable

    导入时是否开启pipeline模式

    true

    argodb.import.file.split.size

    导入text文件时克切分的文件大小(字节)

    67108864

    argodb.import.compress.enable

    导入时是否开启文件压缩

    true

5.2.2.2. 使用工具

多线程导入的基本原理与单线程导入一致,但是导入性能更高,并且提供脚本方便对多表进行数据写入。

import to holo

图 1. 导入流程示意

  1. 大部分情况下,用户准备数据文件、预创建 Holodesk 表后,可以通过导入脚本实现将本地文件上的所有数据自动写入 Holodesk

  2. 导入脚本的主要执行流程包括:1)将本地文件上传到 HDFS 2)使用默认配置自动创建外表,并将数据 Load 进外表 3)将外表数据全部写入 Holodesk

  3. 为了满足不同的数据写入需求,用户可以使用自己创建的外表。例如使用不同的分隔符等

  4. 为了满足不同的数据写入需求,用户可以使用自己编写的 DML.sql。例如只导入外表中的部分字段

5.2.2.2.1. 批量写入单表
使用工具前,确保环境变量已初始化
  1. 准备数据源

    导入数据文件的默认地址为argodb.import.local.sourcedir。因此建议将数据文件统一存放

    下文以 user.txt 文件导入为例,"15","zhangsan" 是一条数据示例

  2. 预创建 Holodesk 表

    Create holodesk_user(id int,name string) stored as holodesk;

    DDL 参考:定义表

  3. 【可选】手动创建外表

    默认使用 argodb-impexp.properties 中的配置项创建外表。

    当需要使用不同分隔符时,可以事先创建 TEXT 外表

    Create external table text_user(id int ,name string)
    ROW FORMAT DELIMITED FIELDS TERMINATED BY ',';
    )

    DDL 参考: 创建外表

  4. 【可选】手动定义 DML

    默认使用 argodb-impexp.properties 中的配置项将外表数据全部导入 holodesk

    当只需要导入部分列时,可以通过创建一个 sql 文件来手动定义 DML.sql

    例如当只需要导入 id 字段时,则可以创建一个 sql 文件。vi user.sql insert into table holodesk_user select id from text_user;

  5. 使用导入脚本 argodb_import_export.py

    python argodb_import_export.py import [<exterTableName>]  <destTableName> <srcPath> [-f <DML.sql>] [- <property_name> <property_value>]
    • 直接导入所有字段

      python argodb_import_export.py import demodata.holodesk_user  user.txt
    • 自定义分隔符,并只导入 id 字段

      python argodb_import_export.py import text_user  demodata.holodesk_user  user.txt -f user.sql
    • <exterTableName>:当需要使用不同分隔符时,可以指定在【第三步】中创建的外表

    • <destTableName>:用于指定本地文件写入的目标表,即在【第二步】中预创建的 Holodesk 表,格式为 库名.表名,例如 demodata.holodesk_user

    • <srcPath>:用于指定本地文件路径

    • 可选项 [-f <DML.sql>]:当只需要导入部分列时,可以指定在【第四步】中创建的 DML _sql文件

    • 可选项 [- <property_name> <property_value>]:用于自定义导入配置,而非配置文件中的默认配置。例如如果使用 -argodb.import.ext.table.delimiter , 那么本次导入时使用,作为分隔符创建外表,而非默认值|

5.2.2.2.2. 并行执行批量写入不同表

将多个"批量写入单表"的需求封装到一个文件中,可以用来以并行的方式将多个数据文件,批量写入多张表。

  1. 创建一个 list 文件 (空白字符分割各列)

    [<external_table1>] <destTableName1> <source_data_path1>
    [<external_table2>] <destTableName2> <source_data_path2>
    [<external_table3>] <destTableName3> <source_data_path3>

    例如:创建一个文件 bank.list:

    holodesk_user  user.txt
    holodesk_card  card.txt
    • <destTableName>:用于指定本地文件写入的目标表,即在【第二步】中预创建的 Holodesk 表

    • <source_data_path>:用于指定本地文件路径

    • 可选项 [<external_table>]:当需要使用不同分隔符时,可以指定在手动创建的外表

  2. 执行脚本,以并行的方式执行 list 中的写入配置

    python argodb_import_export.py import -Dargodb.import.list.file=import.list
    
    python argodb_import_export.py import -Dargodb.import.list.file=bank.list
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值