版權聲明:本文爲yunshuxueyuan原創文章。
如需轉載請標明出處: http://www.cnblogs.com/sxt-zkys/
QQ技術交流羣:299142667java
Apache Sqoop是用來實現結構型數據(如關係數據庫)和Hadoop之間進行數據遷移的工具。它充分利用了MapReduce的並行特色以批處理的方式加快數據的傳輸,同時也藉助MapReduce實現了容錯。node
sqoop支持的數據庫:mysql
Databasesql |
version數據庫 |
--direct support?oracle |
connect string matchesapp |
HSQLDB工具 |
1.8.0+oop |
Nopost |
|
MySQL |
5.0+ |
Yes |
jdbc:mysql:// |
Oracle |
10.2.0+ |
No |
|
PostgreSQL |
8.3+ |
Yes (import only) |
jdbc:postgresql:/ |
經過sqoop help命令查看sqoop幫助
[例1] 將mysql中的sds表導入HDFS中
[例2] 將mysql中的sds,指定的列表導入HDFS中
[例3] 將整個數據庫中的表所有導入到hdfs上
import-all-tables命令
sqoop import-all-tables --connect jdbc:mysql://node01/test --username root -password 123
[例4] 指定導出文件爲SequenceFiles,文件命名爲com.ctrip.sds
[例5] 導入文本時能夠指定分隔符
[例6] 能夠指定過濾條件
--m設置並行數據,即map的數據,決定文件的個數。
--target-dir設置hdfs上的目標目錄。
[例一] 將HDFS中數據導入到mysql中的sds表
sqoop export --connect jdbc:mysql://node01/test --username root -password 123 --table psn --export-dir /user/root/psn
[例二] 將關係數據庫表導入到hive表中
create-hive-table
默認sds_bak是在default數據庫的。
這一步須要依賴HCatalog,須要先安裝HCatalog,不然報錯。
list-databases列出一臺server上可用的數據庫
list-tables列出一個數據庫中的表
codegen:
將關係數據庫表映射爲一個java文件、java class類相關的jar包
eval用戶能夠很快的使用sql語句對數據庫進行操做。
job用來生成sqoop任務。
metastore 配置sqoop job的共享元數據信息,這樣多個用戶定義和執行sqoop job在這一metastore中。
啓動:sqoop metastore 關閉:sqoop metastore –shutdown 存儲位置: conf/sqoop-site.xml/sqoop.metastore.server.location
|
[補充]
因爲sqoop是經過map完成數據的導入,各個map過程是獨立的,沒有事物的概念,可能會有部分map數據導入失敗的狀況。爲了解決這一問題,sqoop中有一個折中的辦法,便是指定中間staging表,成功後再由中間表導入到結果表。
--staging-table <staging-table-name>staging表結構也是須要提早建立出來
[注]在使用 –direct,--update-key或者--call存儲過程的選項時,staging中間表是不可用的。
驗證結果:
(1)數據會首先寫到sds_tmp表,導入操做成功後,再由sds_tmp表導入到sds結果表中,同時會清除sds_tmp表。
(2)若是有map失敗,則成功的map會將數據寫入tmp表,export任務失敗,同時tmp表的數據會被保留。
(3)若是tmp中已有數據,則此export操做會直接失敗,
--clear-staging-table 指定在執行前清除中間表。