【Hadoop大数据技术】——Sqoop数据迁移(学习笔记)

📖 前言:在实际开发中,有时候需要将HDFS或Hive上的数据导出到传统关系型数据库中(如MySQL、Oracle等),或者将传统关系型数据库中的数据导入到HDFS或Hive上,如果通过人工手动进行数据迁移的话,就会显得非常麻烦。为此,可使用Apache提供的Sqoop工具进行数据迁移。
在这里插入图片描述


🕒 1. Sqoop概述

🕘 1.1 Sqoop简介

Sqoop是Apache的一款开源工具,Sqoop主要用于在Hadoop和关系数据库或大型机之间传输数据,可以使用Sqoop工具将数据从关系数据库管理系统导入(import)到Hadoop分布式文件系统中,或者将Hadoop中的数据转换导出(export)到关系数据库管理系统。

在这里插入图片描述

目前Sqoop主要分为Sqoop1和Sqoop2两个版本,其中版本号为1.4.x属于Sqoop1,版本号为1.9.x属于Sqoop2。这两个版本的定位方向不同,体系结构具有很大的差异,它们之间互不兼容。Sqoop1相对于Sqoop2来说结构简单,易于部署和使用。

🕘 1.2 Sqoop原理

Sqoop是关系型数据库与Hadoop间进行数据同步的工具,其底层利用MapReduce并行计算模型以批处理方式加快数据传输速度,并且具有较好的容错性功能,以实现数据的导入和导出。在数据同步的过程中,MapReduce通常只涉及MapTask的处理,并不会涉及ReduceTask的处理,这是因为数据同步时,只涉及数据的读取与加载,并不会涉及到数据合并的操作。

在这里插入图片描述

导入原理:在导入数据之前,Sqoop使用JDBC检查导入的数据表,检索出表中的所有列以及列的SQL数据类型,并将这些SQL类型映射为Java数据类型,在转换后的MapReduce应用中使用这些对应的Java类型来保存字段的值,Sqoop的代码生成器使用这些信息来创建对应表的类,用于保存从表中抽取的记录。

导出原理:在导出数据前,Sqoop会根据目标表的定义生成一个Java类,这个生成的类能够从文本中解析出记录数据,并能够向表中插入类型合适的值,然后启动一个MapReduce作业,从HDFS中读取源数据文件,使用生成的类解析出记录,并且执行选定的导出方法。

🕒 2. Sqoop安装配置

1、Sqoop的下载
在Ubuntu下打开官网:🔎 Sqoop官网 进行下载,建议下载稳定版本 🔎 sqoop-1.4.7.bin__hadoop-2.6.0.tar.gz

2、解压安装包sqoop-1.4.7.bin__hadoop-2.6.0.tar.gz 至路径 /opt,命令如下:

sudo tar -zxvf sqoop-1.4.7.bin__hadoop-2.6.0.tar.gz -C /opt

3、将解压的文件夹重命名为sqoop并添加sqoop的权限

sudo mv sqoop-1.4.7.bin__hadoop-2.6.0 sqoop
sudo chown -R hadoop:hadoop sqoop

4、修改配置文件
将/opt/sqoop/conf目录下的配置文件sqoop-env-template.sh复制一份,重命名为sqoop-env.sh,命令如下:

cd /opt/sqoop/conf
cp sqoop-env-template.sh sqoop-env.sh
sudo vim sqoop-env.sh

5、使用vim编辑器编辑sqoop-env.sh文件,找到Hadoop环境变量的配置说明,根据自己Hadoop和HBase路径,添加如下配置信息:

#Set Hadoop-specific environment variables here.
#Set path to where bin/hadoop is available
export HADOOP_COMMON_HOME=/usr/local/hadoop
#Set path to where hadoop-*-core.jar is available
export HADOOP_MAPRED_HOME=/usr/local/hadoop
#set the path to where bin/hbase is available
export HBASE_HOME=
#Set the path to where bin/hive is available
export HIVE_HOME=/usr/local/hive
#Set the path for where zookeper config dir is
#export ZOOCFGDIR= # 如果自己配置了zookeeper,也需要在此配置zookeeper路径,没有就不用配置。

6、配置环境变量,使用vim编辑器打开.bashrc文件,在文件开头加入如下3行代码:

export SQOOP_HOME=/opt/sqoop
export CLASSPATH=$CLASSPASS:$SQOOP_HOME/lib
export PATH=$SQOOP_HOME/bin:$PATH

7、保存.bashrc文件并退出vim编辑器。然后,继续执行如下命令让.bashrc文件的配置立即生效:

source ~/.bashrc

8、添加mysql驱动程序。首先需要安装MySQL,前面章节已经完成该软件的安装,这里不再重复。然后需要将前面章节中已经下载的MySQL驱动程序mysql-connector-j-8.3.0.tar.gz解压缩后复制到$SQOOP_HOME/lib目录下。

sudo tar -zxvf mysql-connector-j-8.3.0.tar.gz
cp ./mysql-connector-j-8.3.0/mysql-connector-j-8.3.0.jar /opt/sqoop/lib

9、添加依赖包,使用Sqoop进行数据导入和数据导出的操作时,依赖于jar包commons-lang-2.6.jar和hive-common-3.1.3.jar,需要将改jar包上传到Sqoop安装目录的lib目录下。

🔎 commons-lang-2.6.jar

sudo tar -zxvf commons-lang-2.6-bin.tar.gz
cp ./commons-lang-2.6/commons-lang-2.6.jar /opt/sqoop/lib

cp /usr/local/hive/lib/hive-common-3.1.3.jar /opt/sqoop/lib

10、测试与MySQL的连接
首先保证MySQL服务已经启动,如果没有启动,请执行如下命令:

service mysql start

然后就可以测试Sqoop与MySql直接的连接是否成功,执行命令如下:

sqoop list-databases --connect jdbc:mysql://127.0.0.1:3306/ --username root -P

在这里插入图片描述
如果能够看到MySql数据库中的数据库列表,就表示Sqoop安装成功。例如,从上图给出的信息中就可以看到在最后几行包含了如下数据库列表:
mysql
information_schema
performance_schema
sys
hive

🕒 3. 课后习题

一、填空题
1、从数据库导入HDFS时,指定以制表符作为字段分隔符参数是_____________。

二、判断题
1、Sqoop是关系型数据库与Hadoop之间的数据桥梁,这个桥梁的重要组件是Sqoop连接器。
2、Sqoop从Hive表导出MySQL表时,首先需要在MySQL中创建表结构。
3、–target-dir参数是指定HDFS目标目录地址,因此需要提前创建目标文件。

三、选择题
1、下列选项参数是Sqoop指令的是?(多选)
A、import
B、output
C、input
D、export
2、下列语句描述错误的是()
A、可以通过CLI方式、Java API方式调用Sqoop
B、Sqoop底层会将Sqoop命令转换为MapReduce任务,并通过Sqoop连接器进行数据的导入导出操作。
C、Sqoop是独立的数据迁移工具,可以在任何系统上执行。
D、如果在Hadoop分布式集群环境下,连接MySQL服务器参数不能是localhost或127.0.0.1。

四、编程题
1、利用Sqoop将test数据库中的user表中id>5的用户导入到HDFS中的/user目录(user表字段:id,name)。
2、利用Sqoop将test数据库中的emp表导入Hive表hive.emp_test表中。

解答:
一、1、--fields-terminated-by '\t'

二、1、√ 2、√ 3、×

三、1、AD 2、C

四、1、
在这里插入图片描述

sqoop import \
--connect jdbc:mysql://127.0.0.1:3306/test \
--username root \
--password 1111 \
--target-dir /user/sqoop \
--query 'SELECT id,name FROM user WHERE id>5 AND $CONDITIONS' \
--num-mappers 1 \
--bindir /opt/sqoop/lib

在这里插入图片描述

如果有如下报错,参考链接解决
在这里插入图片描述
🔎 使用sqoop将mysql数据上传至hdfs出现找不到类的问题

2、
在这里插入图片描述

sqoop import \
--connect jdbc:mysql://127.0.0.1:3306/test \
--username root \
--password 1111 \
--table emp \
--hive-table hive_emp_test \
--create-hive-table \
--hive-import \
--num-mappers 1 \
--bindir /opt/sqoop/lib

在这里插入图片描述


OK,以上就是本期知识点“Sqoop数据迁移”的知识啦~~ ,感谢友友们的阅读。后续还会继续更新,欢迎持续关注哟📌~
💫如果有错误❌,欢迎批评指正呀👀~让我们一起相互进步🚀
🎉如果觉得收获满满,可以点点赞👍支持一下哟~

❗ 转载请注明出处
作者:HinsCoder
博客链接:🔎 作者博客主页

  • 27
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Hadoop数据技术是一种开源的分布式计算框架,它能够处理大规模数据集并提供高性能、可伸缩和可靠性的数据处理能力。 Hadoop的核心组件包括Hadoop分布式文件系统(HDFS)和Hadoop分布式计算框架(MapReduce)。HDFS是一个分布式文件系统,可以将大数据集存储在多台计算机上,并提供高容错性和高可用性。MapReduce是一种分布式计算模型,可以将大规模数据集分割成小块,分发给集群中的多个计算节点进行并行处理,最后将结果合并返回。 除了核心组件之外,Hadoop还提供了一些其他工具和组件,如YARN(资源管理系统)、HBase(分布式数据库)、Hive(数据仓库和查询语言)、Pig(数据分析工具)等,这些工具和组件可以与Hadoop一起使用,提供更多丰富的功能和更灵活的数据处理方式。 Hadoop数据技术的优势主要体现在以下几个方面: 1. 可扩展性:Hadoop能够通过增加计算节点来处理更大规模的数据集,从而实现高性能的数据处理能力。 2. 容错性:Hadoop数据复制到不同的计算节点上,即使某个节点出现故障,数据依然可以恢复和访问。 3. 成本效益:Hadoop使用廉价的硬件来构建集群,相比传统的大型服务器,成本更低。 4. 处理速度快:由于使用分布式计算模型,Hadoop可以在短时间内处理大规模数据集,提供高速的数据处理能力。 5. 灵活性:Hadoop提供了各种工具和组件,使得开发人员可以根据自己的需求选择最合适的方式来处理数据。 总的来说,Hadoop数据技术是一个非常强大的数据处理工具,可以帮助企业处理和分析大规模的数据,从而提供更准确、更全面的数据分析和决策支持。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值