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
注意:把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
查看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 ‘分隔符’
分为两种:基于递增列的导入和基于时间列的导入,即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” ---阈值,表示从大于这个时间的位置开始增量导入