介紹
sqoop是一款用於hadoop和關系型數據庫之間數據導入導出的工具。你可以通過sqoop把數據從數據庫(比如mysql,oracle)導入到hdfs中;也可以把數據從hdfs中導出到關系型數據庫中。sqoop通過Hadoop的MapReduce導入導出,因此提供了很高的並行性能以及良好的容錯性。
sqoop適合以下的人群使用:
- 系統和應用開發者
- 系統管理員
- 數據庫管理員
- 數據分析師
- 數據工程師
支持的版本
本文檔是依據sqoop v1.4.6翻譯的.目前最新的版本是sqoop2,變化有點大。
sqoop的版本
sqoop是Apache軟件基金會提供的開源框架。官方網站參考:http://sqoop.apache.org。
前提條件
想要使用這款工具需要有一下的背景:
- 基本的計算機知識
- 對類似bash的命令行比較熟悉(因為sqoop基本都是通過命令行來操作的)
- 熟悉關系型數據庫系統的管理(畢竟是從數據庫到出)
- 熟悉hadoop基本操作(了解基本的hdfs操作和mapreduce的原理會更容易理解sqoop的過程)
在你使用sqoop之前,需要先安裝hadoop。這個文檔是基於Linux環境的,如果你是在windows下使用,需要安裝cygwin。
基本的使用
通過sqoop,你可以從關系型數據庫中導出數據,導入到hdfs中。輸入可能是數據庫的一張表或者查詢結果;輸出則是數據庫表或者結果的導出文件集合。導入進程是並行的,因此輸出的結果可能是多個文件(最終在hdfs中可能會得到多個文件)。這些文件可能是標准的文本文件TextFile(比如,使用逗號做字段間的分割),也可能是Avro或者SequeenceFiles的記錄文件。
sqoop的導入進程是一個自動生成出來的java class,因此它的很多組件都可以自定義,比如導入的格式、文本的格式、到出的格式等等。
sqoop還提供了很多的工具來檢查數據庫.
比如通過sqoop-list-databases可以列出數據庫的表視圖。
[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在使用時的參數。