Sqoop的数据导入&导出

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/
    

sqoop的执行job的命令

  • 执行job
sqoop job --exec jobname
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Sqoop是一个用于在Hadoop和关系型数据库之间进行数据传输的工具。它可以将数据从关系型数据导入到Hadoop集群中,也可以将数据从Hadoop集群导出到关系型数据库中。下面是一个Sqoop数据导入导出的shell脚本示例: 1. 数据导入脚本: ``` sqoop import \ --connect jdbc:mysql://localhost/mydatabase \ --username root \ --password password \ --table mytable \ --target-dir /user/hadoop/mydata \ --m 1 ``` 这个脚本将从MySQL数据库中的mytable表导入数据,并将数据存储在Hadoop集群中的/user/hadoop/mydata目录下。其中,--connect参数指定了数据库连接URL,--username和--password参数指定了数据库的用户名和密码,--table参数指定了要导入的表名,--target-dir参数指定了数据存储的目录,--m参数指定了并行度。 2. 数据导出脚本: ``` sqoop export \ --connect jdbc:mysql://localhost/mydatabase \ --username root \ --password password \ --table mytable \ --export-dir /user/hadoop/mydata \ --input-fields-terminated-by '\t' \ --input-lines-terminated-by '\n' ``` 这个脚本将从Hadoop集群中的/user/hadoop/mydata目录中读取数据,并将数据导出MySQL数据库的mytable表中。其中,--connect参数指定了数据库连接URL,--username和--password参数指定了数据库的用户名和密码,--table参数指定了要导出的表名,--export-dir参数指定了数据读取的目录,--input-fields-terminated-by和--input-lines-terminated-by参数指定了输入数据的分隔符。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值