Sqoop导入导出基本操作

Sqoop基本操作

Sqoop是一款开源的工具,主要用于在Hadoop(Hive)与传统的数据库(mysql、postgresql…)间进行数据的传递,可以将一个关系型数据库(例如 : MySQL ,Oracle ,Postgres等)中的数据导进到Hadoop的HDFS中,也可以将HDFS的数据导进到关系型数据库中。
以命令行的方式,进行表格的全量和增量的抽取,在不同的数据库的表和表之间进行数据的抽取和数据的迁移。
将导入或导出命令翻译成mapreduce程序来实现。

导入数据

检查是否搭建成功 list-tables 显示表名
sqoop list-tables --connect jdbc:mysql://数据库ip地址或者主机名:3306/数据库名字 --数据库用户名 --password 密码
#查看mysql的表
sqoop list-tables --connect jdbc:mysql://localhost:3306/hive --username root --password 123456
#查看oracle的表
sqoop list-tables --connect jdbc:oracle:thin:@192.168.2.88:1521/ORCL --username scott --password tiger

全量导入

dept表 oracle导入到hive
sqoop import \
--hive-import \
--connect jdbc:oracle:thin:@192.168.153.1:1521/orcl \
--username scott \
--password tiger \
--table DEPT \
--hive-database bigdata \
--fields-terminated-by ','
students表 mysql导入到hive
sqoop import \
--hive-import \
--connect jdbc:mysql://192.168.153.1:3306/db01 \
--username root \
--password 123456 \
--table students \
--hive-database bigdata \
--fields-terminated-by ',' \
-m 1  #-m 1的选项,是当被抽取的表格没有主键的时候添加的选项,如果有主键就不要这一句  数据抽取的时候,相同的表格,只能被抽取一次
导入teachers部分字段到hdfs

提示:导入到hdfs不会自动建表

sqoop import \
--connect jdbc:mysql://192.168.2.109:3306/db01 \
--username root \
--password 123456 \
--target-dir /user/teacher \
--fields-terminated-by "\t" \
--columns tno,tsex \
--table teachers \
-m 1
导入scores表中小于80分的数据到hdfs
 sqoop import \
 --connect jdbc:mysql://192.168.153.1:3306/db01 \
 --username root \
 --password 123456 \
 --target-dir /user/scores \
 --fields-terminated-by " " \
 --query 'select * from scores where degree <80 and $CONDITIONS' \ 
 #提示:必须加 '$CONDITIONS' 如果query后面是双引号,必须加\转义字符,避免shell把CONDITIONS当成变量
 -m 1
追加导入
sqoop import \
--append \
--connect jdbc:oracle:thin:@192.168.153.1:1521/orcl \
--username scott \
--password tiger \
--table DEPT2 \
--target-dir /user/hive/warehouse/bigdata.db/dept \
--fields-terminated-by ',' \
-m 1
增量导入

第一次把数据导 入后,以后就只能增量导入了,不然数据会有重复

导入t1表所有数据
sqoop import \
--connect jdbc:oracle:thin:@192.168.2.133:1521/orcl \
--username scott \
--password 123456 \
--table T1 \
--incremental append \   #增量导入的模式
--check-column id \ ##增量导入的字段
--last-value 12 \     #从这个数值后为增量数据
--target-dir /user/hive/warehouse/mydb2.db/T1 \
--fields-terminated-by ',' \
--m 1

导入t1表id从6开始后的数据
sqoop import \
--connect jdbc:mysql://192.168.153.1:3306/db01 \
--username root \
--table t1 \
--password 123456 \
--incremental append \
--check-column id \
--target-dir /user/hive/warehouse/bigdata.db/t1 \
--last-value 18 \
-m 1
#--check-column 检查的字段 有主键用主键判断,没有主键用时间判断
#--last-value 最后一次的值
#--incremental append  自增追加

使用脚本

dept表 oracle导入到hive
#!/bin/bash
echo "删除导入记录"
hadoop fs -rm -r /user/root/DEPT
hive -e "drop table if exists bigdata.dept"
sleep 5s
echo "全量导入"
sqoop import --hive-import --connect jdbc:oracle:thin:@192.168.153.1:1521/orcl --username scott --password tiger --table DEPT --hive-database bigdata --fields-terminated-by ',' 
sleep 5s
hive -e "select * from bigdata.dept"
脚本(增量导入)
#!/bin/bash
max_id=`hive -e 'select ceil(max(id)) from mydb2.c1;'`
max_id=${max_id:3}
#输出最大值
echo '输出最大值:'$max_id
sqoop import \
--connect jdbc:oracle:thin:@192.168.2.133:1521/orcl \
--username scott \
--password 123456 \
--table C1 \
--incremental append \
--check-column id \
--last-value $max_id \
--target-dir /user/hive/warehouse/mydb2.db/c1 \
--fields-terminated-by ',' \
--m 1

导出数据

在Sqoop中,“导出”概念指:从大数据集群(HDFS,HIVE,HBASE)向非大数据集群(RDBMS)中传输数据,叫做:导出,即使用export关键字。(导出需要在关系数据库中自己建表)

sqoop export \
--connect jdbc:oracle:thin:@192.168.153.1:1521/orcl \
--username scott \
--password tiger \
--table T1 \
--export-dir /user/hive/warehouse/t01 \
--input-fields-terminated-by ","
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值