内容纲要
概要描述
本文档旨在提供一份 impexp 工具的快速上手指南,有关工具的更详细的配置、使用、原理、注意事项。
工具获取方法:
- ArogDB 3.2.0 开始,集成进TDH-Client,简单配置后可直接使用
- 其余版本可联系星环售后技术支持 通过 https://drive.weixin.qq.com/s?k=ABoAuwfGAAk2aC1njT (企业网盘) 获取
详细说明
1. 将数据文件放置到可以部署TDH-Client客户端的节点目录下
这里我们将people表的1000w条数据文件,放置到/root/people
目录下
可以看到数据文件的分隔符是,
逗号,所以后面修改配置文件的时候argodb.import.ext.table.delimiter=,
与之保持一致。
2. Argodb创建目标表
DROP TABLE IF EXISTS people_import;
CREATE TABLE people_import (
name string DEFAULT NULL,
sex string DEFAULT NULL,
nation string DEFAULT NULL,
id string DEFAULT NULL,
borndate STRING,
phonenumber string DEFAULT NULL,
email string DEFAULT NULL,
homeaddress string DEFAULT NULL )
STORED AS HOLODESK;
3.修改配置文件
配置文件在TDH客户端的TDH-Client/impexp/argodb-impexp.properties
目录下,重点关注如下备注进行修改
# ====== COMMON Used for Export and Import========
# 仓库访问(一般是HDFS) 配置文件路径
argodb.repository.conf.dir=/etc/hdfs1/conf
# 仓库访问(一般是HDFS) 是否开启 kerberos
argodb.repository.kerberos.enabled=true
argodb.repository.kerberos.user=hdfs/argodb1@ARGODBTDH
# 文件扫描并提交结束后,检查任务执行进度的间隔时间
argodb.impexp.check.complete.interval.ms=30000
argodb.server.hostname=172.22.23.1
argodb.server.port=10000
# 如果使用LDAP认证,添加如下2项配置,否则不加
argodb.server.ldap.username=hive
argodb.server.ldap.password=123456
# ====== EXPORT ======
# 待卸载的源路径(一般是HDFS)
argodb.export.repository.sourcedir=/tmp/hive/impexp/export
# 待存储的目标路径
argodb.export.local.targetdir=/tmp/impexp
# 是否导出一个文件,设置为 true导出一个文件
argodb.export.mergeOneFile=false
# If argodb.export.mergeOneFile=true, this property is useful.
argodb.export.local.mergefile.name=single_one.file
# 网络传输的buffersize,默认 1MB
argodb.export.buffersize=1048576
# 下载文件时的并发线程池大小
argodb.export.thread.pool.size=10
argodb.export.thread.pool.queue.size=1000
# 待下载的文件先放入queue中
argodb.export.file.queue.size=1000
# 压缩文件 解压下载时 去掉 压缩后缀
argodb.export.compressfile.remove.suffix=true
# 监听目录时的终结文件,发现该文件,监听结束,下载结束后会自动删除该文件
argodb.export.listen.endfile.flag=_END_.FLAG
# 监听线程的间隔时间
argodb.export.listen.interval.ms=5000
# 监听线程启动时,是否忽视掉目录当前已有的文件,false表示不忽视
argodb.export.listen.init.skipfile=false
# 导出清单文件,如果脚本指定表信息 ,则忽略该参数
argodb.export.list.file=
# ====== IMPORT ======
argodb.import.repository.targetdir=/tmp/hive/impexp/import
argodb.import.local.sourcedir=/tmp/impexp
argodb.import.thread.pool.size=2
argodb.import.thread.pool.queue.size=2
argodb.import.file.queue.size=1000
argodb.import.buffersize=1048576
# 不指定外表时,自动生成外表的列分割符
argodb.import.ext.table.delimiter=,
# 导入清单文件,如果脚本指定表信息 ,则忽略该参数
argodb.import.list.file=
4.执行导入命令
#首先需要初始化客户端
source TDH-Client/init.sh
#如果是kerberos安全认证的话,需要执行kinit命令
#通过执行argodb_import_export.py结合参数进行调用
python argodb_import_export.py import default.people_import /root/people
脚本使用说明:
# 单表
python argodb_import_export.py import ${destTableName} ${srcPath}
python argodb_import_export.py import ${extTableName} ${destTableName} ${srcPath}
# 表清单
python argodb_import_export.py import -Dargodb.import.list.file=import.list
# 表清单文件(import.list)格式如下
# 或指定外表
参数说明:
${destTableName} - 目标ArgoDB表名(库名.表名 形式)
${srcPath} - 导入数据文件路径(单文件或目录)
${extTableName} - 与目标表结构相同的外表(库名.表名 形式)
举例:
# 将 /demo/data/ 目录下的所有数据导入至 demo_db.demo_tbl 表
python argodb_import_export.py import demo_db.demo_tbl /demo/data/
# 将 /demo/data/ 目录下的所有数据导入至 demo_db.demo_tbl 表,使用 demo_db.ext_tbl 作为中间外表
python argodb_import_export.py import demo_db.ext_tbl demo_db.demo_tbl /demo/data/
脚本执行日志如下:
ARGODB_IMEXPORT_OPTS=
Analyze argument finished.
Show create table command: [beeline -u "jdbc:hive2://172.22.23.1:10000/default" -n hive -p 123456 -e 'show create table default.people_import' | grep -E '^\|']
WARNING: Use "yarn jar" to launch YARN applications.
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/root/TDH-Client/hadoop/hadoop/lib/slf4j-log4j12-1.7.10.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/root/TDH-Client/inceptor/lib/shiva-client-shade-1.11.5.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
SLF4J: Actual binding is of type [org.slf4j.impl.Log4jLoggerFactory]
scan complete in 17ms
Connecting to jdbc:hive2://172.22.23.1:10000/default
log4j:WARN No appenders could be found for logger (org.apache.hive.jdbc.HiveConnection).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
Connected to: Apache Hive (version 8.16.1)
Driver: Inceptor JDBC (version 8.16.1)
Transaction isolation: TRANSACTION_REPEATABLE_READ
22 rows selected (0.339 seconds)
Beeline version 8.16.1 by Apache Hive
Closing: 0: jdbc:hive2://172.22.23.1:10000/default
Create external table sql:
[CREATE EXTERNAL TABLE default.people_import_ext_491be5d8 (name
string, sex
string, nation
string, id
string, borndate
string, phonenumber
string, email
string, homeaddress
string) ROW FORMAT DELIMITED FIELDS TERMINATED BY ","]
========================================
Start import at: [05/08/2022 17:48:39]
========================================
导入表 default.people_import 开始...
为 default.people_import 创建hdfs导入目录
hadoop fs -mkdir -p hdfs://nameservice1/tmp/hive/importTable/default.people_import/default.people_import_ext_491be5d8
清空目录下数据
hadoop fs -rmr hdfs://nameservice1/tmp/hive/importTable/default.people_import/default.people_import_ext_491be5d8/*
Uploading source path: [/root/people].
Uploading target path: [hdfs://nameservice1/tmp/hive/importTable/default.people_import/default.people_import_ext_491be5d8].
执行命令:./impexpTool.sh superImport /root/people hdfs://nameservice1/tmp/hive/importTable/default.people_import/default.people_import_ext_491be5d8
上传文件 /root/people to hdfs://nameservice1/tmp/hive/importTable/default.people_import/default.people_import_ext_491be5d8 spend time 85.1135439873 s
导入模板:insert into default.people_import select * from default.people_import_ext_491be5d8;
等待文件上传完成
文件上传完成,开始执行SQL插入
SQL语句:
drop table if exists default.people_import_ext_491be5d8_import_idx0;
CREATE EXTERNAL TABLE default.people_import_ext_491be5d8_import_idx0 LIKE default.people_import_ext_491be5d8 LOCATION 'hdfs://nameservice1/tmp/hive/importTable/default.people_import/default.people_import_ext_491be5d8/people';
insert into default.people_import select * from default.people_import_ext_491be5d8_import_idx0;
drop table if exists default.people_import_ext_491be5d8_import_idx0;
执行SQL命令:
beeline -u "jdbc:hive2://172.22.23.1:10000/default" -n hive -p 123456 -f default.people_import_1659693014.72_execSQL.sql
删除临时sql文件:default.people_import_1659693014.72_execSQL.sql
执行SQL成功
sql执行用时:114.712487936
Import data completed, clean start_flag_file.
hadoop fs -rm hdfs://nameservice1/tmp/hive/importTable/default.people_import/default.people_import_ext_491be5d8/_START_.FLAG
导入表 default.people_import 结束,总用时 216.777380943 s
大致的逻辑其实就是 数据流向:本地文件 -> HDFS(外表) -> ArgoDB表 这么个过程。
最终检查people_import
表数据完整性,验证通过。