sqoop框架原理及基本操作

1、Sqoop是什麼

Sqoop:SQL-to-Hadoop

傳統數據庫與Hadoop間數據同步工具

利用Mapreduce分佈式批處理,加快了數據傳輸速度,保證了容錯性

2、Sqoop1架構


sqoop1 import原理:
從傳統數據庫獲取元數據信息(schema、table、field、field type),把導入功能轉換爲只有Map的Mapreduce作業,在mapreduce中有很多map,每個map讀一片數據,進而並行的完成數據的拷貝。
sqoop1 export原理:
獲取導出表的schema、meta信息,和Hadoop中的字段match;多個map only作業同時運行,完成hdfs中數據導出到關係型數據庫中。

3、sqoop1常用用法

 1)sqoop import toHDFS:

[plain] view plaincopy在CODE上查看代碼片派生到我的代碼片
  1. sqoop import \    
  2. --connect jdbc:mysql://mysql.example.com/sqoop \    
  3. --username sqoop \    
  4. --password sqoop \    
  5. --table cities    
  6. --where "country = 'USA'"    
  7. --target-dir /etl/input/cities    
  8. --warehouse-dir /etl/input/    
  9. --num-mappers 10    
  10. --null-string '\\N' \    
  11. --null-non-string '\\N'    
  12. --incremental append \     
  13. --check-column id \     
  14. --last-value 1  
說明:
--connnect: 指定JDBC URL
--username/password:mysql數據庫的用戶名
--table:要讀取的數據庫表
--where:導入數據的過濾條件
--target-dir:HDFS中導入表的存放目錄
--warehouse-dir:指定表存放的父目錄,只需要指定一次,下次存放時會在該目錄下自動以該表名命名
--num-mappers:併發的map數
--null-string:null值時,HDFS存儲爲N
--null-non-string:非字符類型的字段爲空時,存儲爲N
--incremental append或lastmodified:自動增量方式
--check-column
--last-value:上一次導入的最後一個值

2) sqoop import to Hbase
[plain] view plaincopy在CODE上查看代碼片派生到我的代碼片
  1. bin/sqoop import  \  
  2. --connect "jdbc:mysql://localhost/mytest"  \  
  3. --username "root"  \  
  4. --password "aaa"  \  
  5. --table "student"  \  
  6. --hbase-create-table  \  
  7. --hbase-table student  \  
  8. --column-family info  \  
  9. --hbase-row-key id  
3)sqoop export
[plain] view plaincopy在CODE上查看代碼片派生到我的代碼片
  1. sqoop export \   
  2. --connect jdbc:mysql://mysql.example.com/sqoop \   
  3. --username sqoop \   
  4. --password sqoop \   
  5. --table cities \   
  6. --export-dir cities \  
  7. --input-fields-terminated-by "\001"   
  8. --columns id,name  
  9. --batch  
  10. -Dsqoop.export.records.per.statement=10  //批量更新,每隔10條提交一次  
  11. --staging-table staging_cities  //先把數據導入到這個臨時表staging_cities,確定所有導入成功後,一次性重命名爲正確的表,保證原子性  
  12. --update-key id  
  13. --update-mode allowinsert  

4、Sqoop1存在的問題

基於命令行的操作方式易於出錯,且不安全;
數據傳輸和數據格式是緊耦合的,這使得connector無法支持所有數據格式;
安全密鑰是暴露出來的,非常不安全
Sqoop安裝需要root權限
Connector必須符合JDBC模型,並使用通用的JDBC詞彙

5、常用注意點:

密碼保護方法:1)加參數-P,執行時要求終端輸入
2)參數--password-file my-sqoop-password,指定密碼文件的路徑,密碼防到文件,文件只讀,只有自己可讀的

非文本導入,比如圖片、視頻等,使用--as-sequencefile以sequencefile保存到HDFS上
也可以保存成avrodatafile格式,--as-avrodatafile

6、參考

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章