当前位置: 首页 > news >正文

分布式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
  1. 查看所有作业。
sqoop job --list
  1. 查看指定作业的详细信息。
sqoop job --show im_ts
  1. 在MySQL中新增数据。
insert into ts values(10005,'赵子龙',27,'m');
  1. 运行作业,增量导入数据,这里需要手动输入数据库密码,Sqoop job默认不保存。
sqoop job --exec im_ts
  1. 查看导入结果。
hadoop fs -cat /tmp/sqoop/testdb/ts/part-m-00002
  1. 再次在MySQL中新增数据。
insert into ts values(10006,'悟空',5000,'m');
  1. 运行作业,此时不需要手动修改--last-value,作业会自动根据上次的结果进行更新。
sqoop job --exec im_ts
  1. 修改$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>
http://www.lryc.cn/news/169774.html

相关文章:

  • 展会预告 | 图扑邀您共聚 IOTE 国际物联网展·深圳站
  • 如何下载安装 WampServer 并结合 cpolar 内网穿透,轻松实现对本地服务的公网访问
  • iOS添加Mapbox地图库
  • destoon根据目录下的html文件生成地图索引
  • gRPC之gRPC流
  • Kafka Shell命令交互
  • 什么是回归测试?
  • ZTMap是如何在相关政策引导下让建筑更加智慧化的?
  • Python:函数和代码复用
  • three.js——模型对象的使用材质和方法
  • sql explain
  • 【LeetCode-简单题】剑指 Offer 05. 替换空格
  • 数字虚拟人制作简明指南
  • Nginx 文件解析漏洞复现
  • Lombok依赖
  • XML 和 JSON 学习笔记(基础)
  • L1-005 考试座位号分数 15
  • 无涯教程-JavaScript - CEILING.MATH函数
  • ChatGPT提示词(prompt)资源汇总
  • MySQL 几种导数据的方法与遇到的问题
  • (21)多线程实例应用:双色球(6红+1蓝)
  • 升级OpenSSL并进行编译安装
  • Spring整合RabbitMQ
  • MySQL——事务和视图
  • 做好制造项目管理的5个技巧
  • JavaScript中While循环
  • python经典百题之乒乓球比赛
  • 【C++ Exceptions】Catch exceptions by reference!
  • 高斯公式证明
  • 速卖通获得aliexpress商品详情 API 返回值说明