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');
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任务编写为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
sqoop job --list
sqoop job --show im_ts
insert into ts values(10005,'赵子龙',27,'m');
sqoop job --exec im_ts
hadoop fs -cat /tmp/sqoop/testdb/ts/part-m-00002
insert into ts values(10006,'悟空',5000,'m');
--last-value
,作业会自动根据上次的结果进行更新。sqoop job --exec im_ts
<property>
<name>sqoop.metastore.client.record.password</name>
<value>true</value>
<description>If true, allow saved passwords in the metastore.
</description>
</property>