1. 程式人生 > >sqoop 數據遷移

sqoop 數據遷移

imp oop 1.4 eight 解壓 ron 生成 exec 需要

sqoop 數據遷移

1 概述

  sqoop是apache旗下一款“Hadoop和關系數據庫服務器之間傳送數據”的工具。

  導入數據:MySQL,Oracle導入數據到Hadoop的HDFS、HIVE、HBASE等數據存儲系統。

  導出數據:從Hadoop的文件系統中導出數據到關系數據庫。

2 工作機制

  將導入或導出命令翻譯成mapreduce程序來實現。

  在翻譯出的mapreduce中主要是對inputformat和outputformat進行定制。

3 sqoop 安裝

  安裝sqoop的前提是已經具備java和hadoop的環境。

  3.1 下載並解壓

     http://ftp.wayne.edu/apache/sqoop/1.4.6/sqoop-1.4.6.bin__hadoop-2.0.4-alpha.tar.gz

  3.2 修改配置文件 

$ cd $SQOOP_HOME/conf

$ mv sqoop-env-template.sh sqoop-env.sh

打開sqoop-env.sh並編輯下面幾行:

export HADOOP_COMMON_HOME=/home/hadoop/apps/hadoop-2.6.1/

export HADOOP_MAPRED_HOME=/home/hadoop/apps/hadoop-2.6.1/

export HIVE_HOME=/home/hadoop/apps/hive-1.2.1

  3.3 加入mysql的jdbc驅動   

cp  ~/app/hive/lib/mysql-connector-java-5.1.28.jar   $SQOOP_HOME/lib/

  3.4 啟動驗證

$ cd $SQOOP_HOME/bin
$ sqoop-version

  輸出:

  15/12/17 14:52:32 INFO sqoop.Sqoop: Running Sqoop version: 1.4.6

  Sqoop 1.4.6 git commit id 5b34accaca7de251fc91161733f906af2eddbe83

  Compiled by abe on Fri Aug 1 11:19:26 PDT 2015

  到這裏,整個Sqoop安裝工作完成

4 數據導入

  4.1 下面的命令用於從MySQL數據庫服務器中的emp表導入HDFS

$bin/sqoop import --connect jdbc:mysql://hdp-node-01:3306/test \
--username root --password root --table emp --m 1

  4.2 導入數據到HIVE

bin/sqoop import --connect jdbc:mysql://hdp-node-01:3306/test --username root --password root --table emp --hive-import --m 1

  4.3 導入到HDFS指定目錄

--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

  4.4 導入表數據子集

  我們可以導入表的使用Sqoop導入工具,"where"子句的一個子集。它執行在各自的數據庫服務器相應的SQL查詢,並將結果存儲在HDFS的目標目錄。

  where子句的語法如下。 

--where <condition>

  下面的命令用來導入emp_add表數據的子集。子集查詢檢索員工ID和地址,居住城市為:Secunderabad 

bin/sqoop import --connect jdbc:mysql://hdp-node-01:3306/test \
--username root --password root --where "city =‘sec-bad‘" --target-dir /wherequery --table emp_add --m 1

  4.5 增量導入

  增量導入是僅導入新添加的表中的行的技術。它需要添加‘incremental’, ‘check-column’, 和 ‘last-value’選項來執行增量導入。下面的語法用於Sqoop導入命令增量選項。  

--incremental <mode>
--check-column <column name>
--last value <last check column value>

  假設新添加的數據轉換成emp表如下

  1206, satish p, grp des, 20000, GR

  下面的命令用於在EMP表執行增量導入

bin/sqoop import --connect jdbc:mysql://hdp-node-01:3306/test \
--username root --password root --table emp --m 1 --incremental append --check-column id --last-value 1205

5 數據導出

  將數據從HDFS導出到RDBMS數據庫。

  導出前,目標表必須存在於目標數據庫中。

  默認操作是從將文件中的數據使用INSERT語句插入到表中。

  更新模式下,是生成UPDATE語句更新表數據。

  語法: 

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

  5.1 將hdfs數據導出到mysql

    1)首先在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 employee --export-dir /user/hadoop/emp/

6 sqoop 作業

  6.1創建作業

    在這裏,我們創建一個名為myjob,這可以從RDBMS表的數據導入到HDFS作業。  

bin/sqoop job --create myimportjob -- import --connect jdbc:mysql://hdp-node-01:3306/test --username root --password root --table emp --m 1

    該命令創建了一個從db庫的employee表導入到HDFS文件的作業。

  6.2 驗證作業(--list) 

$ sqoop job --list

  它顯示了保存作業列表。

  Available jobs:

 myjob

  ‘--show’ 參數用於檢查或驗證特定的工作,及其詳細信息  

$ sqoop job --show myjob

  6.3 執行作業

  ‘--exec’ 選項用於執行保存的作業。下面的命令用於執行保存的作業稱為myjob。 

$ sqoop job --exec myjob

sqoop 數據遷移