今天还是有一点小摆烂
小谈:
从今天开始就要更新数仓的项目了,为了后面讲的通顺,今天先讲一讲数据的导入导出。
因为本次数仓项目的业务数据是存储在Mysql数据库中,之后需要将Mysql中的数据导入到hdfs当中,存储在hdfs之后,我们会用Hive进行分层。
Sqoop将Mysql数据导入到hdfs
sqoop就是用来导入数据的。
首先测试Sqoop是否能够连接到数据库
bin/sqoop list-databases
--connect jdbc:mysql://hadoop102:3306/
--连接的Mysql数据库地址
--username root
--数据库的用户名
--password 00000
--数据库的密码
下面显示的数据库就是我们本地Mysql中的数据库。
我们来看看本地Mysql中的数据库
和命令行下面显示的东西一摸一样。
现在开始导入到hdfs
bin/sqoop import \
--connect jdbc:mysql://hadoop102:3306/gmall \ --连接的数据库的名字
--username root \ --mysql表中的用户名
--password 000000 \ --mysql表中的密码
--table user_info \ --Mysql中的表
--columns id,login_name \ --要导入的列的信息
--where "id>=10 and id<=30" \ --筛选的条件(可加可不加)
--target-dir /test \ --要导入的hdfs的目录
--delete-target-dir \ -- 目录存在就先删除
--fields-terminated-by '\t' \ --分隔符
--num-mappers 2 \
--指定并执行的map tasks数量
--split-by id 并行执行,拆分数据的参考列
Tips
- target-dir /test 指定Mysql中的数据导入到test目录里面
- delete-target-dir 如果上面的目录存在,就会先将先前目录下的文件删除,刚开始的时候,原本test目录下也是同样的文件,不过日期是2021年10月份的。执行完这个命令后,是今天执行的命令,然后再看hdfs上面的目录,就已经是今天的时间了。说明会先删除我们之前的数据,然后重新创建这个目录,加载文件
上面的日期,就是今天运行时候的日期。
同样可以看到,这个目录下面的文件是两个文件,是因为上面设置了切片的数量为2
Hdfs数据导出到Mysql
在将hdfs数据导出到Mysql之前,首先要创建要相应的表。
在上面Mysql数据导入到hdfs的时候,没有向大家展示数据,下面通过上面的实验,将上面test目录下面的数据导出到Mysql中。
如果Mysql中有数据,那么证明我们Mysql数据导入的HDfs已经成功了。
bin/sqoop export \
--connect jdbc:mysql://hadoop102:3306/gmall \
--username root \
--password 000000 \
--table user \
--export-dir /test \
--input-fields-terminated-by '\t'
- 创建user表
2.执行上面的命令语句
3.查看数据是否已经导出到Mysql
从上面的表中,可以看到只有两列,这两列正是导入到hdfs上面那两列。
同时我们可以看到导入到Hdfs的时候,我们限定where "id>=10 and id <=30"
从表中,我们也可以看到,id最多是30,最小是10。
说明我们不仅导入成功,而且也导出成功了。
总结:
关于数仓项目,总体的架构图明天就会出来。
总体就是日志表的数据通过flume-kafka进行获取
业务数据通过Mysql存储,将Mysql数据同步到hdfs目录上,然后Hive进行加载。
今天先介绍一下sqoop是如何将数据导入导出。