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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章