常用命令列舉
這里給大家列出來了一部分Sqoop操作時的常用參數澄港,以供參考老厌,需要深入學習的可以參看對應類的源代碼劣纲。
命令 | 類 | 說明 |
---|---|---|
import | ImportTool | 將數據導入到集群 |
export | ExportTool | 將集群數據導出 |
codegen | CodeGenTool | 獲取數據庫中某張表數據生成Java并打包Jar |
create-hive-table | CreateHiveTableTool | 創(chuàng)建Hive表 |
eval | EvalSqlTool | 查看SQL執(zhí)行結果 |
import-all-tables | ImportAllTablesTool | 導入某個數據庫下所有表到HDFS中 |
job | JobTool | 用來生成一個sqoop的任務,生成后田轧,該任務并不執(zhí)行歹鱼,除非使用命令執(zhí)行該任務比藻。 |
list-databases | ListDatabasesTool | 列出所有數據庫名 |
list-tables | ListTablesTool | 列出某個數據庫下所有表 |
merge | MergeTool | 將HDFS中不同目錄下面的數據合在一起边琉,并存放在指定的目錄中 |
metastore | MetastoreTool | 記錄sqoop job的元數據信息绿语,如果不啟動metastore實例秃症,則默認的元數據存儲目錄為:~/.sqoop,如果要更改存儲目錄吕粹,可以在配置文件sqoop-site.xml中進行更改伍纫。 |
help | HelpTool | 打印sqoop幫助信息 |
version | VersionTool | 打印sqoop版本信息 |
命令&參數詳解
剛才列舉了一些Sqoop的常用命令,對于不同的命令昂芜,有不同的參數,讓我們來一一列舉說明赔蒲。
首先來我們來介紹一下公用的參數泌神,所謂公用參數,就是大多數命令都支持的參數舞虱。
公用參數:數據庫連接
參數 | 說明 |
---|---|
--connect | 連接關系型數據庫的URL |
--connection-manager | 指定要使用的連接管理類 |
--driver | Hadoop根目錄 |
--help | 打印幫助信息 |
--password | 連接數據庫的密碼 |
--username | 連接數據庫的用戶名 |
--verbose | 在控制臺打印出詳細信息 |
公用參數:import
參數 | 說明 |
---|---|
--enclosed-by <char> | 給字段值前加上指定的字符 |
--escaped-by <char> | 對字段中的雙引號加轉義符 |
--fields-terminated-by <char> | 設定每個字段是以什么符號作為結束欢际,默認為逗號 |
--lines-terminated-by <char> | 設定每行記錄之間的分隔符,默認是\n |
--mysql-delimiters | Mysql默認的分隔符設置矾兜,字段之間以逗號分隔损趋,行之間以\n分隔,默認轉義符是\椅寺,字段值以單引號包裹浑槽。 |
--optionally-enclosed-by <char> | 給帶有雙引號或單引號的字段值前后加上指定字符。 |
公用參數:export
參數 | 說明 |
---|---|
--input-enclosed-by <char> | 對字段值前后加上指定字符 |
--input-escaped-by <char> | 對含有轉移符的字段做轉義處理 |
--input-fields-terminated-by <char> | 字段之間的分隔符 |
--input-lines-terminated-by <char> | 行之間的分隔符 |
--input-optionally-enclosed-by <char> | 給帶有雙引號或單引號的字段前后加上指定字符 |
公用參數:hive
參數 | 說明 |
---|---|
--hive-delims-replacement <arg> | 用自定義的字符串替換掉數據中的\r\n和\013 \010等字符 |
--hive-drop-import-delims | 在導入數據到hive時返帕,去掉數據中的\r\n\013\010這樣的字符 |
--map-column-hive <arg> | 生成hive表時桐玻,可以更改生成字段的數據類型 |
--hive-partition-key | 創(chuàng)建分區(qū),后面直接跟分區(qū)名荆萤,分區(qū)字段的默認類型為string |
--hive-partition-value <v> | 導入數據時镊靴,指定某個分區(qū)的值 |
--hive-home <dir> | hive的安裝目錄,可以通過該參數覆蓋之前默認配置的目錄 |
--hive-import | 將數據從關系數據庫中導入到hive表中 |
--hive-overwrite | 覆蓋掉在hive表中已經存在的數據 |
--create-hive-table | 默認是false链韭,即偏竟,如果目標表已經存在了,那么創(chuàng)建任務失敗敞峭。 |
--hive-table | 后面接要創(chuàng)建的hive表,默認使用MySQL的表名 |
--table | 指定關系數據庫的表名 |
公用參數介紹完之后踊谋,我們來按照命令介紹命令對應的特有參數。
命令&參數:import
將關系型數據庫中的數據導入到HDFS(包括Hive旋讹,HBase)中褪子,如果導入的是Hive量淌,那么當Hive中沒有對應表時,則自動創(chuàng)建嫌褪。
- 命令:
如:導入數據到hive中
$ bin/sqoop import \
--connect jdbc:mysql://hadoop102:3306/company \
--username root \
--password 000000 \
--table staff \
--hive-import
如:增量導入數據到hive中呀枢,mode=append
append導入:
$ bin/sqoop import \
--connect jdbc:mysql://hadoop102:3306/company \
--username root \
--password 000000 \
--table staff \
--num-mappers 1 \
--fields-terminated-by "\t" \
--target-dir /user/hive/warehouse/staff_hive \
--check-column id \
--incremental append \
--last-value 3
尖叫提示:append不能與--hive-等參數同時使用(Append mode for hive imports is not yet supported. Please remove the parameter --append-mode)
如:增量導入數據到hdfs中,mode=lastmodified
先在mysql中建表并插入幾條數據:
mysql> create table company.staff_timestamp(id int(4), name varchar(255), sex varchar(255), last_modified timestamp DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP);
mysql> insert into company.staff_timestamp (id, name, sex) values(1, 'AAA', 'female');
mysql> insert into company.staff_timestamp (id, name, sex) values(2, 'BBB', 'female');
先導入一部分數據:
$ bin/sqoop import \
--connect jdbc:mysql://hadoop102:3306/company \
--username root \
--password 000000 \
--table staff_timestamp \
--delete-target-dir \
--m 1
再增量導入一部分數據:
mysql> insert into company.staff_timestamp (id, name, sex) values(3, 'CCC', 'female');
$ bin/sqoop import \
--connect jdbc:mysql://hadoop102:3306/company \
--username root \
--password 000000 \
--table staff_timestamp \
--check-column last_modified \
--incremental lastmodified \
--last-value "2017-09-28 22:20:38" \
--m 1 \
--append
尖叫提示:使用lastmodified方式導入數據要指定增量數據是要--append(追加)還是要--merge-key(合并)
尖叫提示:last-value指定的值是會包含于增量導入的數據中
- 參數:
參數 | 說明 |
---|---|
--append | 將數據追加到HDFS中已經存在的DataSet中笼痛,如果使用該參數裙秋,sqoop會把數據先導入到臨時文件目錄,再合并缨伊。 |
--as-avrodatafile | 將數據導入到一個Avro數據文件中 |
--as-sequencefile | 將數據導入到一個sequence文件中 |
--as-textfile | 將數據導入到一個普通文本文件中 |
--boundary-query <statement> | 邊界查詢摘刑,導入的數據為該參數的值(一條sql語句)所執(zhí)行的結果區(qū)間內的數據。 |
--columns <col1, col2, col3> | 指定要導入的字段 |
--direct | 直接導入模式刻坊,使用的是關系數據庫自帶的導入導出工具枷恕,以便加快導入導出過程。 |
--direct-split-size | 在使用上面direct直接導入的基礎上谭胚,對導入的流按字節(jié)分塊徐块,即達到該閾值就產生一個新的文件 |
--inline-lob-limit | 設定大對象數據類型的最大值 |
--m或–num-mappers | 啟動N個map來并行導入數據,默認4個灾而。 |
--query或--e <statement> | 將查詢結果的數據導入胡控,使用時必須伴隨參--target-dir,--hive-table旁趟,如果查詢中有where條件昼激,則條件后必須加上$CONDITIONS關鍵字 |
--split-by <column-name> | 按照某一列來切分表的工作單元,不能與--autoreset-to-one-mapper連用(請參考官方文檔) |
--table <table-name> | 關系數據庫的表名 |
--target-dir <dir> | 指定HDFS路徑 |
--warehouse-dir <dir> | 與--target-dir <dir>參數不能同時使用锡搜,導入數據到HDFS時指定的目錄 |
--where | 從關系數據庫導入數據時的查詢條件 |
--z或--compress | 允許壓縮 |
--compression-codec | 指定hadoop壓縮編碼類橙困,默認為gzip(Use Hadoop codec default gzip) |
--null-string <null-string> | string類型的列如果null,替換為指定字符串 |
--null-non-string <null-string> | 非string類型的列如果null耕餐,替換為指定字符串 |
--check-column <col> | 作為增量導入判斷的列名 |
--incremental <mode> | mode:append或lastmodified |
--last-value <value> | 指定某一個值纷宇,用于標記增量導入的位置 |
命令&參數:export
從HDFS(包括Hive和HBase)中獎數據導出到關系型數據庫中。
- 命令:
如:
$ bin/sqoop export \
--connect jdbc:mysql://hadoop102:3306/company \
--username root \
--password 000000 \
--table staff \
--export-dir /user/company \
--input-fields-terminated-by "\t" \
--num-mappers 1
- 參數:
參數 | 說明 |
---|---|
--direct | 利用數據庫自帶的導入導出工具蛾方,以便于提高效率 |
--export-dir <dir> | 存放數據的HDFS的源目錄 |
-m或--num-mappers <n> | 啟動N個map來并行導入數據像捶,默認4個 |
--table <table-name> | 指定導出到哪個RDBMS中的表 |
--update-key <col-name> | 對某一列的字段進行更新操作 |
--update-mode <mode> | updateonly allowinsert(默認) |
--input-null-string <null-string> | 請參考import該類似參數說明 |
--input-null-non-string <null-string> | 請參考import該類似參數說明 |
--staging-table <staging-table-name> | 創(chuàng)建一張臨時表,用于存放所有事務的結果桩砰,然后將所有事務結果一次性導入到目標表中拓春,防止錯誤。 |
--clear-staging-table | 如果--staging-table <staging-table-name>參數非空亚隅,則可以在導出操作執(zhí)行前硼莽,清空臨時事務結果表 |
命令&參數:codegen
將關系型數據庫中的表映射為一個Java類,在該類中有各列對應的各個字段。
如:
$ bin/sqoop codegen \
--connect jdbc:mysql://hadoop102:3306/company \
--username root \
--password 000000 \
--table staff \
--bindir /home/admin/Desktop/staff \
--class-name Staff \
--fields-terminated-by "\t"
參數 | 說明 |
---|---|
--bindir <dir> | 指定生成的Java文件懂鸵、編譯成的class文件及將生成文件打包為jar的文件輸出路徑 |
--class-name <name> | 設定生成的Java文件指定的名稱 |
--outdir <dir> | 生成Java文件存放的路徑 |
--package-name <name> | 包名偏螺,如com.z,就會生成com和z兩級目錄 |
--input-null-non-string <null-str> | 在生成的Java文件中匆光,可以將null字符串或者不存在的字符串設置為想要設定的值(例如空字符串) |
--input-null-string <null-str> | 將null字符串替換成想要替換的值(一般與5同時使用) |
--map-column-java <arg> | 數據庫字段在生成的Java文件中會映射成各種屬性套像,且默認的數據類型與數據庫類型保持對應關系。該參數可以改變默認類型终息,例如:--map-column-java id=long, name=String |
--null-non-string <null-str> | 在生成Java文件時夺巩,可以將不存在或者null的字符串設置為其他值 |
--null-string <null-str> | 在生成Java文件時,將null字符串設置為其他值(一般與--null-non-string <null-str>同時使用) |
--table <table-name> | 對應關系數據庫中的表名周崭,生成的Java文件中的各個屬性與該表的各個字段一一對應 |
命令&參數:create-hive-table
生成與關系數據庫表結構對應的hive表結構柳譬。
命令:
如:
$ bin/sqoop create-hive-table \
--connect jdbc:mysql://hadoop102:3306/company \
--username root \
--password 000000 \
--table staff \
--hive-table hive_staff
參數 | 說明 |
---|---|
--hive-home <dir> | Hive的安裝目錄,可以通過該參數覆蓋掉默認的Hive目錄 |
--hive-overwrite | 覆蓋掉在Hive表中已經存在的數據 |
--create-hive-table | 默認是false续镇,如果目標表已經存在了美澳,那么創(chuàng)建任務會失敗 |
--hive-table | 后面接要創(chuàng)建的hive表 |
--table | 指定關系數據庫的表名 |
命令&參數:eval
可以快速的使用SQL語句對關系型數據庫進行操作,經常用于在import數據之前摸航,了解一下SQL語句是否正確制跟,數據是否正常,并可以將結果顯示在控制臺忙厌。
命令:
如:
$ bin/sqoop eval \
--connect jdbc:mysql://hadoop102:3306/company \
--username root \
--password 000000 \
--query "SELECT * FROM staff"
參數:
參數 | 說明 |
---|---|
--query或--e | 后跟查詢的SQL語句 |
命令&參數:import-all-tables
可以將RDBMS中的所有表導入到HDFS中,每一個表都對應一個HDFS目錄
命令:
如:
$ bin/sqoop import-all-tables \
--connect jdbc:mysql://hadoop102:3306/company \
--username root \
--password 000000 \
--warehouse-dir /all_tables
參數 | 說明 |
---|---|
--as-avrodatafile | 這些參數的含義均和import對應的含義一致 |
--as-sequencefile | |
--as-textfile | |
--direct | |
--direct-split-size <n> | |
--inline-lob-limit <n> | |
--m或—num-mappers <n> | |
--warehouse-dir <dir> | |
-z或--compress | |
--compression-codec |
命令&參數:job
用來生成一個sqoop任務江咳,生成后不會立即執(zhí)行逢净,需要手動執(zhí)行。
命令:
如:
$ bin/sqoop job \
--create myjob -- import-all-tables \
--connect jdbc:mysql://hadoop102:3306/company \
--username root \
--password 000000
$ bin/sqoop job \
--list
$ bin/sqoop job \
--exec myjob
尖叫提示:注意import-all-tables和它左邊的--之間有一個空格
尖叫提示:如果需要連接metastore歼指,則--meta-connect jdbc:hsqldb:hsql://linux01:16000/sqoop
參數:
參數 | 說明 |
---|---|
--create <job-id> | 創(chuàng)建job參數 |
--delete <job-id> | 刪除一個job |
--exec <job-id> | 執(zhí)行一個job |
--help | 顯示job幫助 |
--list | 顯示job列表 |
--meta-connect <jdbc-uri> | 用來連接metastore服務 |
--show <job-id> | 顯示一個job的信息 |
--verbose | 打印命令運行時的詳細信息 |
尖叫提示:在執(zhí)行一個job時爹土,如果需要手動輸入數據庫密碼,可以做如下優(yōu)化
<property>
<name>sqoop.metastore.client.record.password</name>
<value>true</value>
<description>If true, allow saved passwords in the metastore.</description>
</property>
命令&參數:list-databases
命令:
如:
$ bin/sqoop list-databases \
--connect jdbc:mysql://hadoop102:3306/ \
--username root \
--password 000000
參數:與公用參數一樣
命令&參數:list-tables
命令:
如:
$ bin/sqoop list-tables \
--connect jdbc:mysql://hadoop102:3306/company \
--username root \
--password 000000
參數:與公用參數一樣
命令&參數:merge
將HDFS中不同目錄下面的數據合并在一起并放入指定目錄中
數據環(huán)境:
new_staff
1 AAA male
2 BBB male
3 CCC male
4 DDD male
old_staff
1 AAA female
2 CCC female
3 BBB female
6 DDD female
尖叫提示:上邊數據的列之間的分隔符應該為\t踩身,行與行之間的分割符為\n胀茵,如果直接復制,請檢查之挟阻。
命令:
如:
創(chuàng)建JavaBean:
$ bin/sqoop codegen \
--connect jdbc:mysql://hadoop102:3306/company \
--username root \
--password 000000 \
--table staff \
--bindir /home/admin/Desktop/staff \
--class-name Staff \
--fields-terminated-by "\t"
開始合并:
$ bin/sqoop merge \
--new-data /test/new/ \
--onto /test/old/ \
--target-dir /test/merged \
--jar-file /home/admin/Desktop/staff/Staff.jar \
--class-name Staff \
--merge-key id
結果:
1 AAA MALE
2 BBB MALE
3 CCC MALE
4 DDD MALE
6 DDD FEMALE
參數:
參數 | 說明 |
---|---|
--new-data <path> | HDFS 待合并的數據目錄琼娘,合并后在新的數據集中保留 |
--onto <path> | HDFS合并后,重復的部分在新的數據集中被覆蓋 |
--merge-key <col> | 合并鍵附鸽,一般是主鍵ID |
--jar-file <file> | 合并時引入的jar包脱拼,該jar包是通過Codegen工具生成的jar包 |
--class-name <class> | 對應的表名或對象名,該class類是包含在jar包中的 |
--target-dir <path> | 合并后的數據在HDFS里存放的目錄 |
命令&參數:metastore
記錄了Sqoop job的元數據信息坷备,如果不啟動該服務熄浓,那么默認job元數據的存儲目錄為~/.sqoop,可在sqoop-site.xml中修改省撑。
命令:
如:啟動sqoop的metastore服務
$ bin/sqoop metastore
參數:
參數 | 說明 |
---|---|
--shutdown | 關閉metastore |
簡書:http://www.reibang.com/u/0278602aea1d
CSDN:https://blog.csdn.net/u012387141