1、Sqoop是什麼
Sqoop:SQL-to-Hadoop
傳統數據庫與Hadoop間數據同步工具
利用Mapreduce分佈式批處理,加快了數據傳輸速度,保證了容錯性
2、Sqoop1架構
從傳統數據庫獲取元數據信息(schema、table、field、field type),把導入功能轉換爲只有Map的Mapreduce作業,在mapreduce中有很多map,每個map讀一片數據,進而並行的完成數據的拷貝。
獲取導出表的schema、meta信息,和Hadoop中的字段match;多個map only作業同時運行,完成hdfs中數據導出到關係型數據庫中。
3、sqoop1常用用法
1)sqoop import toHDFS:
- sqoop import \
- --connect jdbc:mysql://mysql.example.com/sqoop \
- --username sqoop \
- --password sqoop \
- --table cities
- --where "country = 'USA'"
- --target-dir /etl/input/cities
- --warehouse-dir /etl/input/
- --num-mappers 10
- --null-string '\\N' \
- --null-non-string '\\N'
- --incremental append \
- --check-column id \
- --last-value 1
--connnect: 指定JDBC URL
--username/password:mysql數據庫的用戶名
--table:要讀取的數據庫表
- bin/sqoop import \
- --connect "jdbc:mysql://localhost/mytest" \
- --username "root" \
- --password "aaa" \
- --table "student" \
- --hbase-create-table \
- --hbase-table student \
- --column-family info \
- --hbase-row-key id
- sqoop export \
- --connect jdbc:mysql://mysql.example.com/sqoop \
- --username sqoop \
- --password sqoop \
- --table cities \
- --export-dir cities \
- --input-fields-terminated-by "\001"
- --columns id,name
- --batch
- -Dsqoop.export.records.per.statement=10 //批量更新,每隔10條提交一次
- --staging-table staging_cities //先把數據導入到這個臨時表staging_cities,確定所有導入成功後,一次性重命名爲正確的表,保證原子性
- --update-key id
- --update-mode allowinsert
4、Sqoop1存在的問題
數據傳輸和數據格式是緊耦合的,這使得connector無法支持所有數據格式;
安全密鑰是暴露出來的,非常不安全
Sqoop安裝需要root權限
Connector必須符合JDBC模型,並使用通用的JDBC詞彙
5、常用注意點:
也可以保存成avrodatafile格式,--as-avrodatafile