Hadoop資料轉送工具sqoop

來源:互聯網
上載者:User
概述

sqoop是Apache頂級項目,主要用來在Hadoop和關聯式資料庫中傳遞資料。通過sqoop,我們可以方便的將資料從關聯式資料庫匯入到HDFS,或者將資料從HDFS匯出到關聯式資料庫。
sqoop架構:sqoop架構非常簡單,其整合了Hive、Hbase和Oozie,通過map-reduce任務來傳輸資料,從而提供並發特性和容錯。
sqoop的進一步發展可以參考:A New Generation of Data Transfer Tools for Hadoop: Sqoop 2

sqoop主要通過JDBC和關聯式資料庫進行互動。理論上支援JDBC的database都可以使用sqoop和hdfs進行資料互動。
但是,只有一小部分經過sqoop官方測試,如下:Database            version            --direct support            connect string matches
HSQLDB            1.8.0+            No            jdbc:hsqldb:*//
MySQL            5.0+             Yes            jdbc:mysql://
Oracle             10.2.0+            No             jdbc:oracle:*//
PostgreSQL             8.3+            Yes             (import only)jdbc:postgresql://

較老的版本有可能也被支援,但未經過測試。
出於效能考慮,sqoop提供不同於JDBC的快速存取資料的機制,可以通過--direct使用。

以下基於sqoop-1.4.3
安裝

sqoop安裝使用可以參考http://www.54chen.com/java-ee/sqoop-mysql-to-hive.html,測試work

工具

sqoop包含一系列的工具,運行sqoop help可以查看相關協助,
$ ./sqoop help
usage: sqoop COMMAND [ARGS]
Available commands:
  codegen            Generate code to interact with database records
  create-hive-table  Import a table definition into Hive
  eval               Evaluate a SQL statement and display the results
  export             Export an HDFS directory to a database table
  help               List available commands
  import             Import a table from a database to HDFS
  import-all-tables  Import tables from a database to HDFS
  job                Work with saved jobs
  list-databases     List available databases on a server
  list-tables        List available tables in a database
  merge              Merge results of incremental imports
  metastore          Run a standalone Sqoop metastore
  version            Display version information
See 'sqoop help COMMAND' for information on a specific command.

使用工具list-tables查看錶,如下:
$ ./sqoop list-tables --connect jdbc:mysql://127.0.0.1/test --username root --password 123456 
a
t1

可以使用codegen產生代碼,但不執行map-reduce,如下:
$ ./sqoop codegen --connect jdbc:mysql://127.0.0.1/test --username root --password 123456 --table a --
class-name zxm_sqoop 
......
13/03/21 21:02:01 INFO orm.CompilationManager: Writing jar file: /tmp/sqoop-work/compile/29864e3980ab5630b699e8e1e2145369/zxm_sqoop.jar
此處相關代碼和java包可在 /tmp/sqoop-work/compile/29864e3980ab5630b699e8e1e2145369/找到
Import

sqoop 資料匯入具有以下特點:
1.支援文字檔(--as-textfile)、avro(--as-avrodatafile)、SequenceFiles(--as-sequencefile)。 RCFILE暫未支援,預設為文本
2.支援資料追加,通過--apend指定
3.支援table列選取(--column),支援資料選取(--where),和--table一起使用
4.支援資料選取,例如讀入多表join後的資料'SELECT a.*, b.* FROM a JOIN b on (a.id == b.id) ‘,不可以和--table同時使用
5.支援map數定製(-m)
6.支援壓縮(--compress)
7.支援將關聯式資料庫中的資料匯入到Hive(--hive-import)、HBase(--hbase-table)
   資料匯入Hive分三步:1)匯入資料到HDFS  2)Hive建表  3)使用“LOAD DATA INPAHT”將資料LOAD到表中
   資料匯入HBase分二部:1)匯入資料到HDFS 2)調用HBase put操作逐行將資料寫入表
*樣本:
mysql檔案內容:
mysql> select * from a;                          
+------+--------+
| key1 | value1 |
+------+--------+
|    1 | a1     |
|    2 | a2     |
|    3 | a3     |
|    4 | a4     |
|    5 | a5     |
|    6 | a6     |
|    7 | a7     |
|    8 | a8     |
|    9 | a9     |
+------+--------+

編寫檔案a.conf,內容:
import--append-m3--connect jdbc:mysql://127.0.0.1/test --username root --password 123456 --table a--target-dir/tmp/a--columnskey1--where'key1>3'

運行:
$ ./sqoop --options-file a.conf 

查看輸出:
$ hadoop fs -ls /tmp/a/  
Found 3 items
-rw-r--r--   1 work supergroup          4 2013-03-21 23:08 /tmp/a/part-m-00000
-rw-r--r--   1 work supergroup          4 2013-03-21 23:08 /tmp/a/part-m-00001
-rw-r--r--   1 work supergroup          4 2013-03-21 23:08 /tmp/a/part-m-00002  
==》3個檔案對應3個mapper
$ hadoop fs -cat /tmp/a/*
4
5
6
7
8
9
Export

sqoop export 能將HDFS上的檔案匯出到關聯式資料庫。其工作原理是根據使用者指定的分隔字元(欄位分隔符號:--fields-terminated-by)讀入並解析資料,然後轉換成insert/update語句匯入資料到關聯式資料庫。

其具有以下特點:
1. 支援將資料匯出到表(--table)或者調用預存程序(--call)

2. 支援insert、update模式
3. 支援並發控制(-m)
執行個體:
$ hadoop fs -cat /tmp/b/*
1,a
2,b
3,c

$ ./sqoop export --connect jdbc:mysql://127.0.0.1/test --table b  -username root -password 123456 --ex
port-dir /tmp/b

mysql> select * from b;         
+------+--------+
| key1 | value1 |
+------+--------+
|    1 | a      |
|    2 | b      |
|    3 | c      |
+------+--------+

出了上述提到的工具外,sqoop還提供了一些有意思的工具,例如sqoop job,有興趣的同學可以研究下

其它:

1. 通過使用map-reduce,sqoop提供了良好的並發性和容錯,可以作為異構資料庫同步工具。
2. Sqoop雖然支援Hive、HBase,但並不完整,某些情境下資料轉送後的加工不可避免
3. 大資料轉送,也許可以使用--direct

reference:

Apache sqoop
Sqoop User Guide
Apache Sqoop: A Data Transfer Tool for Hadoop
A New Generation of Data Transfer Tools for Hadoop: Sqoop 2
Sqoop使用
大資料異構環境資料同步工具DataX 與Sqoop 之比較

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.