sqoop导入和导出数据操作(保姆级教程)

导入:

一、将mysql数据库中的表数据导入到HDFS
表数据和格式如下:
请添加图片描述

1、首先先在hdfs中创建目录,用于导入后存放数据
hdfs dfs -mkdir /sqooptest
hdfs dfs -mkdir /sqooptest/demo1
使用sqoop import 命令将MySQL中的表导入到hdfs中

sqoop import \
--connect jdbc:mysql://nnode1:3306/stu \
--username root \
--password 123123 \
--table student \
--delete-target-dir \
--target-dir /sqooptest/demo1 \
--m 1

执行完成后,打开浏览器进入hdfs页面,可以看到数据被导入进来了
在这里插入图片描述
点击download下载下来看看数据是否一致
在这里插入图片描述
二、MySQL导入数据到hive
首先先创建hive表,然后再导入数据(注意:hive中创建的表要与mysql中的表的数据结构相同)
使用sqoop create-hive-table命令创建hive表

sqoop create-hive-table \
--connect jdbc:mysql://nnode1:3306/stu \
--username root \
--password 123123 \
--table student \
--hive-table test.student_mysql

hive中使用命令show tables;查看表是否创建成功,使用desc student_mysql;查看表结构。
使用sqoop import 命令将MySQL中的表数据导入到hive表中

sqoop import \
--connect jdbc:mysql://nnode1:3306/stu \
--username root \
--password 123123 \
--table student \
--delete-target-dir \
--hive-table test.student_mysql \
--hive-import \
--m 1

三、新增导入(append)
在上述mysql数据导入到hdfs中,表中原先是有数据的,如果我们后续插入数据,又该怎么导入呢?

首先先导入数据

insert into student(`name`,age,gender,telephone,email,classId)
values
("东",20,"男","13910101010","hdd@accp.com",3),
("浩",18,"男","13613309876","fh@accp.com",3),
("达",18,"男","13809090909","ljd@accp.com",1)
sqoop import \
--connect jdbc:mysql://nnode1:3306/stu \
--username root \
--password 123123 \
--table student \
--target-dir /sqooptest/demo2 \
--incremental append \
--check-column id \
--last-value 2 \
--m 1

check-column 绑定id列,last-value是2因为之前表中有两条数据。
在这里插入图片描述
四、新增导入(lastmodified)
首先在mysql中创建一个新表student2

create table student2(
id int,
name varchar(32),
last_mod timestamp default current_timestamp on update 
current_timestamp
)

插入两条数据

insert into student2(id,name) values(1,'zhangsan'),(2,'lisi')

将表student2导入到hdfs中

sqoop import \
--connect jdbc:mysql://nnode1:3306/stu \
--username root \
--password 123123 \
--table student2 \
--delete-target-dir \
--target-dir /sqooptest/demo3 \
--m 1

接着再插入两条数据

insert into student2(id,name) values(3,'wangwu'),(4,'sunliu')
sqoop import \
--connect jdbc:mysql://nnode1:3306/stu \
--username root \
--password 123123 \
--table student2 \
--target-dir /sqooptest/demo3 \
--incremental lastmodified \
--check-column last_mod \
--last-value "2021-11-24 15:35:52" \
--append \
--m 1

请添加图片描述

导出:

新建一个teacher.txt vim teacher.txt
写两条数据

1,wan,jiaoshou,bd
2,jia,leader,bd
3,lin,jy,bd

上传到hdfs
在hdfs中创建目录hdfs dfs -mkdir /sqooptest/exportdata
上传teacher.txt到hdfs中hdfs dfs -put teacher.txt /sqooptest/exportdata

sqoop export \
--connect jdbc:mysql://nnode1:3306/stu \
--username root \
--password 123123 \
--table teacher \
--export-dir /sqooptest/exportdata/ \
--update-key id \
--update-mode allowinsert

请添加图片描述
请添加图片描述
在这里插入图片描述

另一种方式,只支持更新操作
在这里插入图片描述
修改一些数据,然后再到处看一下

sqoop export \
--connect jdbc:mysql://nnode1:3306/stu \
--username root \
--password 123123 \
--table teacher \
--export-dir /sqooptest/exportdata/ \
--update-key id \
--update-mode updateonly

使用命令hdfs dfs -mkdir /sqooptest/exportdata2 创建目录,
hdfs dfs -put teacher.txt /sqooptest/exportdata2 上传文件
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

万家林

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值