使用Sqoop向ArgoDB导入数据

  其他常见问题
内容纲要

概要描述


本文档主要介绍如何通过sqoop工具将第三方数据写入argodb表。

版本要求:
ArgoDB版本>=6, Patch版本>=20250225

详细介绍


一. 配置与准备

1. 准备TDH-Client

通过manager页面下载最新的TDH-Client

2. 准备工具包

从 Patch 页面配套工具中下载对应版本的工具包

解压后,将 argodb_client/argodb-sink-client/ 和 argodb_client/argodb-sqoop/ 下的所有 jar 包复制到 TDH-Client/sqoop/lib/ 目录中。

如果你的 JDBC 数据源需要额外的驱动 jar 包(比如这里的oracle驱动包 ojdbc6.jar),也把它们放到 TDH-Client/sqoop/lib 目录中。

3. 准备配置文件
cd TDH-Client/sqoop/
mkdir conf
touch conf/sqoop-site.xml

编辑sqoop-site.xml文件:


  
    sqoop.tool.plugins
    ExtendArgodbPlugin
  

编辑 TDH-Client/conf/yarn1/mapred-site.xml 文件(路径里的 yarn1,根据实际情况修改),找到 mapreduce.map.speculative 配置项,将值改为 false。如果没有该配置项,手动添加并设置值为 false。否则后续任务可能会出现事务泄漏或数据重复的问题。

二. 使用示例

1. oracle向argodb导数

假设在 Oracle 中存在表 emp,表结构如下:

DROP TABLE EMP;
CREATE TABLE EMP(
       EMPNO int,
       ENAME varchar2(255),
       JOB varchar2(255),
       MGR INT,
       HIREDATE DATE,
       SAL INT,
       COMM INT,
       DEPTNO INT
);

INSERT INTO EMP VALUES (7369,'SMITH','CLERK',7902,to_date('17-12-1980','dd-mm-yyyy'),800,NULL,20);
INSERT INTO EMP VALUES (7499,'ALLEN','SALESMAN',7698,to_date('20-2-1981','dd-mm-yyyy'),1600,300,30);
INSERT INTO EMP VALUES (7521,'WARD','SALESMAN',7698,to_date('22-2-1981','dd-mm-yyyy'),1250,500,30);
INSERT INTO EMP VALUES (7566,'JONES','MANAGER',7839,to_date('2-4-1981','dd-mm-yyyy'),2975,NULL,20);
INSERT INTO EMP VALUES (7654,'MARTIN','SALESMAN',7698,to_date('28-9-1981','dd-mm-yyyy'),1250,1400,30);

在 Quark 中创建对应需要导入的表,DDL 如下:

DROP TABLE IF EXISTS EMP_HOLO;
CREATE TABLE EMP_HOLO(
       EMPNO int,
       ENAME string,
       JOB string,
       MGR INT,
       HIREDATE DATE,
       SAL INT,
       COMM INT,
       DEPTNO INT
)CLUSTERED BY (empno) INTO 3 BUCKETS
STORED AS HOLODESK;

调用 sqoop 命令把数据从 Oracle 导入到 ArgoDB:

sqoop argodbSqoopTool \
  --connect "jdbc:oracle:thin:@172.18.131.175:1521/helowin" \
  --username lkw \
  --password 123456 \
  --table emp \
  --columns "empno,ename,job,mgr,hiredate,sal,comm,deptno" \
  --split-by empno \
  --target-dir placeholder-dir \
  --delete-target-dir \
  --m 3 \
  --dblink-url "jdbc:hive2://kv1:10000/default" \
  --dblink-user hive \
  --dblink-password 123456 \
  --holotable default.emp_holo \
  --tmp-dir "/tmp"

检查Argodb目标表导数成功:

sqoop 命令参数说明

所有 Sqoop 原生参数用法可查阅 开源文档 1.4.x 版本

参数 说明 类型
argodbSqoopTool Sqoop ArgoDB 插件名称 ArgoDB 插件自定义参数
–connect 数据源连接方式 Sqoop 原生参数
–username 数据源连接用户 Sqoop 原生参数
–password 数据源连接密码 Sqoop 原生参数
–table 要导入的源表名 Sqoop 原生参数
–columns 要导入的列 Sqoop 原生参数
–split-by MapReduce 任务根据哪一列切分 Sqoop 原生参数
–target-dir 原生 Sqoop 导入是写数据到 HDFS,所以需要写入目录。ArgoDB 导入实际不会写数据到 HDFS,但是该参数必须填写 Sqoop 原生参数
–delete-target-dir 如果 –target-dir 已存在,会先做删除操作 Sqoop 原生参数
–m Sqoop MapReduce 任务数 Sqoop 原生参数
–dblink-url Quark 连接方式 ArgoDB 插件自定义参数
–dblink-user Quark 连接用户 ArgoDB 插件自定义参数
–dblink-password Quark 连接密码 ArgoDB 插件自定义参数
–holotable 要导入的 ArgoDB 表名 ArgoDB 插件自定义参数
–tmp-dir ArgoDB 导入临时文件存放目录,必须是 Yarn POD 内可访问的路径 ArgoDB 插件自定义参数

注意事项

1、导入必须使用指定列的方式:使用 --table + --columns 参数,或使用 --query 参数(Sqoop 原生参数,可查阅开源文档 1.4.x 版本)。列名的数量、顺序,要和目标表一致,否则会报错、数据错乱。
2、Sqoop 导入 ArgoDB,不保证原子性,需要用户自行处理错误情况(如:部分任务失败,那么成功的任务会把数据写入 ArgoDB,需要用户能自己进行错误恢复,否则不要使用 Sqoop 导入功能)
3、对于分区表,不支持动态创建分区,需要提前创建好

这篇文章对您有帮助吗?

平均评分 0 / 5. 次数: 0

尚无评价,您可以第一个评哦!

非常抱歉,这篇文章对您没有帮助.

烦请您告诉我们您的建议与意见,以便我们改进,谢谢您。