11 辅助系统框架之sqoop数据迁移

本文详细介绍了Apache Sqoop在Hadoop和关系数据库间的数据迁移,包括sqoop1与sqoop2的区别、安装步骤、数据导入导出实战,以及增量和减量导入的实现方法,为Hadoop环境下的数据传输提供了实用指导。
摘要由CSDN通过智能技术生成

11 辅助系统框架之sqoop数据迁移

1.概述

sqoop是apache旗下一款“Hadoop和关系数据库服务器之间传送数据”的工具。
导入数据:MySQL,Oracle导入数据到Hadoop的HDFS、HIVE、HBASE等数据存储系统;
导出数据:从Hadoop的文件系统中导出数据到关系数据库mysql等

通过MR的inputformat和outputformat来实现数据的输入与输出,底层执行的全部都是MR的任务,
只不过这个mr只有map阶段,没有reduce阶段
说白了只是对数据进行抽取,从一个地方,抽取到另外一个地方

2.sqoop1与sqoop2架构对比

一般用sqoop1.x比较多,直接将我们的命令写入到脚本里面去,执行脚本即可
sqoop 1.x 不用安装,解压就能用
在这里插入图片描述
sqoop 2.x 架构发生了变化,引入了一个服务端 可以通过代码提交sqoop的任务
在这里插入图片描述

3.工作机制

将导入或导出命令翻译成mapreduce程序来实现
在翻译出的mapreduce中主要是对inputformat和outputformat进行定制

4.sqoop实战及原理

4.1 sqoop安装

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

1、下载并解压

下载地址

http://archive.cloudera.com/cdh5/cdh/5/
sqoop1版本详细下载地址
http://archive.cloudera.com/cdh5/cdh/5/sqoop-1.4.6-cdh5.14.0.tar.gz
sqoop2版本详细下载地址
http://archive.cloudera.com/cdh5/cdh/5/sqoop2-1.99.5-cdh5.14.0.tar.gz

我们这里使用sqoop1的版本,下载之后上传到/export/softwares目录下,然后进行解压

cd /export/softwares
tar -zxvf sqoop-1.4.6-cdh5.14.0.tar.gz -C ../servers/
2、修改配置文件
cd /export/servers/sqoop-1.4.6-cdh5.14.0/conf/
cp sqoop-env-template.sh  sqoop-env.sh
vim sqoop-env.sh

export HADOOP_COMMON_HOME=/export/servers/hadoop-2.6.0-cdh5.14.0
export HADOOP_MAPRED_HOME=/export/servers/hadoop-2.6.0-cdh5.14.0
export HIVE_HOME=/export/servers/hive-1.1.0-cdh5.14.0
3、加入额外的依赖包

sqoop的使用需要添加两个额外的依赖包

一个是mysql的驱动包,
另一个是java-json的的依赖包,不然就会报错
mysql-connector-java-5.1.40.jar
java-json.jar

将这个两个jar包添加到sqoop的lib目录下
4、验证启动
cd /export/servers/sqoop-1.4.6-cdh5.14.0
bin/sqoop-version

5.Sqoop的数据导入

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

列举出所有的数据库与表

命令行查看帮助

bin/sqoop list-databases --help

列出win7主机所有的数据库

bin/sqoop list-databases --connect jdbc:mysql://node3:3306/ --username 	root --password 123456

查看某一个数据库下面的所有数据表

bin/sqoop list-tables --connect jdbc:mysql://node3:3306/hive --username root --password 123456

其它导入示例

1)表数据准备

在mysql中有一个库userdb中三个表:emp, emp_add和emp_conn
表emp:

source /export/servers/userdb.sql;
2)导入数据库表数据到HDFS

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

bin/sqoop import --connect jdbc:mysql://node3:3306/userdb --password 123456 --username root --table emp -m 1
如果成功执行,那么数据默认会存储再/user/root/目录下
hdfs  dfs  -ls  /user/root/emp
3)导入到HDFS指定目录

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

使用参数 --target-dir来指定导出目的地,
使用参数—delete-target-dir来判断导出目录是否存在,如果存在就删掉
bin/sqoop import  --connect jdbc:mysql://node3:3306/userdb --username root --password 123456 --delete-target-dir --table emp  --target-dir /sqoop/emp -m 1
hdfs dfs -text /sqoop/emp/part-m-00000 (查看导出的数据)

它会用逗号(,)分隔emp表的数据和字段。
在这里插入图片描述

4)导入到hdfs指定目录并指定字段之间的分隔符
bin/sqoop import  --connect jdbc:mysql://node3:3306/userdb --username root \
--password 123456 --delete-target-dir --table emp  --target-dir /sqoop/emp2 --m 1\
--fields-terminated-by '\
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值