Sqoop一些常用命令及參數

常用命令列舉

這里給大家列出來了一部分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)建嫌褪。

  1. 命令:
    如:導入數據到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指定的值是會包含于增量導入的數據中

  1. 參數:
參數 說明
--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)中獎數據導出到關系型數據庫中。

  1. 命令:
    如:
$ 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
  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

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末赌蔑,一起剝皮案震驚了整個濱河市俯在,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌娃惯,老刑警劉巖跷乐,帶你破解...
    沈念sama閱讀 216,997評論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異石景,居然都是意外死亡劈猿,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,603評論 3 392
  • 文/潘曉璐 我一進店門潮孽,熙熙樓的掌柜王于貴愁眉苦臉地迎上來揪荣,“玉大人,你說我怎么就攤上這事往史≌叹保” “怎么了?”我有些...
    開封第一講書人閱讀 163,359評論 0 353
  • 文/不壞的土叔 我叫張陵椎例,是天一觀的道長挨决。 經常有香客問我,道長订歪,這世上最難降的妖魔是什么脖祈? 我笑而不...
    開封第一講書人閱讀 58,309評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮刷晋,結果婚禮上盖高,老公的妹妹穿的比我還像新娘。我一直安慰自己眼虱,他們只是感情好喻奥,可當我...
    茶點故事閱讀 67,346評論 6 390
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著捏悬,像睡著了一般撞蚕。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上过牙,一...
    開封第一講書人閱讀 51,258評論 1 300
  • 那天甥厦,我揣著相機與錄音,去河邊找鬼寇钉。 笑死矫渔,一個胖子當著我的面吹牛,可吹牛的內容都是我干的摧莽。 我是一名探鬼主播庙洼,決...
    沈念sama閱讀 40,122評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了油够?” 一聲冷哼從身側響起蚁袭,我...
    開封第一講書人閱讀 38,970評論 0 275
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎石咬,沒想到半個月后揩悄,有當地人在樹林里發(fā)現(xiàn)了一具尸體,經...
    沈念sama閱讀 45,403評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡鬼悠,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,596評論 3 334
  • 正文 我和宋清朗相戀三年删性,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片焕窝。...
    茶點故事閱讀 39,769評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡蹬挺,死狀恐怖,靈堂內的尸體忽然破棺而出它掂,到底是詐尸還是另有隱情巴帮,我是刑警寧澤,帶...
    沈念sama閱讀 35,464評論 5 344
  • 正文 年R本政府宣布虐秋,位于F島的核電站榕茧,受9級特大地震影響,放射性物質發(fā)生泄漏客给。R本人自食惡果不足惜用押,卻給世界環(huán)境...
    茶點故事閱讀 41,075評論 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望靶剑。 院中可真熱鬧蜻拨,春花似錦、人聲如沸抬虽。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,705評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽阐污。三九已至,卻和暖如春咱圆,著一層夾襖步出監(jiān)牢的瞬間笛辟,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,848評論 1 269
  • 我被黑心中介騙來泰國打工序苏, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留手幢,地道東北人。 一個月前我還...
    沈念sama閱讀 47,831評論 2 370
  • 正文 我出身青樓忱详,卻偏偏與公主長得像围来,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,678評論 2 354