Sqoop的数据导入&导出

版权声明:版权声明中 https://blog.csdn.net/lds_include/article/details/88927787

Sqoop的数据导入、导出

sqoop导入

  • 就是从关系型数据库(mysql)的数据导入到 Hadoop 与其相关的系统 (如HBase和Hive)中。

1 语法

$ sqoop import (generic-args) (import-args) 

2 案例

测试之前先在mysql中准备数据:

create database sqoop;   --创建名为sqoop的数据库

use sqoop;				--切换到sqoop数据库

create table employee(	  --创建一个名为employee的表
id int not null primary key auto_increment,
name varchar(20),
birthday date
);

insert into employee values ('','张三','2016-01-01');
insert into employee values ('','张四','2016-01-01');
insert into employee values ('','张五','2016-01-01');
insert into employee values ('','张6','2016-01-01');
insert into employee values ('','张7','2016-01-01');
insert into employee values ('','张8','2016-01-01');
insert into employee values ('','张9','2016-01-01');
insert into employee values ('','张10','2016-01-01');
insert into employee values ('','张11','2016-01-01');
insert into employee values ('','张12','2016-01-01');
insert into employee values ('','张13','2016-01-01');
insert into employee values ('','张14','2016-01-01');
insert into employee values ('','zhangsan','2016-01-01');
  • 导入表数据到hdfs中

  • 创建sqoop

    #sqoop的命令只能在行,如果换行则需要使用 \
    sqoop job --delete sqoopone \
    sqoop job --create sqoopone \
    import \
    --connect jdbc:mysql://localhost:3306/sqoop \
    --username root \
    --password root \
    --table employee \     #mysql的表名
    --target-dir /luodesong 	   #/sqfs  表示导入的数据保存在hadoop的路径
    --m 1  #表示启动mr的数量
    

    上述语句如果没有指定保存到HDFS到哪里(target-dir),默认保存在/user/hadoop/employee/路径下

  • 如果成功执行,那么会得到下面的输出

    14/12/22 15:24:54 INFO sqoop.Sqoop: Running Sqoop version: 1.4.5
    14/12/22 15:24:56 INFO manager.MySQLManager: Preparing to use a MySQL streaming resultset.
    INFO orm.CompilationManager: Writing jar file: /tmp/sqoop-hadoop/compile/cebe706d23ebb1fd99c1f063ad51ebd7/emp.jar
    -----------------------------------------------------
    O mapreduce.Job: map 0% reduce 0%
    14/12/22 15:28:08 INFO mapreduce.Job: map 100% reduce 0%
    14/12/22 15:28:16 INFO mapreduce.Job: Job job_1419242001831_0001 completed successfully
    -----------------------------------------------------
    -----------------------------------------------------
    14/12/22 15:28:17 INFO mapreduce.ImportJobBase: Transferred 145 bytes in 177.5849 seconds (0.8165 bytes/sec)
    14/12/22 15:28:17 INFO mapreduce.ImportJobBase: Retrieved 5 records.
    

  • 为了验证在HDFS导入的数据,请使用以下命令查看导入的数据

    hadoop fs -cat /luodesong/employee/part-m-00000
    

  • 导入表数据到hive中

    sqoop job --delete sqoopotow \
    sqoop job --create sqooptow \
    import \
    --connect jdbc:mysql://localhost:3306/sqoop \
    --username root \
    --password root \
    --table employee \
    --hive-import \			#这句是关键语句
    --m 1
    
  • 导入表数据子集

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

    导入id值大于5的记录

    sqoop job --delete sqoopthree \
    sqoop job --create sqoopthree \
    import \
    --connect jdbc:mysql://localhost:3306/sqoop \
    --username root \
    --password root \
    --where "id >5" \
    --target-dir /wherequery \
    --table employee 
    --m 1
    
  • 增量导入

    增量导入是仅导入新添加的表中的行的技术

    它需要添加‘incremental’,‘check-column’, 和 ‘last-value’选项来执行增量导入。下面的语法用于Sqoop导入命令增量选项。

    --incremental <mode>
    --check-column <column name>
    --last value <last check column value>
    ```​
    
    
  • 假设新添加的数据转换成employee表如下

    insert into employee values ('','张100','2018-03-03');
    ```
  • 下面的命令用于在employee表执行增量导入。

    sqoop job --delete sqoopfour \
    sqoop job --create sqoopfour \
    import \
    --connect jdbc:mysql://localhost:3306/sqoop \
    --username root \
    --password root \
    --table employee 
    --m 1 \
    --incremental append \
    --check-column id \  #根据id判定一条记录
    --last-value 12    #从哪条记录以后的内容导入
    

Sqoop的数据导出

就是从 Hadoop 系统里抽取并导出到关系型数据库里。

1 语法

$ sqoop export (generic-args) (export-args) 

2 案例

-从hdfs中导入到mysql

  • 数据是在HDFS 中“employee/”目录的emp_data文件中。所述emp_data如下:

    1,张三,2016-01-01
    2,张四,2016-01-01
    3,张五,2016-01-01
    4,张6,2016-01-01
    5,张7,2016-01-01
    6,张8,2016-01-01
    

  • 首先需要手动创建mysql中的目标表

    mysql> USE sqoop2;
    mysql> CREATE TABLE employee ( 
       id INT NOT NULL PRIMARY KEY, 
       name VARCHAR(20), 
       birthday date);
    

  • 然后执行导出命令

    sqoop job --delete sqoopfive \
    sqoop job --create sqoopfive \
    export \
    --connect jdbc:mysql://localhost:3306/sqoop2 \
    --username root \
    --password root \
    --table employee \
    --export-dir /employee/
    

猜你喜欢

转载自blog.csdn.net/lds_include/article/details/88927787