sqoop用法——数据全量导入(导出)、增量导入(导出)

1.把MySQL的表导入hdfs

bin/sqoop list-databases -connect jdbc:mysql://192.168.130.29:3306/ -username root -password xxx
 可以查看MySQL的所有数据库

注意:关闭防火墙,否则会报Got error, status=ERROR, status message , ack with firstBadLink as 192.168.130.30:9866错误

   bin/sqoop import \
   --connect jdbc:mysql://192.168.130.29:3306/test \        ---ip,端口,数据库名
   --username root \                                        ---用户名
   --password xxx \                                         ---密码
   --target-dir /sqoopdata/test01 \             ---要导入hdfs的路径,不需要提前创建
   --table emp --m 1                                   ---表名 ,m1表示map的并行数

hdfs的可视化页面http://192.168.130.29:50070/explorer.html#/ 查看是否导入成功
导入完成以后 hdfs dfs -cat /sqoopdata/test01/part-m-00000 可以查看导入进来的数据

除此之外还有
where条件查询导入:

sqoop import \
--connect jdbc:mysql://192.168.130.29:3306/test \
--username root \
--password xxx \
--where "city ='sec-bad'" \
--target-dir /sqoopdata \
--table emp_add \
--m 1

复杂查询条件导入:

bin/sqoop import \
--connect jdbc:mysql://node-21:3306/test \
--username root \
--password xxx \
--target-dir /sqoopdata \
--query 'select id,name,deg from emp WHERE id>1203 and $CONDITIONS' \
--split-by id \
--fields-terminated-by '\t' \
--m 1

2.把MySQL的表导入到hive

注意:把hive的hive-common-3.1.2.jar拷贝到sqoop的lib目录下:
cp /usr/local/hive/lib/hive-common-3.1.2.jar /usr/local/sqoop-1.4.7.bin__hadoop-2.6.0/lib/
否则会报java.io.IOException: java.lang.ClassNotFoundException: org.apache.hadoop.hive.conf.HiveConf 错误

第一步:复制表结构

bin/sqoop create-hive-table \
--connect jdbc:mysql://192.168.130.29:3306/test \
--table emp_add \         
--username root \
--password xxx \
--hive-table testemp

第二步:导入数据

bin/sqoop import \
--connect jdbc:mysql://192.168.130.29:3306/test \
--username root \
--password xxx \
--table emp_add \
--hive-table testemp \
--hive-import \
--m 1

3.hdfs导入到MySQL

查看hdfs数据:hdfs dfs -cat /sqoopdata/test01/part-m-00000
数据如下:

1201,gopal,manager,50000,TP
1202,manisha,Proof reader,50000,TP
1203,khalil,php dev,30000,AC
1204,prasanth,php dev,30000,AC
1205,kranthi,admin,20000,TP

首先在mysql创建表:

 CREATE TABLE employee ( 
 id INT NOT NULL PRIMARY KEY, 
 name VARCHAR(20), 
 deg VARCHAR(20),
 salary INT,
 dept VARCHAR(10));

然后执行导出命令:

bin/sqoop export \
--connect jdbc:mysql://192.168.130.29:3306/test \
--username root \
--password xxx \
--table employee \
--export-dir /sqoopdata/test01/part-m-00000

如果需要指定分隔符 可以加入–input-fields-terminated-by ‘分隔符’

4.增量导入(以mysql导入hdfs为例)

分为两种:基于递增列的导入和基于时间列的导入,即append方式和lastmodify方式

第一种:

   sqoop import \
   --connect jdbc:mysql://192.168.130.29:3306/test \
   --username root \
   --password xxx \
   --query “select id, name from table where \$CONDITIONS” \
   --target-dir /user/root/table \ 
   --split-by id \
   --m 2 \
   --incremental append \          ---append方式
   --check-column id \             ---递增列
   --last-value 15                 ---阈值,表示从id大于15的位置开始增量导入

第二种:

   sqoop import \
   --connect jdbc:mysql://192.168.130.29:3306/testdb \
   --username root \
   --password xxx \
   --query “select id, name from table where \$CONDITIONS” \
   --target-dir /user/root/table \ 
   --split-by id \
   --m 2  \
   --incremental lastmodified \               ---last modify方式,必须有时间字段
   --merge-key id \                           ---合并列,表示将后续新的记录与原有记录合并
   --check-column time \                      ---时间列
   --last-value “2020-06-09 21:00:00”         ---阈值,表示从大于这个时间的位置开始增量导入

你可能感兴趣的:(sqoop用法——数据全量导入(导出)、增量导入(导出))