sqoop数据迁移(大数据学习23)

1.概述

sqoop是apache旗下一款“Hadoop和关系数据库服务器之间传送数据”的工具。

Sqoop的原理其实就是将导入导出命令转化为mapreduce程序来执行,sqoop在接收到命令后,都要生成mapreduce程序

使用sqoop的代码生成工具可以方便查看到sqoop所生成的java代码,并可在此基础之上进行深入定制开发

导入数据:MySQL,Oracle导入数据到Hadoop的HDFS、HIVE、HBASE等数据存储系统;

导出数据:从Hadoop的文件系统中导出数据到关系数据库

2.工作机制

将导入或导出命令翻译成mapreduce程序来实现

在翻译出的mapreduce中主要是对inputformat和outputformat进行定制

3 sqoop实战及原理

3.1 sqoop安装

安装sqoop的前提是已经具备java和hadoop的环境

3.2下载并解压

下载地址 http://ftp.wayne.edu/apache/sqoop/1.4.6/  

百度云链接:https://pan.baidu.com/s/1oJ4VsdOsGhwAtWlNjQ8qnw  提取码:nl36

3.3 修改配置文件

先将sqool/conf 下的sqoop-env-template.sh修改名称

 mv sqoop-env-template.sh  sqoop-env.sh

然后编辑修改  vi sqoop-env.sh  修改内容如下: 可以先查看自己hadoop 安装到哪里  命令为 which hadoop  修改完后保存退出

3.4 加入mysql的jdbc驱动包

cp ~/apps/apache-hive-1.2.1-bin/lib/mysql-connector-java-5.1.28.jar  ./lib/

3.4 验证启动

 进入sqoop文件下

[hadoop@mini1 sqoop]$ bin/sqoop

4 Sqoop的数据导入

“导入工具”导入单个表从RDBMS到HDFS。表中的每一行被视为HDFS的记录。所有记录都存储为文本文件的文本数据(或者Avro、sequence文件等二进制数据) 

1.先将mysql的数据导到Hdfs中   mysql数据库表如下:

在虚拟机的mysql中创建一个database,然后建三张表:emp, emp_add和emp_conn

表emp:

id

name

deg

salary

dept

1201

gopal

manager

50,000

TP

1202

manisha

Proof reader

50,000

TP

1203

khalil

php dev

30,000

AC

1204

prasanth

php dev

30,000

AC

1205

kranthi

admin

20,000

TP

表emp_add:

id

hno

street

city

1201

288A

vgiri

jublee

1202

108I

aoc

sec-bad

1203

144Z

pgutta

hyd

1204

78B

old city

sec-bad

1205

720X

hitec

sec-bad

表emp_conn:

id

phno

email

1201

2356742

[email protected]

1202

1661663

[email protected]

1203

8887776

[email protected]

1204

9988774

[email protected]

1205

1231231

[email protected]

导入表数据到HDFS

1.下面的命令用于从MySQL数据库服务器中的emp表导入HDFS。

我是将mini2中的mysql中的数据导入mini1的HDFS中

$bin/sqoop import   \

--connect jdbc:mysql://mini2:3306/test   \

--username root  \

--password 123456   \

--table emp   \

--m 1  

导入结果如下:

2.下面的命令用于从MySQL数据库服务器中的emp表导入Hive数据仓库工具里。

我是将mini2中的mysql中的数据导入mini1的Hive数据仓库工具中

bin/sqoop import --connect jdbc:mysql://mini2:3306/test --username root --password 123456 --table emp --hive-import --m 1

得到的结果如下:

3.从MySQL数据库服务器中导入到HDFS指定目录

在导入表数据到HDFS使用Sqoop导入工具,我们可以指定目标目录。

以下是指定目标目录选项的Sqoop导入命令的语法。

bin/sqoop import \
--connect jdbc:mysql://mini2:3306/test \
--username root \
--password 123456 \
--target-dir /queryresult \
--table emp --m 1

4.导入表数据子集

我们可以导入表的使用Sqoop导入工具,"where"子句的一个子集。它执行在各自的数据库服务器相应的SQL查询,并将结果存储在HDFS的目标目录。

where子句的语法:   --where <condition>

下面的命令用来导入emp_add表数据的子集。子集查询检索员工ID和地址,居住城市为:

bin/sqoop import \
--connect jdbc:mysql://mini2:3306/test \
--username root \
--password 123456 \
--where "city ='sec-bad'" \
--target-dir /wherequery \
--table emp_add --m 1

 按需导入

bin/sqoop import \
--connect jdbc:mysql://mini2:3306/test \
--username root \
--password 123456 \
--target-dir /wherequery2 \
--query 'select id,name,deg from emp WHERE  id>1207 and $CONDITIONS' \
--split-by id \
--fields-terminated-by '\t' \
--m 1

5.增量导入

增量导入是仅导入新添加的表中的行的技术,它需要添加‘incremental’, ‘check-column’, 和 ‘last-value’选项来执行增量导入。

下面的语法用于Sqoop导入命令增量选项。

--incremental <mode>

--check-column <column name>

--last value <last check column value>

假设新添加的数据转换成emp表如下: 1206, satish p, grp des, 20000, GR   下面的命令用于在EMP表执行增量导入。

bin/sqoop import \
--connect jdbc:mysql://mini2:3306/test \
--username root \
--password 123456 \
--table emp --m 1 \
--incremental append \
--check-column id \
--last-value 1208

5 Sqoop的数据导出

将数据从HDFS导出到mysql数据库 ,导出前,目标表必须存在于目标数据库中

示例

数据是在HDFS中 /queryresult 目录下 emp文件中,所述emp数据如下:

1201, gopal,     manager, 50000, TP
1202, manisha,   preader, 50000, TP
1203, kalil,     php dev, 30000, AC
1204, prasanth,  php dev, 30000, AC
1205, kranthi,   admin,   20000, TP
1206, satish p,  grp des, 20000, GR

1、首先需要手动创建mysql中的目标表 命令如下: 在mini2上的mysql数据库创建表

$ mysql
mysql> USE db;
mysql> CREATE TABLE employee ( 
   id INT NOT NULL PRIMARY KEY, 
   name VARCHAR(20), 
   deg VARCHAR(20),
   salary INT,
   dept VARCHAR(10));

2、然后执行导出命令

bin/sqoop export \
--connect jdbc:mysql://mini2:3306/lyz  \
--username root \
--password 123456 \
--table employee \
--export-dir /queryresult/

最终的结果如下:

以上就是sqoop导入导出的所有功能。

猜你喜欢

转载自blog.csdn.net/weixin_38201936/article/details/88688784