一. sqoop 一个数据迁移工具 可以将数据库的导入到hdfs , hive表 , hbase;也可以将hdfs导出到数据库。
sqoop底层 他也是产生mapreduce 就是mapper
1.将数据库中的数据导入到Hdfs上
sqoop import --connect jdbc:mysql://192.168.126.1/1510b --username root --password root --table emp
2.指定只有一个map 指定输出目录
sqoop import --connect jdbc:mysql://192.168.126.1/1510b --username root --password root --table emp --m 1 --target-dir /user/1510a/sqoop
3.默认情况下 分隔符为 , 如果指定分隔符 --fields-terminated-by
sqoop import --connect jdbc:mysql://192.168.126.1/1510b --username root --password root --table emp --m 1 --target-dir /user/1510a/emp001 \
--fields-terminated-by '\t'
4. 导出一部分字段 --columns
sqoop import --connect jdbc:mysql://192.168.126.1/1510b --username root --password root \ --table emp --m 1 --target-dir /user/1510a/emp002 \
--fields-terminated-by '\t' --columns 'empno,ename,sal,mgr,deptno'
5. 增加过滤条件 --where
sqoop import --connect jdbc:mysql://192.168.126.1/1510b --username root --password root \ --table emp --m 1 --target-dir /user/1510a/emp003 \
--fields-terminated-by '\t' --columns 'empno,ename,sal,mgr,deptno'\ --where 'sal>1200 and sal <5000'
6. 做些复杂查询 --query
ps : query 与 table 不能在一起使用
sqoop import --connect jdbc:mysql://192.168.126.1/1510b --username root --password root \ --m 1 --target-dir /user/1510a/emp005 \
--fields-terminated-by '\t' --query 'select e.ename,d.dname,e.sal,d.loc from emp e join dept d on e.deptno = d.deptno where $CONDITIONS'
7.如果-m = 2的话 就会出错 我们必须要加 --split-by
sqoop import --connect jdbc:mysql://192.168.126.1/1510b --username root --password root \ --m 2 --split-by e.ename --target-dir /user/1510a/emp011 \
--fields-terminated-by '\t' --query 'select e.ename,d.dname,e.sal,d.loc from emp e join dept d on e.deptno = d.deptno where $CONDITIONS'
**********************************************************************************************************************************************************************************
二. 导出的例子 :
(1) mysql ---> hive 的导入不能够直接导需要先建表
建表 :
create table emp2(
EMPNO int,
ENAME string,
JOB string,
MGR int,
HIREDATE string,
SAL int,
COMM int,
DEPTNO int
)
partitioned by (dt string)
row format delimited fields terminated by '\t' ;
命令:sqoop export --connect jdbc:mysql://192.168.126.1/1510a --username root --password root \ --m 1 --fields-terminated-by '\t' --export-dir
/user/1510a/emp001 --table user
(2) 导出hive 到 mysql
1.直接从表所对应的目录中 直接导出
2. insert overwrite directory '/user/beicai/emp2' select ename,deptno,sal from emp2;