Sqoop实战

x33g5p2x  于2021-03-14 发布在 Sqoop  
字(2.7k)|赞(0)|评价(0)|浏览(228)

[warning] 实验环境:完全分布式-bigdata1-bigdata2-bigdata3
要求:该实验需要用到HDFS,所以需要把HDFS的集群启动
启动顺序:1.ZooKeeper 2.HDFS

[info] (1)查看数据库的名称

# 连接113的数据库,查看数据库名称
sqoop list-databases --connect jdbc:mysql://ip:3306/ --username 用户名--password 密码

# 示例
sqoop list-databases --connect jdbc:mysql://192.168.46.113:3306/ --username root --password 123456

:-:

[info] (2)列举出数据库中的表名

# 连接113数据库,列举出数据库中的表名
sqoop list-tables --connect jdbc:mysql://ip:3306/数据库名称 --username 用户名 --password 密码

# 示例
sqoop list-tables --connect jdbc:mysql://192.168.46.113:3306/hadoop --username root --password 123456

:-:

[info] 3. 导入:sqoop import

#命令解释:
sqoop import
--connect jdbc:mysql://ip:3306/databasename  #指定JDBC的URL 其中database指的是(Mysql或者Oracle)中的数据库名
--table  tablename  #要读取数据库database中的表名
--username root      #用户名
--password  123456  #密码
--target-dir   /path  #指的是HDFS中导入表的存放目录(注意:是目录)

--fields-terminated-by '\t'   #设定导入数据后每个字段的分隔符,默认;分隔
--lines-terminated-by '\n'    #设定导入数据后每行的分隔符
--m 1  #并发的map数量1,如果不设置默认启动4个map task执行数据导入,则需要指定一个列来作为划分map task任务的依据
-- where ’查询条件‘   #导入查询出来的内容,表的子集
--incremental  append  #增量导入
--check-column:column_id   #指定增量导入时的参考列
--last-value:num   #上一次导入column_id的最后一个值
--null-string ‘’   #导入的字段为空时,用指定的字符进行替换
#实验流程:

# 1.把MySQL数据库hadoop的表student导入到HDFS中(注意\后面不要有空格)

sqoop import \
--connect jdbc:mysql://192.168.46.113:3306/hadoop \
--username root \
--password 123456 \
--table student \
--target-dir /sqoop \
--delete-target-dir

#实验检验:去HDFS的/sqoop目录看一下是否有数据,有的话即正确

:-:

# 2.把MySQL数据库hadoop的表student部分列导入到HDFS中

sqoop import \
--connect jdbc:mysql://192.168.46.113:3306/hadoop \
--username root \
--password 123456 \
--table student \
--columns="id,name,num" \
--target-dir /sqoop \
--delete-target-dir

:-:

# 3.增加where查询条件,导入id=1的数据(请先在mysql数据库创建一个id为1的数据)

sqoop import \
--connect jdbc:mysql://192.168.46.113:3306/hadoop \
--username root \
--password 123456 \
--table student \
--where 'id=1' \
--target-dir /sqoop \
--delete-target-dir

:-:

[info] (4)sqoop export 导出

#命令解释:
# 注意:导出(目标表必须在mysql数据库中已经建好,数据存放在hdfs中):

sqoop export
--connect jdbs:mysql://ip:3600/库名 #指定JDBC的URL 其中database指的是(Mysql或者Oracle)中的数据库名
--username用户名  #数据库的用户名
--password密码     #数据库的密码
--table表名        #需要导入到数据库中的表名
--export-dir导入数据的名称    #hdfs上的数据文件

--fields-terminated-by ‘\t’       #HDFS中被导出的文件字段之间的分隔符
--lines-terminated-by '\n'    #设定导入数据后每行的分隔符
--m 1  #并发的map数量1,如果不设置默认启动4个map task执行数据导入,则需要指定一个列来作为划分map task任务的依据
--incremental  append  #增量导入
--check-column:column_id   #指定增量导入时的参考列
--last-value:num   #上一次导入column_id的最后一个值
--null-string ‘’   #导出的字段为空时,用指定的字符进行替换
# 1.先删除bigdata3数据库student表的数据
# 登录MySQL数据库,然后删除表数据

use hadoop;
select * from student;
delete from student;

:-:

# 1.把HDFS中的数据导出到MySQL数据库hadoop的表student(注意\后面不要有空格)
# 2.注意:可以先把student表的数据清空,再进行实验,模拟数据从HDFS导入student表

sqoop export \
--connect jdbc:mysql://192.168.46.113:3306/hadoop \
--username root \
--password 123456 \
--table student \
--num-mappers 1 \
--export-dir /sqoop

#实验检验:student的表先清空,若sqoop导入后,student有数据证明实验成功

:-:

:-:

相关文章

热门文章

更多