Hadoop之Sqoop详解

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

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

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


4、语法
  下面的语法用于将数据导入HDFS。
    $ sqoop import (generic-args) (import-args)

5、导入表表数据到HDFS
  下面的命令用于从MySQL数据库服务器中的emp表导入HDFS。
  $bin/sqoop import \
  --connect jdbc:mysql://hdp-node-01:3306/test \
  --username root \
  --password root \
  --table emp --m 1

  为了验证在HDFS导入的数据,请使用以下命令查看导入的数据
  $ $HADOOP_HOME/bin/hadoop fs -cat /user/hadoop/emp/part-m-00000

  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

  导入关系表到HIVE
    bin/sqoop import --connect jdbc:mysql://hdp-node-01:3306/test
    --username root --password root --table emp --hive-import --m 1

  导入到HDFS指定目录
    在导入表数据到HDFS使用Sqoop导入工具,我们可以指定目标目录。
    以下是指定目标目录选项的Sqoop导入命令的语法。
    --target-dir <new or exist directory in HDFS>

  下面的命令是用来导入emp_add表数据到'/queryresult'目录。
  bin/sqoop import \
  --connect jdbc:mysql://hdp-node-01:3306/test \
  --username root \
  --password root \
  --target-dir /queryresult \
  --table emp --m 1

  下面的命令是用来验证 /queryresult 目录中 emp_add表导入的数据形式。
  $HADOOP_HOME/bin/hadoop fs -cat /queryresult/part-m-*

  它会用逗号(,)分隔emp_add表的数据和字段。
  1201, 288A, vgiri, jublee
  1202, 108I, aoc, sec-bad
  1203, 144Z, pgutta, hyd
  1204, 78B, oldcity, sec-bad
  1205, 720C, hitech, sec-bad

  导入表数据子集

  增量导入


6、Sqoop的数据导出
  将数据从HDFS导出到RDBMS数据库
  导出前,目标表必须存在于目标数据库中。
  #默认操作是从将文件中的数据使用INSERT语句插入到表中
  #更新模式下,是生成UPDATE语句更新表数据
  语法
  以下是export命令语法。
    $ sqoop export (generic-args) (export-args)


  示例
    数据是在HDFS 中“EMP/”目录的emp_data文件中。所述emp_data如下:
    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中的目标表
    $ 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://hdp-node-01:3306/test \
    --username root \
    --password root \
    --table emp2 \
    --export-dir /user/hadoop/emp/

  3、验证表mysql命令行。
    mysql>select * from employee;
    如果给定的数据存储成功,那么可以找到数据在如下的employee表。

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

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

 

转载于:https://www.cnblogs.com/atomicbomb/p/9904935.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值