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代碼,並可在此基礎之上進行深入定制開發

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM