介绍
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
查看指定数据库下的所有表
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;