Sqoop数据迁入迁出实战

本文详细介绍了如何使用Sqoop在MySQL、HDFS、Hive和HBase之间进行数据迁移,包括将MySQL数据导入HDFS、从HDFS导出到MySQL、以及将MySQL数据导入HBase的具体步骤和命令。

一Sqoop是什么

   Sqoop是一种用于在Hadoop和关系数据库(RDBMS,如MySQL或Oracle)之间传输数据的工具,使用Sqoop可以批量将数据从关系数据库导入到Hadoop分布式文件系统(HDFS)及其相关系统(如HBase和Hive)中,也可以把Hadoop文件系统及其相关系统中的数据导出到关系数据库中,如下图:

 

                                                  

Sqoop基本架构

Sqoop是使用Java语言编写的,Sqoop的架构非常简单,整合了HDFS,HBase和Hive。底层使用MapReduce进行数据传递,从而提供并进行操作和容错功能,如下图:

 

                                                   

Sqoop接收到客户端的请求命令后,通过命令翻译器(Task Translater)将命令转换为对应的MapReduce任务,然后通过MapReduce任务将数据在RDBMS和Hadoop系统之间进行导入与导出。

Sqoop导入操作的输入是一个RDBMS数据库表,输出是包含表数据的一系列HDFS文件。导入操作是并行的,可以同时启动多个map任务,每个map任务分别逐行读取表中的一部分数据,并且将这部分数据输出到一个HDFS文件中(即一个map任务对应一个HDFS文件)。

Sqoop导出操作是将数据从HDFS或者Hive导出到关系型数据库中。导出过程并行地读取HDFS上的文件,将每一行内容转化成一条记录添加到关系型数据库表中。除了导入和导出操作,Sqoop还可以查询数据库结构和表信息等。

 

二Sqoop开发流程

     在实际开发中,若数据存储于关系型数据库中,当数据量达到一定规模后需要对其进行分析或统计,此时关系型数据库可能称为瓶颈,这时可以将数据从关系型数据库中导入到HBase中,而后通过数据仓库Hive对HBase中的数据进行统计与分析,并将分析结果存入到Hive表中。最后通过Sqoop将分析结果导出到关系型数据库中作为业务的辅助数据或用于Web页面的展示。

     Sqoop的业务开发流程如图所示:

 

                                                    

                            使用Sqoop

要使用Sqoop,需要指定要使用的工具和控制工具的参数。

可以通过进入Sqoop安装目录运行bin/sqoop命令来运行Sqoop。

$ sqoop tool-name [tool-arguments]

Sqoop内置了很多工具,可以通过执行以下命令,显示所有可用工具的列表:

$ sqoop help

常用工具及解析如下:

codegen      生成与数据库记录交互的代码

create-hive-table  导入表的结构到Hive中

eval    执行SQL语句并返回结果

export  导出HDFS目录中的文件数据到数据库表中

help 列出所有可用的工具

import 导入数据库表数据到HDFS中

import-all-tables  导入数据库所有表数到HDFS中

list-databases  列出所有可用数据库

list-tables  列出数据库中所有可用表

version     显示版本信息

 

也可以执行sqoop help (tool-name)来显示特定工具的帮助信息,例如sqoop help import。还可以将--help参数添加到任何命令,例如sqoop import --help

Sqoop的导入和导出操作主要使用import工具和export工具。这两个工具提供了很多参数帮助我们完成数据的迁移和同步。两个工具中都包含的一些通用参数,如下表所示

 

参数

含义

--connect<jdbc-url>

指定JDBC连接字符串

--connection-manager<class-name>

指定要使用的连接管理器类

--driver<class-name>

指定要使用的JDBC驱动类

--hadoop-mapred-home<dir>

指定$HADOOP_MAPRED_HOME路径(MapReduce主目录)

--password-file

设置用于存放认证的密码信息文件的路径

-P (大写的p)

从控制台读取设置输入的密码

--password<password>

设置认证密码

--username<username>

设置认证用户名

--verbose

打印详细的运行信息

--connection-param-file<filename>

指定存储数据库连接参数的属性文件(可选)

                

案例分析一:将mysql表数据导入到HDFS中

创建数据库create databases hdfs_hive;  该数据用于实现mysql表数据导入到hdfs分布式文件系统中。

在MySQL中创建数据库hdfs_hive,并在该表中创建表user_info

SET FOREIGN_KEY_CHECKS=0;

 

-- ----------------------------

-- Table structure for user_info

-- ----------------------------

DROP TABLE IF EXISTS `user_info`;

CREATE TABLE `user_info` (

  `userId` int(20) NOT NULL AUTO_INCREMENT,

  `userName` varchar(100) DEFAULT NULL,

  `password` varchar(50) DEFAULT NULL,

  `trueName` varchar(50) DEFAULT NULL,

  `a

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值