Sqoop的导入导出

作者: 心_的方向 | 来源:发表于2016-11-03 12:31 被阅读568次

sqoop的功能架构

sqoop是能够在hdfs和关系型数据库之间进行数据量大的数据转换工具,底层运行的是mapreduce项目,是Apache的顶级项目。


hive3.png

从架构图可以看出,sqoop相当于是hadoop中mapreduce的客户端,在sqoop client中执行命令,命令会被解析成转换为mapreduce任务(一般只涉及map任务,不会涉及到reduce任务),然后打成jar包提交给YARN运行。因为hive和hbase的底层还是hdfs,所以也可以让关系型数据和hvie、hbase之间进行数据转换。

sqoop的使用要点

在sqoop的命令行中执行命令,进行数据的导入和导出。


hive2.png
  • 连接关系型数据库需要jdbc路径、用户名、密码、表名信息。
  • 数据是导入还是导出,是相对于hadoop中的hdfs来说的,而不是关系型数据库。
  • 数据不仅可以转换到HDFS中,还可以直接转换至hive、hbase中。

导入数据到HDFS

sqoop执行命令时,首先到关系型数据库中获取表的相关元数据,然后启动只包含map的mapreduce任务并行的导入数据。

  • mysql中创建的测试数据

create database if not exists sqoop;
use sqoop;
create table if not exists tohdfs;
insert into tohdfs values('1','aa');
insert into tohdfs values('2','bb');
insert into tohdfs values('3','cc');
insert into tohdfs values('4','dd');

hive4.png
  • 默认情况下导入到HDFS家目录中


    hive5.png
    hive6.png

    如果没有指定数据存储到什么目录,默认情况下是HDFS的用户主目录,因为此时执行命令的是wulei,所以目录为/user/wulei/。因为只生成了一个mapper任务,所以tohdfs目录下只有一个文件。同时可以发现数据转移到HDFS后,默认的列分隔符为","。

  • 指定目录、mapper个数和分隔符。

bin/sqoop import
--connect jdbc:mysql://bigdata-00:3306/sqoop
--username root
--password 123456
--table tohdfs \

--target-dir /user/wulei/sqoop/input
--num-mappers 3
--fields-terminated-by "\t"
--delete-target-dir

hive7.png
hive8.png

其中--target-dir为指定目录 --num-mappers 指定mapper的个数 --fields-terminated-by 指定列分隔符。需要注意的是,此时这个目录一定不能已经存在,否则会报错;可以添加--delete-target-dir参数提前删除这个目录。
** 数据文件会导入到用户家目录,然后再移动到指定的目标目录 **

  • 使用--direct快速导入。利用了数据库的导入工具,如mysql的mysqlimport,可以比jdbc连接后导入的方式更加高效的导入到HDFS中。
    没用--direct的时间:


    hive9.png

    使用--direct的时间:

bin/sqoop import
--connect jdbc:mysql://bigdata-00:3306/sqoop
--username root
--password 123456
--table tohdfs
--target-dir /user/wulei/sqoop/input
--num-mappers 3
--fields-terminated-by "\t"
--delete-target-dir
--direct

hive10.png
  • 增量导入
    --check-column (col) 检查指定的列,根据此列判断哪些记录是新数据且需要导入的,列不能是字符相关类型
    --incremental (mode) 指定增量模式,mode包含两种方式:append和lastmodified
  • append: 当表中的记录是以id持续增加导入新的记录的时候,可以使 用append模式,--check-column id 用于检查id
  • lastmodified: 表有时候也会执行更新操作,此时可以使用lastmodified导入

--last-value (value): 指定某个值,将大于该值的检查列记录导入,以确定仅将新的或者更新后的记录导入新的文件系统


hive12.png
hive11.png

导出数据到关系型数据库中

bin/sqoop export
--connect jdbc:mysql://bigdata-00:3306/sqoop
--username root
--password 123456
--table tomysql
--num-mappers 1
--input-fields-terminated-by "\t"
--export-dir /user/wulei/sqoop/input/part-m-00000

hive13.png

从MySQL导入数据到Hive

** 会先将mysql中的数据存储到hdfs用户目录下,然后再移动到Hive对应的HDFS目录中**

bin/sqoop import
--connect jdbc:mysql://bigdata-00:3306/sqoop
--username root
--password 123456
--table tohdfs
--num-mappers 1
--fields-terminated-by "\t"
--delete-target-dir
--hive-import
--hive-database tohive_db
--hive-table tohive

hive15.png

从Hive中导出数据到MySQL

** 和hdfs导出数据到mysql相同,把导出目标目录转换为表路径 **

bin/sqoop export --connect jdbc:mysql://bigdata-00:3306/sqoop
--username root
--password 123456
--table tomysql
--num-mappers 1
--input-fields-terminated-by "\t"
--export-dir /user/wulei/sqoop/input/

相关文章

  • 137.如何进行离线计算-3

    137.1 数据导出 Sqoop可以对HDFS文件进行导入导出到关系型数据库 Sqoop 工作机制是将导入或导出命...

  • sqoop import使用

    一、sqoop作用? sqoop是一个数据交换工具,最常用的两个工具是导入导出。 导入导出的参照物是hadoop,...

  • 51cto赵强HADOOP学习(十五)sqoop的导入导出

    使用sqoop导入关系型数据库中的数据 安装 导入导出

  • sqoop数据导入导出应用案例

    sqoop数据导入导出应用案例 1 sqoop导入数据 将RDBMS中的一个表数据导入到hdfs。表中的每一行被视...

  • Sqoop的导入导出

    sqoop的功能架构 sqoop是能够在hdfs和关系型数据库之间进行数据量大的数据转换工具,底层运行的是mapr...

  • 大数据开源技术

    从数据库导入 目前比较常用的数据库导入工具有Sqoop和Canal。Sqoop是一个数据库批量导入导出工具,可以将...

  • sqoop导出时拒绝链接

    使用sqoop导入导出时总是拒绝连接。 排查问题,发现每次启动sqoop脚本进行工作时,MySQL服务会自动关闭。...

  • Sqoop数据导入/导出

    1. 从HDFS导出到RDBMS数据库 1.1 准备工作 写一个文件 上传到hdfs:hadoop fs -put...

  • sqoop导入与导出

    1. 导入实例 1.1 登陆数据库查看表 xiaosi@Qunar:~$ mysql -u root -p Ent...

  • Hive-3.1.2(六)Sqoop1安装及指令

    Sqoop介绍 Sqoop 是apache提供的工具,用于HDFS和关系数据库之间数据导入和导出,可以从HDFS导...

网友评论

本文标题:Sqoop的导入导出

本文链接:https://www.haomeiwen.com/subject/repvuttx.html