AlexRomeo
发布于 2024-05-25 / 44 阅读
0
0

sqoop

介绍

Sqoop是一个Apache基金会下的开源工具,用于在Apache Hadoop和结构化数据存储(如关系型数据库如MySQL、Oracle等)之间进行高效数据传输的工具。Sqoop的名称源于“SQL到Hadoop”,它可用于将关系型数据(如MySQL、Oracle等)中的数据快速移动到Hadoop生态系统中(如HDFS和Hive)。

Sqoop提供了一个命令行界面,可以通过描述源和目标的配置来定义数据传输。Sqoop支持将数据以文本文件的形式导入到Hadoop中(如HDFS),也支持将数据导入到Hive、HBase和其他数据存储系统中。Sqoop还支持从Hadoop到关系数据库的导出,支持增量导入数据和全量导入数据。

Sqoop使用了多种方式来优化数据传输,例如并行数据传输等,以提高数据传输的效率和速度。Sqoop还提供了多种安全和权限控制机制,以确保数据的安全性和隐私性。

总之,Sqoop是一个实用的工具,可以帮助企业快速地从关系型数据库中导入数据到Hadoop生态系统中,进而实现更高效的数据处理和分析。

Sqoop安装:

下载sqoop的安装包

配置JDK和hadoop的环境变量。在sqoop工作的时候会去找系统中的环境变量所对应的路径,从而完成的去工作。

sqoop解压之后将对应版本的mysql的驱动包放入它的lib目录下即可使用。

如果sqoop的版本大于1.4.5以上的安装包已经不再提供jar包。需要自己下载sqoop-1..bin_hadoop-2..*-alpha.tar.gz包,解压后,将lib目录下的所有jar包都放入到sqoop的lib目录下,然后在压缩包的根目录中找到sqoop-1.4.6.jar(或sqoop的对应版本)放入到sqoop/lib目录下。

利用sqoop的指令进行操作。

将sqoop加入系统环境变量。

Sqoop的指令集:

查看mysql所有数据库

sh sqoop list-databases --connect jdbc:mysql://hadoop01:3306/ -username root -password root

1681961812392

查看指定数据库下的所有表

sh sqoop list-tables --connect jdbc:mysql://hadoop01:3306/hive -username root -password root

HDFS->数据库

实现步骤:

注:sqoop只能导出数据,不能自动建表。所以在导出之前,要先在mysql数据库里建好对应的表。

1.先在hive中创建表tb1。(如果不想创建表的话,可以选择直接使用hdfs上的任意目录。)
选择数据库
use alex;
创建一个表,表名为tb1
create table tb1(id int,name string) row format delimited
fields terminated by ' ';

2.向表中插入数据:
insert into tb1 values (1,'alex'),(2,'romeo');

3.在mysql中创建表。(表创建在test数据库中,无所谓哪个数据库,都行。)
use test;
create table tb1(id int,name varchar(20));

4.执行下列命令将HDFS上的数据导出到MySQL中。
sqoop export --connect jdbc:mysql://hadoop01:3306/test --username root --password root --export-dir '/user/hive/warehouse/alex.db/tb1' --table tb1 -m 1 --fields-terminated-by ' ';

注:

sqoop export:表示执行导出操作
--connect jdbc:mysql://hadoop01:3306/test:表示要连接mysql的哪个数据库
--export-dir '/user/hive/warehouse/alex.db/tb1' :表示要导出HDFS上的文件路径
--table tb1:表示要导入到mysql的哪个表。
-m 1:表示用一个map任务来完成导入数据,默认为4个。
--fields-terminated-by ' ':表示数据所用的分隔符。

数据库 -> HDFS

sh sqoop import -help(查看import的帮助指令)

实现步骤:

1.先在mysql数据库中创建库(也可以考虑直接使用内置的数据,如test。在库中创建表。并插入测试数据。

use test;

建表:

create table tb2(id int,name varchar(20));

插入数据:

insert into tb2(id,name) values(1,'aaa'),(2,'bbb'),(3,'ccc');

将数据库中的数据导入到HDFS中:

sqoop import --connect jdbc:mysql://hadoop01:3306/test -username root -password root --table tb2 --target-dir '/sqoop/mysqlTB2' --fields-terminated-by '|' -m 1;


评论