sqoop是一款用於hadoop和關係型數據庫之間數據導入導出的工具。你能夠經過sqoop把數據從數據庫(好比mysql,oracle)導入到hdfs中;也能夠把數據從hdfs中導出到關係型數據庫中。sqoop經過Hadoop的MapReduce導入導出,所以提供了很高的並行性能以及良好的容錯性。java
sqoop適合如下的人羣使用:mysql
本文檔是依據sqoop v1.4.6翻譯的.目前最新的版本是sqoop2,變化有點大。sql
sqoop是Apache軟件基金會提供的開源框架。官方網站參考:http://sqoop.apache.org。數據庫
想要使用這款工具須要有一下的背景:apache
在你使用sqoop以前,須要先安裝hadoop。這個文檔是基於Linux環境的,若是你是在windows下使用,須要安裝cygwin。windows
經過sqoop,你能夠從關係型數據庫中導出數據,導入到hdfs中。輸入多是數據庫的一張表或者查詢結果;輸出則是數據庫表或者結果的導出文件集合。導入進程是並行的,所以輸出的結果多是多個文件(最終在hdfs中可能會獲得多個文件)。這些文件多是標準的文本文件TextFile(好比,使用逗號作字段間的分割),也多是Avro或者SequeenceFiles的記錄文件。bash
sqoop的導入進程是一個自動生成出來的java class,所以它的不少組件均可以自定義,好比導入的格式、文本的格式、到出的格式等等。oracle
sqoop還提供了不少的工具來檢查數據庫.框架
好比經過sqoop-list-databases能夠列出數據庫的表視圖。ide
[root@hadoop-master bin]# sqoop-list-databases --connect 'jdbc:mysql://localhost:3306/dbname' --username 'name' --password 'passwd' 16/09/29 18:29:11 INFO sqoop.Sqoop: Running Sqoop version: 1.4.6 16/09/29 18:29:11 WARN tool.BaseSqoopTool: Setting your password on the command-line is insecure. Consider using -P instead. 16/09/29 18:29:11 INFO manager.MySQLManager: Preparing to use a MySQL streaming resultset. test dev xingoo
經過sqoop-list-tables查看錶
[root@hadoop-master bin]# sqoop-list-tables --connect 'jdbc:mysql://localhost:3306/dbname' --username 'name' --password 'passwd' 16/09/29 18:26:50 INFO sqoop.Sqoop: Running Sqoop version: 1.4.6 16/09/29 18:26:50 WARN tool.BaseSqoopTool: Setting your password on the command-line is insecure. Consider using -P instead. 16/09/29 18:26:51 INFO manager.MySQLManager: Preparing to use a MySQL streaming resultset. a b c d
大多數導入進程,代碼生成,導出進程均可以自定義。對於數據庫,你能夠控制到特定的行或者列,讀取哪些行,讀取哪些列。對於輸出的hdfs文件,能夠指定特定的分隔符以及轉義字符,以及文本的格式化。甚至能夠控制生成代碼的類和包的名字。
總結的來講,sqoop是基於mapreduce的一款db和hadoop之間的數據交換工具。後續的文檔,將會介紹sqoop在使用時的參數。