Sqoop是關係型數據庫(MySQL/Postgresql)和HDFS(Hive/HDFS文件)進行交互的一個工具.
Sqoop import 就是從關係型數據庫導入到基於HDFS的數據庫.
Sqoop export 就是從基於HDFS的數據庫導出到關係型數據庫.
Note: Sqoop export 是直接把導出HDFS文件. 如果創建分區表, 那麼每個分區表都有對應的HDFS文件, 每個文件都要導出一次.
舉一個從Postgresql導入Hive的Demo:
sqoop import \
"-Dorg.apache.sqoop.splitter.allow_text_splitter=true" \
--connect jdbc:postgresql://192.168.0.222:5432/ocm?currentSchema=sftm_km \
--username postgres \
--password password \
--table dmsdatasearch_v1_getdmssalesorderinfos_head \
--hive-database ods_sftm \
--hive-table ods_orders_dt_head \
--hive-import \
--fields-terminated-by '\001' \
--hive-drop-import-delims \
--lines-terminated-by '\n' \
--delete-target-dir \
-- -Dorg.apache.sqoop.splitter.allow_text_splitter=true \
--split-by split_id \
-m 5
舉一個從Postgresql導入Hive的Demo:
sqoop export \
--connect jdbc:postgresql://192.168.0.222:5432/ocm?currentSchema=sftm_km \
--username postgres \
--password password \
--table order_dt_head \
--export-dir "hdfs://namenode.gaialab.ai:8020/warehouse/tablespace/managed/hive/ods_sftm.db/ods_orders_dt_head_tmp/*" \
--input-fields-terminated-by '\001' \
--lines-terminated-by '\n' \
--input-null-string '\\N' \
--input-null-non-string '\\N' \
-m 5
sqoop常用命令:
命令 | 描述 |
---|---|
--connect <jdbc-uri> | 連接字符串 |
--help | show各個命令的含義 |
--password <password> | 數據庫密碼 |
--username <username> | 數據庫賬號 |
--delete-target-dir | 導入數據前刪除目標路徑 |
-e,--query <statement> | 可以用sql語句指定需要導入的數據 |
-m,--num-mappers <n> | 並行多少個任務執行導入 |
--split-by <column-name> | 如果-m > 1, 則需要指定該列用於導入 |
--table <table-name> |
需要導入的表 |
--target-dir <dir> | 目標路徑 |
--check-column <column> | Source column to check for incremental change(增量導入相關) |
--incremental <import-type> | Define an incremental import of type 'append' or 'lastmodified'(增量導入相關) |
--last-value <value> | Last imported value in the incremental check column(增量導入相關) |
--create-hive-table | 創建hive表, 結構和導入表一樣, 但是類型都是string.如果創建的表存在, 就會報錯. |
--external-table-dir <hdfs path> | hive外部表HDFS路徑 |
--hive-database <database-name> | Hive數據庫 |
--hive-import | 數據導入hive中而不是hdfs(其實導入hive本質也是hdfs) |
--hive-overwrite | 覆寫hive表 |
--hive-table <table-name> | hive 表名稱 |
篇幅所限, 不能列出所有的命令行.
大家可以通過sqoop help查看.
也可以通過sqoop官網查看.
sqoop命令行整理:https://github.com/MichaelZys/hello-word/blob/master/sqoop.xlsx