分布式ETL工具Sqoop实践

Mysql数据准备

1、在node02节点登录Mysql。

复制代码
mysql -uroot -proot

2、新建数据库testdb。

复制代码
create database testdb;

3、新建数据表ts。

复制代码
use testdb;
create table ts(id int, name varchar(10), age int, sex char(1));

4、向表中插入数据。

复制代码
insert into ts values(10001,'张三',18,'m');
insert into ts values(10002,'李四',20,'m');
insert into ts values(10003,'王小姐',18,'w');

Sqoop基本使用

1、查看MySQL中的所有数据库。

复制代码
sqoop list-databases --connect jdbc:mysql://node02:3306/ --username root --password root

2、在/root目录下新建sqoop_file目录用于存放作业配置文件。

复制代码
mkdir /root/sqoop

3、在/root/sqoop_file目录编写配置文件list_dbs.conf,减少重复参数配置。

复制代码
vim list_dbs.conf
# 添加以下内容
list-databases
--connect
jdbc:mysql://node02:3306/
--username
root
--password
root

4、使用配置文件启动sqoop作业。

复制代码
sqoop --options-file list_dbs.conf

5、查看testdb中所有表,使用非明文方式,手动输入密码。

复制代码
sqoop list-tables \
   --connect jdbc:mysql://node02:3306/testdb \
   --username root \
   -P

6、在Mysql中执行SQL并将结果展示在控制台。

复制代码
sqoop eval \
  --connect jdbc:mysql://node02:3306/testdb \
  --query "SELECT * FROM ts LIMIT 10" \
  --username root \
  -P

7、将testdb.ts表中所有数据全量导入到hdfs的/tmp/sqoop/testdb/ts目录中。

复制代码
sqoop import \
   --connect jdbc:mysql://node02:3306/testdb \
   --username root \
   --query "select * from ts where \$CONDITIONS" \
   --target-dir /tmp/sqoop/testdb/ts \
   --fields-terminated-by "," \
   --hive-drop-import-delims \
   --split-by id \
   -m 1\
   -P

8、查看最终结果。

复制代码
hadoop fs -ls /tmp/sqoop/testdb/ts
hadoop fs -cat /tmp/sqoop/testdb/ts/part-m-00000

9、在MySQL中新增一条数据。

复制代码
insert into ts values(10004,'张飞',28,'m');

9、使用append增量方式将新增数据导入到/tmp/sqoop/testdb/ts/目录中。

复制代码
sqoop import \
   --connect jdbc:mysql://node02:3306/testdb \
   --username root \
   --password root \
   --query "select * from ts where \$CONDITIONS" \
   --target-dir /tmp/sqoop/testdb/ts/ \
   --split-by id \
   -m 1  \
   --incremental append \
   --check-column id \
   --last-value 10003

11、查看导入结果。

复制代码
hadoop fs -ls /tmp/sqoop/testdb/ts
hadoop fs -cat /tmp/sqoop/testdb/ts/part-m-00001

Sqoop Job操作

将sqoop任务编写为sqoop job,能够减少每次作业执行前,进行的参数配置工作。

  1. 将增量导入任务制作为sqoop job。

    sqoop job --create im_ts
    -- import
    --connect jdbc:mysql://node02:3306/testdb
    --username root
    --password root
    --query "select * from ts where $CONDITIONS"
    --target-dir /tmp/sqoop/testdb/ts/
    --split-by id
    -m 1
    --incremental append
    --check-column id
    --last-value 10004

  2. 查看所有作业。

    sqoop job --list

  3. 查看指定作业的详细信息。

    sqoop job --show im_ts

  4. 在MySQL中新增数据。

    insert into ts values(10005,'赵子龙',27,'m');

  5. 运行作业,增量导入数据,这里需要手动输入数据库密码,Sqoop job默认不保存。

    sqoop job --exec im_ts

  6. 查看导入结果。

    hadoop fs -cat /tmp/sqoop/testdb/ts/part-m-00002

  7. 再次在MySQL中新增数据。

    insert into ts values(10006,'悟空',5000,'m');

  8. 运行作业,此时不需要手动修改--last-value,作业会自动根据上次的结果进行更新。

    sqoop job --exec im_ts

  9. 修改$SQOOP_HOME/conf/sqoop-site.xml配置文件,可以使sqoop job自动保存密码。

    <property> <name>sqoop.metastore.client.record.password</name> <value>true</value> <description>If true, allow saved passwords in the metastore. </description> </property>
相关推荐
_F_y1 小时前
仿RabbitMQ实现消息队列-服务端核心模块实现(4)
分布式·rabbitmq
Albert Edison4 小时前
【RabbitMQ】发布确认模式(使用案例)
分布式·rabbitmq·ruby
EXnf1SbYK6 小时前
Redis分布式锁进阶第十二篇:全系列终极兜底复盘 + 锁架构巡检落地 + 线上零事故收尾方案
redis·分布式·架构
EXnf1SbYK6 小时前
Redis分布式锁进阶第八篇:锁超时乱序深度踩坑 + 看门狗失效真实溯源 + 业务长耗时标准化兜底方案
数据库·redis·分布式
EXnf1SbYK6 小时前
Redis分布式锁进阶第十一篇
数据库·redis·分布式
biyezuopinvip7 小时前
分布式风电场低电压穿越故障建模与仿真
分布式·matlab·毕业设计·毕业论文·分布式风电场·低电压穿越故障·建模与仿真
苍煜7 小时前
SpringBoot单体应用到分布式下的数据库锁、事务、Redis事务、分布式锁、分布式事务协调
数据库·spring boot·分布式
fengxin_rou7 小时前
黑马点评项目万字总结:从redis基础到实战应用详解
java·开发语言·分布式·后端·黑马点评
RestCloud17 小时前
ETL数据质量保障:如何通过优化提升数据准确性?
数据仓库·etl·数据处理·数据传输·数据同步·数据集成平台
小江的记录本18 小时前
【Kafka核心】架构模型:Producer、Broker、Consumer、Consumer Group、Topic、Partition、Replica
java·数据库·分布式·后端·搜索引擎·架构·kafka