sqoop中各种数据的相互导入实例

1.mysql---->HDFS(mysql中的必须是存在的,hdfs中的路径会自动创建,底层就是靠mr实现的)
导入含有主键或是没有主键的表
sqoop import  \
--connect jdbc:mysql://hadoop01:3306/mysqldb \
--username root \
--password 123456 \
--table emp \
--target-dir hdfs://hadoop01/sqoop/mysqltohdfs/emp \
--delete-target-dir \
--fields-terminated-by '\t' \
--split-by mgr 
在导入没有主键的mysql表时,必须指定分割分片,或是写-m 1

导入指定的列
sqoop import  \
--connect jdbc:mysql://hadoop01:3306/mysqldb \
--username root \
--password 123456 \
--table emp \
--columns "empno,ename" \
--where "empno > 22"
--target-dir hdfs://hadoop01/sqoop/mysqltohdfs/emp \
--delete-target-dir \
--fields-terminated-by '\t' \
--null-string 'hh' \
--null-non-string '0' \
--split-by mgr 

导入指定的查询内容
sqoop import  \
--connect jdbc:mysql://hadoop01:3306/mysqldb \
--username root \
--password 123456 \
--query 'select * from emp where $CONDITIONS'
--target-dir hdfs://hadoop01/sqoop/mysqltohdfs/emp \
--delete-target-dir \
--fields-terminated-by '\t' \
-m 1
--query和--table不能同时出现,--query和--where同时出现的时候,--where不生效,--query和--columns同时出现的时候,会先从--query中查询出结果来在对列进行过滤

HDFS---->mysql(hdfs中的文件要存在,mysql中标要提前建立好,字段必须类型必须相同且字段的长度不得小于数据的长度,导出表不能指定列导出,默认就是从1,2,3列开始往出导,不知道hdfs文件中列存储名称)
sqoop export \
--connect jdbc:mysql://hadoop01:3306/mysqldb \
--username root \
--password 123456 \
--table emp \
--export-dir hdfs://hadoop01/sqoop/hdfstomysql/emp \
--input-fields-terminated-by '\t' \
--input-null-string 'hh' \
--input-null-non-string '0' \
-m 1

Mysql---->Hive(mysql的表必须是存在的,hive中的表不需要存在,mysql导入hive的本质就是先把mysql的数据导入到hdfs上存储起来,将导入的hdfs数据通过底层load的方式加载到hive中,可能会因为版本出现报错)
sqoop import \
--connect jdbc:mysql://hadoop01:3306/mysqldb \
--username root \
--password 123456 \
--table emp \
--hive-import \
--hive-overwrite \
--hive-table 'mysqldb.emp' \
--hive-partition-key 'dt' \
--hive-partition-value '2020-01-03' \
--delete-target-dir \
--fields-terminated-by '\t' \
-m 1

 CREATE external TABLE `emp`(
  `empno` int,
  `ename` string,
  `job` string,
  `mgr` int,
  `hiredate` string,
  `sal` double,
  `comm` double)
PARTITIONED by (deptno int)
ROW FORMAT DELIMITED
  FIELDS TERMINATED BY ','
  LINES TERMINATED BY '\n'
LOCATION
  'hdfs://hadoop01/sqoopdata/emp'

alter table emp add partition(deptno=10) location 'hdfs://hadoop01/sqoopdata/emp/deptno=10'
alter table emp add partition(deptno=20) location 'hdfs://hadoop01/sqoopdata/emp/deptno=20'
alter table emp add partition(deptno=30) location 'hdfs://hadoop01/sqoopdata/emp/deptno=30'

sqoop import --connect jdbc:mysql://hadoop01:3306/mysqldb \
--username root --password 123456 \
--query 'select * from emp where deptno=10 and $CONDITIONS' \
--target-dir /sqoopdata/emp/deptno=10 \
--delete-target-dir \
--split-by empno \
-m 1;

sqoop import --connect jdbc:mysql://hadoop01:3306/mysqldb \
--username root --password 123456 \
--query 'select * from emp where deptno=20 and $CONDITIONS' \
--target-dir /sqoopdata/emp/deptno=10 \
--delete-target-dir \
--split-by empno \
-m 1;

sqoop import --connect jdbc:mysql://hadoop01:3306/mysqldb \
--username root --password 123456 \
--query 'select * from emp where deptno=30 and $CONDITIONS' \
--target-dir /sqoopdata/emp/deptno=10 \
--delete-target-dir \
--split-by empno \
-m 1;

Hive---->Mysql(hive和mysqlbiao都要存在)
sqoop export \
--connect jdbc:mysql://hadoop01:3306/mysqldb \
--username root \
--password 123456 \
--table emp \
--export-dir /user/hive/warehouse/sqoop.db/emp \
--fields-terminated-by '\t' \
-m 1

Mysql---->Hbase(mysql表存在)
sqoop import \
--connect jdbc:mysql://hadoop01:3306/mysqldb \
--username root \
--password 123456 \
--table emp \
--column-family 'base_info' \
--hbase-create-table \
--hbase-table 'emp' \
--hbase-row-key 'empno' \
-m 1

增量导入的方式
1.--query
sqoop import \
--connect jdbc:mysql://hadoop01:3306/test \
--username root \
--password 123456 \
--query 'select * from emp where empno = 8000 and $CONDITIONS' \
--target-dir /tmp/emp \
--hive-import \
--hive-table "sqoop.emp" \
--fields-terminated-by '\t' \
-m 1
如果使用--query进行查询, 需要手动指定临时文件保存的路径, 通过 --target-dir 指定
2.--append
sqoop import \
--connect jdbc:mysql://hadoop01:3306/test \
--username root \
--password 123456 \
--append \
--query 'select * from emp where empno = 8000 and $CONDITIONS' \
--target-dir /sqoop/append \
-m 1
3.--incremental
sqoop import \
--connect jdbc:mysql://hadoop01:3306/test \
--username root \
--password 123456 \
--incremental append \
--check-column 'empno' \
--last-value '7800' \
--query 'select * from emp where $CONDITIONS' \
--target-dir /sqoop/incremental \
-m 1


job
sqoop job \
--create job1 \
-- import \
--connect jdbc:mysql://hadoop01:3306/mysqldb \
--username root \
--password 123456 \
--table emp \
--target-dir /sqoop/job/job1 \
--delete-target-dir \
--m 1
执行sqoop job --exec job1
使用job完成增量导入,不会导入重复的数据,只会导入新添加入的数据
sqoop job \
--create job2 \
-- import \
--connect jdbc:mysql://hadoop01:3306/mysqldb \
--username root \
--password 123456 \
--incremental append \
--check-column 'empno' \
--last-value '0' \
--query 'select * from emp where $CONDITIONS' \
--target-dir /sqoop/job/incremental \
--m 1

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值