- 使用幫助
Sqoop help 查看所有的sqoop的幫助
Sqoop help import 查看import命令的幫助
Eg: sqoop導入到HDFS的一個簡單示例:
sqoop import
--connect jdbc:mysql://192.168.56.121:3306/metastore
--username hiveuser
--password redhat
--table TBLS
- 導入到HDFS
Eg:
sqoop import
--connect jdbc:mysql://192.168.56.121:3306/metastore
--username hiveuser
--password redhat
--table TBLS
--target-dir /user/hive/result
注意
:
- mysql jdbc url 請使用 ip 地址
- 如果重複執行,會提示目錄已經存在,可以手動刪除
- 如果不指定 --target-dir,導入到用戶家目錄下的 TBLS 目錄
其他參數說明
參數 |
說明 |
--append |
將數據追加到hdfs中已經存在的dataset中。使用該參數,sqoop將把數據先導入到一個臨時目錄中,然後重新給文件命名到一個正式的目錄中,以避免和該目錄中已存在的文件重名。 |
--as-avrodatafile |
將數據導入到一個Avro數據文件中| |
--as-sequencefile |
將數據導入到一個sequence文件中 |
--as-textfile |
將數據導入到一個普通文本文件中,生成該文本文件後,可以在hive中通過sql語句查詢出結果。 |
--boundary-query <statement> |
邊界查詢,也就是在導入前先通過SQL查詢得到一個結果集,然後導入的數據就是該結果集內的數據,格式如:--boundary-query 'select id,no from t where id = 3',表示導入的數據爲id=3的記錄,或者 select min(<split-by>), max(<split-by>) from <table name>,注意查詢的字段中不能有數據類型爲字符串的字段,否則會報錯 |
--columns<col,col> |
指定要導入的字段值,格式如:--columns id,username |
--direct |
直接導入模式,使用的是關係數據庫自帶的導入導出工具。官網上是說這樣導入會更快 |
--direct-split-size |
在使用上面direct直接導入的基礎上,對導入的流按字節數分塊,特別是使用直連模式從PostgreSQL導入數據的時候,可以將一個到達設定大小的文件分爲幾個獨立的文件。 |
--inline-lob-limit |
設定大對象數據類型的最大值 |
-m,--num-mappers |
啓動N個map來並行導入數據,默認是4個,最好不要將數字設置爲高於集羣的節點數 |
--query,-e <sql> |
從查詢結果中導入數據,該參數使用時必須指定–target-dir、–hive-table,在查詢語句中一定要有where條件且在where條件中需要包含 \$CONDITIONS,示例:--query 'select * from t where \$CONDITIONS ' --target-dir /tmp/t –hive-table t |
--split-by <column> |
表的列名,用來切分工作單元,一般後面跟主鍵ID |
--table <table-name> |
關係數據庫表名,數據從該表中獲取 |
--delete-target-dir |
刪除目標目錄 |
--target-dir <dir> |
指定hdfs路徑 |
--warehouse-dir <dir> |
與 --target-dir 不能同時使用,指定數據導入的存放目錄,適用於hdfs導入,不適合導入hive目錄 |
--where |
從關係數據庫導入數據時的查詢條件,示例:--where "id = 2" |
-z,--compress |
壓縮參數,默認情況下數據是沒被壓縮的,通過該參數可以使用gzip壓縮算法對數據進行壓縮,適用於SequenceFile, text文本文件, 和Avro文件 |
--compression-codec |
Hadoop壓縮編碼,默認是gzip |
--null-string <null-string> |
可選參數,如果沒有指定,則字符串null將被使用 |
--null-non-string <null-string> |
可選參數,如果沒有指定,則字符串null將被使用| |
2.3 創建 hive 表
Eg:
sqoop
create-hive-table
--connect jdbc:mysql://192.168.56.121:3306/metastore
--username hiveuser
--password redhat
--table TBLS
參數 |
說明 |
--hive-home <dir> |
Hive的安裝目錄,可以通過該參數覆蓋掉默認的hive目錄 |
--hive-overwrite |
覆蓋掉在hive表中已經存在的數據 |
--create-hive-table |
默認是false,如果目標表已經存在了,那麼創建任務會失敗 |
--hive-table |
後面接要創建的hive表 |
--table |
指定關係數據庫表名 |
導入數據到 hive
執行下面的命令會將 mysql 中的數據導入到 hdfs 中,然後創建一個hive 表,最後再將 hdfs 上的文件移動到 hive 表的目錄下面。
sqoop import
--connect jdbc:mysql://192.168.56.121:3306/metastore
--username hiveuser --password redhat
--table TBLS
--fields-terminated-by
"\t"
--lines-terminated-by
"\n"
--hive-import
--hive-overwrite
--create-hive-table
--hive-table dw_srclog.TBLS
--delete-target-dir
具體可以參照:https://segmentfault.com/a/1190000002532293
關於sqoop的導出使用從hive中導出到mysql:
Sqoop export
--connect jdbc:mysql://xxxxxx:3306/bbg_real_data?characterEncoding=utf-8
--username root #表示數據庫用戶名
--password root #表示數據庫密碼
--table deal_data #表示數據表名
--hcatalog-database default #hive中的數據庫名
--hcatalog-table deal_bbg_data_2 #表示hive中的表名
注意導出的時候,mysql的字段名要和hive裏面的字段名一樣,這樣才能對應的導入和導出。字段類型也要一樣,我全部都是varchar(40)。
Mysql表明和字段名不能是關鍵字例如:all等等
Hive tutorrials
- Create schema/table
Create schema[table] schema_name/table_name
- Delete schema/table
Drop database[table] if exists database_name[table_name]
Detail please look at as follow:
http://www.yiibai.com/hive/hive_drop_table.html