知识目录
一、前言
各位csdn的朋友们大家好!这篇文章是在困扰了我三天(甚至更久),经过不断尝试与踩坑总结出来的通过 sqoop 从mysql数据库导入数据到 hadoop hdfs 的详细笔记与感想,希望能帮助到大家!本篇文章收录于 的 大数据 专栏。
事情是这样的:要实现从关系型数据库(rdbms)导入数据到数据仓库中(比如说hive、hbase等),就要借助 hadoop 集群的 hdfs 来实现,而数据要从关系型数据库(这里以mysql为例)到 hdfs ,则需要借助 sql to hadoop 工具,也就是本篇文章的主角——sqoop。
二、导入前的准备
2.1 hadoop集群搭建
上面我们提到,要导入数据到 hdfs ,那么 hdfs 我们肯定得有吧?于是我们首先就得有 hadoop 集群,hadoop集群搭建,大家可以参考我的这篇文章,这里就不再重复讲啦, hadoop集群搭建(完全分布式)。
2.2 hadoop启停脚本
在使用hadoop集群的过程中,我们不可避免的遇到一个问题:
当我们一打开虚拟机,总是要在 namenode 节点上启动 hdfs ,在 resourcemanager 节点上启动 yarn ,关闭的时候也是,这可能是一个烦人的操作!有没有能够让我们在一个节点上,执行一个命令,就可以把 hdfs 、yarn以及历史服务器打开呢?答案是有!
,大家可以参考我的这篇文章——hadoop启停脚本分享hadoop启停脚本笔记。
三、docker安装mysql
使用docker安装mysql,我本来是打算放在这里的,但是因为文章较为详细,放在此处使得可阅读性有所下降,所以我将笔记放在了另外一篇文章,供大家参考!点击查看docker安装mysql。
四、安装sqoop
4.1 sqoop准备
- 1.将sqoop压缩包上传到 hadoop102的/opt/software 目录下
- 2.解压到 /opt/module 目录下
tar -xzvf sqoop-1.4.6.bin__hadoop-2.0.4-alpha.tar.gz -c /opt/module/
- 3.将sqoop重命名
mv sqoop-1.4.6.bin__hadoop-2.0.4-alpha sqoop-1.4.6 sqoop
- 4.重命名sqoop的模板文件
进入到sqoop的conf目录下,将sqoop-env-template.sh重命名。
mv sqoop-env-template.sh sqoop-env.sh
- 5.在sqoop的配置文件末尾添加上hadoop_home目录
vim /opt/module/sqoop/conf/sqoop-env.sh
# hadoop_home
export hadoop_home=/opt/module/hadoop-3.1.3
export hadoop_mapred_home=/opt/module/hadoop-3.1.3
- 6.上传jdbc的jar包到sqoop的lib目录下
至此,sqoop的安装工作我们就准备好了!接下来我们来测试sqoop是否能正常连接到mysql。
4.2 sqoop连接mysql数据测试
通过在sqoop安装目录下,执行以下命令,如果能够显示mysql数据库中的所有数据库,那么证明sqoop可以和mysql正常通信,即代表安装成功。
- 1.进入到sqoop安装目录
cd /opt/module/sqoop/
- 2.执行以下命令测试
bin/sqoop list-databases --connect jdbc:mysql://hadoop102:3307/ --username root --password sky
五、导入mysql数据到hdfs
现在,我们所有的准备工作都已经准备好了!hadoop集群的 hdfs,yarn,历史服务器,mysql数据库,sqoop工具,现在我们就可以开始从mysql导入数据到 hdfs 了。
5.1 准备mysql数据
- 1.在navicat中新建数据库mysql_to_hive
- 2.在mysql_to_hive数据库执行 sql 文件
sql文件我放在了百度网盘上,点击即可下载。
执行完gmall_report.sql之后,我们的mysql_to_hive数据库就会新建四张表,分别是order_by_province,order_spu_stats,order_total,user_total,并且插入了一些数据。
- 3.查看表及数据
这是order_by_province表中的部分数据展示。
四张表和数据均正常,至此,我们mysql的数据就准备好了!
5.2 导入数据
首先进入到sqoop的安装目录:
cd /opt/module/sqoop/
从sqoop导入全部数据,我们只需要执行以下命令即可。
在执行下面的代码之前,如果你的mysql不是在hadoop102上,需要修改;用户名和密码也是以自己的为准。
- 导入表order_by_province
bin/sqoop import \
--connect jdbc:mysql://hadoop102:3307/mysql_to_hive \
--username root \
--password sky \
--target-dir /mysql/gmall_report/order_by_province \
--table order_by_province \
--num-mappers 1 \
--delete-target-dir \
--fields-terminated-by '\t' \
--num-mappers 5 \
--bindir /opt/module/sqoop/lib \
--split-by dt
- 导入表order_spu_stats
bin/sqoop import \
--connect jdbc:mysql://hadoop102:3307/mysql_to_hive \
--username root \
--password sky \
--table order_spu_stats \
--target-dir /mysql/gmall_report/order_spu_stats \
--num-mappers 1 \
--delete-target-dir \
--fields-terminated-by '\t' \
--num-mappers 5 \
--bindir /opt/module/sqoop/lib \
--split-by dt
- 导入表order_total
bin/sqoop import \
--connect jdbc:mysql://hadoop102:3307/mysql_to_hive \
--username root \
--password sky \
--table order_total \
--target-dir /mysql/gmall_report/order_toal \
--num-mappers 1 \
--delete-target-dir \
--fields-terminated-by '\t' \
--num-mappers 5 \
--bindir /opt/module/sqoop/lib \
--split-by dt
- 导入表user_total
bin/sqoop import \
--connect jdbc:mysql://hadoop102:3307/mysql_to_hive \
--username root \
--password sky \
--table user_total \
--target-dir /mysql/gmall_report/user_toal \
--num-mappers 1 \
--delete-target-dir \
--fields-terminated-by '\t' \
--num-mappers 5 \
--bindir /opt/module/sqoop/lib \
--split-by dt
至此,通过sqoop实现从mysql导入数据到 hdfs 就结束了!希望这篇文章对你有帮助。
六、sqoop现状
讲完了sqoop导入mysql数据到hdfs,接下来我们再聊聊些别的,首先看一下下面这张图片(来源于apache sqoop官网)sqoop官网:
**啊?sqoop要退役了吗?这不科学啊,这么好用的工具,怎么就退役了呢。**仔细看了下,原来apache sqoop在2021年6月就已经进入attic了,就是最近的事情。
不过,「attic」(英文翻译是阁楼,有些束之高阁的意思了)是啥啊?并没有听说过,进入到attic的项目会咋样?,我们继续探索下。
apache attic原来就相当于apache的小黑屋
,如果apache托管的项目长时间不活跃(超过2年没有release新版本,没有committer、contributer并且没有未来roadmap),就会选择将项目移动到attic中,这也就相当于apache的项目管理了,掌管整个项目的生命周期。
目前将sqoop做数据迁移工具公司不在少数,当sqoop移动到attic后,单单使用来说是完全不受影响的;apache attic依旧会提供代码库的下载;但是不会再修复任何的bug,release新版本了,并且也不会再重启社区。
看到这里其实就没有这么慌了,我们还能继续用,不过如果遇到问题,我们只能自己建个分支去fix了,从侧面来说,也能说明sqoop在某个角度是成功的,毕竟曾经成为apache顶级项目,如果真的是长时间没有release,有可能是他确实已经够成熟了
。
七、结语
✨ 这就是今天要分享给大家的全部内容了,我们下期再见!😊
🏠 本文由初心原创,首发于csdn博客, 博客主页:🏠
🍻 理想主义的花,终究会盛开在浪漫主义的土壤里!😍
🏠 我在csdn等你哦!😍
发表评论