版權宣告:本文為yunshuxueyuan原創文章。
如需轉載請標明出處: http://www.cnblogs.com/sxt-zkys/
QQ技術交流群:299142667
sqoop
Apache Sqoop是用來實現結構型資料(如關聯式資料庫)和Hadoop之間進行資料遷移的工具。它充分利用了MapReduce的並行特點以批處理的方式加快資料的傳輸,同時也藉助MapReduce實現了容錯。
sqoop支援的資料庫:
Database |
version |
--direct support? |
connect string matches |
HSQLDB |
1.8.0+ |
No |
|
MySQL |
5.0+ |
Yes |
jdbc:mysql:// |
Oracle |
10.2.0+ |
No |
|
PostgreSQL |
8.3+ |
Yes (import only) |
jdbc:postgresql:/ |
通過sqoop help命令檢視sqoop幫助
import(將關聯式資料庫遷移到HDFS上)
[例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上的目標目錄。
export(將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 指定在執行前清除中間表。
版權宣告:本文為yunshuxueyuan原創文章。
如需轉載請標明出處: http://www.cnblogs.com/sxt-zkys/
QQ技術交流群:299142667