本文檔主要對SQOOP的使用進(jìn)行了說明,參考內(nèi)容主要來自于Cloudera SQOOP的官方文檔。為了用中文更清楚明白地描述各參數(shù)的使用含義,本文檔幾乎所有參數(shù)使用說明都經(jīng)過了我的實際驗證而得到。
成都創(chuàng)新互聯(lián)公司主要從事成都網(wǎng)站建設(shè)、網(wǎng)站建設(shè)、網(wǎng)頁設(shè)計、企業(yè)做網(wǎng)站、公司建網(wǎng)站等業(yè)務(wù)。立足成都服務(wù)武穴,10余年網(wǎng)站建設(shè)經(jīng)驗,價格優(yōu)惠、服務(wù)專業(yè),歡迎來電咨詢建站服務(wù):028-86922220
將關(guān)系數(shù)據(jù)庫表映射為一個java文件、java class類、以及相關(guān)的jar包,作用主要是兩方面:
1、 將數(shù)據(jù)庫表映射為一個Java文件,在該Java文件中對應(yīng)有表的各個字段。
2、 生成的Jar和class文件在metastore功能使用時會用到。
基礎(chǔ)語句:
sqoop codegen –connect jdbc:MySQL://localhost:3306/hive –username root –password 123456 –table TBLS2
參數(shù) | 說明 |
–bindir <dir> | 指定生成的java文件、編譯成的class文件及將生成文件打包為JAR的JAR包文件輸出路徑 |
–class-name <name> | 設(shè)定生成的Java文件指定的名稱 |
–outdir <dir> | 生成的java文件存放路徑 |
–package-name<name> | 包名,如cn.cnnic,則會生成cn和cnnic兩級目錄,生成的文件(如java文件)就存放在cnnic目錄里 |
–input-null-non-string<null-str> | 在生成的java文件中,可以將null字符串設(shè)為想要設(shè)定的值(比如空字符串’’) |
–input-null-string<null-str> | 同上,設(shè)定時,最好與上面的屬性一起設(shè)置,且設(shè)置同樣的值(比如空字符串等等)。 |
–map-column-java<arg> | 數(shù)據(jù)庫字段在生成的java文件中會映射為各種屬性,且默認(rèn)的數(shù)據(jù)類型與數(shù)據(jù)庫類型保持對應(yīng),比如數(shù)據(jù)庫中某字段的類型為bigint,則在Java文件中的數(shù)據(jù)類型為long型,通過這個屬性,可以改變數(shù)據(jù)庫字段在java中映射的數(shù)據(jù)類型,格式如:–map-column-java DB_ID=String,id=Integer |
–null-non-string<null-str> | 在生成的java文件中,比如TBL_ID==null?”null”:””,通過這個屬性設(shè)置可以將null字符串設(shè)置為其它值如ddd,TBL_ID==null?”ddd”:”” |
–null-string<null-str> | 同上,使用的時候最好和上面的屬性一起用,且設(shè)置為相同的值 |
–table <table-name> | 對應(yīng)關(guān)系數(shù)據(jù)庫的表名,生成的java文件中的各屬性與該表的各字段一一對應(yīng)。 |
生成與關(guān)系數(shù)據(jù)庫表的表結(jié)構(gòu)對應(yīng)的HIVE表
基礎(chǔ)語句:
sqoop create-hive-table –connect jdbc:mysql://localhost:3306/hive -username root -password 123456 –table TBLS –hive-table h_tbls2
參數(shù) | 說明 |
–hive-home <dir> | Hive的安裝目錄,可以通過該參數(shù)覆蓋掉默認(rèn)的hive目錄 |
–hive-overwrite | 覆蓋掉在hive表中已經(jīng)存在的數(shù)據(jù) |
–create-hive-table | 默認(rèn)是false,如果目標(biāo)表已經(jīng)存在了,那么創(chuàng)建任務(wù)會失敗 |
–hive-table | 后面接要創(chuàng)建的hive表 |
–table | 指定關(guān)系數(shù)據(jù)庫表名 |
可以快速地使用SQL語句對關(guān)系數(shù)據(jù)庫進(jìn)行操作,這可以使得在使用import這種工具進(jìn)行數(shù)據(jù)導(dǎo)入的時候,可以預(yù)先了解相關(guān)的SQL語句是否正確,并能將結(jié)果顯示在控制臺。
查詢示例:
sqoop eval –connect jdbc:mysql://localhost:3306/hive -username root -password 123456 -query “SELECT * FROM tbls LIMIT 10”
數(shù)據(jù)插入示例:
sqoop eval –connect jdbc:mysql://localhost:3306/hive -username root -password 123456 -e “INSERT INTO TBLS2
VALUES(100,1375170308,1,0,’hadoop’,0,1,’guest’,’MANAGED_TABLE’,’abc’,’ddd’)”
-e、-query這兩個參數(shù)經(jīng)過測試,比如后面分別接查詢和插入SQL語句,皆可運行無誤,如上。
從hdfs中導(dǎo)數(shù)據(jù)到關(guān)系數(shù)據(jù)庫中
sqoop export –connect jdbc:mysql://localhost:3306/hive –username root –password
123456 –table TBLS2 –export-dir sqoop/test
參數(shù) | 說明 |
–direct | 快速模式,利用了數(shù)據(jù)庫的導(dǎo)入工具,如mysql的mysqlimport,可以比jdbc連接的方式更為高效的將數(shù)據(jù)導(dǎo)入到關(guān)系數(shù)據(jù)庫中。 |
–export-dir <dir> | 存放數(shù)據(jù)的HDFS的源目錄 |
-m,–num-mappers <n> | 啟動N個map來并行導(dǎo)入數(shù)據(jù),默認(rèn)是4個,最好不要將數(shù)字設(shè)置為高于集群的最大Map數(shù) |
–table <table-name> | 要導(dǎo)入到的關(guān)系數(shù)據(jù)庫表 |
–update-key <col-name> | 后面接條件列名,通過該參數(shù),可以將關(guān)系數(shù)據(jù)庫中已經(jīng)存在的數(shù)據(jù)進(jìn)行更新操作,類似于關(guān)系數(shù)據(jù)庫中的update操作 |
–update-mode <mode> | 更新模式,有兩個值updateonly和默認(rèn)的allowinsert,該參數(shù)只能是在關(guān)系數(shù)據(jù)表里不存在要導(dǎo)入的記錄時才能使用,比如要導(dǎo)入的hdfs中有一條id=1的記錄,如果在表里已經(jīng)有一條記錄id=2,那么更新會失敗。 |
–input-null-string <null-string> | 可選參數(shù),如果沒有指定,則字符串null將被使用 |
–input-null-non-string <null-string> | 可選參數(shù),如果沒有指定,則字符串null將被使用 |
–staging-table <staging-table-name> | 該參數(shù)是用來保證在數(shù)據(jù)導(dǎo)入關(guān)系數(shù)據(jù)庫表的過程中事務(wù)安全性的,因為在導(dǎo)入的過程中可能會有多個事務(wù),那么一個事務(wù)失敗會影響到其它事務(wù),比如導(dǎo)入的數(shù)據(jù)會出現(xiàn)錯誤或出現(xiàn)重復(fù)的記錄等等情況,那么通過該參數(shù)可以避免這種情況。創(chuàng)建一個與導(dǎo)入目標(biāo)表同樣的數(shù)據(jù)結(jié)構(gòu),保留該表為空在運行數(shù)據(jù)導(dǎo)入前,所有事務(wù)會將結(jié)果先存放在該表中,然后最后由該表通過一次事務(wù)將結(jié)果寫入到目標(biāo)表中。 |
–clear-staging-table | 如果該staging-table非空,則通過該參數(shù)可以在運行導(dǎo)入前清除staging-table里的數(shù)據(jù)。 |
–batch | 該模式用于執(zhí)行基本語句(暫時還不太清楚含義) |
將數(shù)據(jù)庫表的數(shù)據(jù)導(dǎo)入到hive中,如果在hive中沒有對應(yīng)的表,則自動生成與數(shù)據(jù)庫表名相同的表。
sqoop import –connect jdbc:mysql://localhost:3306/hive –username root –password
123456 –table user –split-by id –hive-import
–split-by指定數(shù)據(jù)庫表中的主鍵字段名,在這里為id。
參數(shù) | 說明 |
–append | 將數(shù)據(jù)追加到hdfs中已經(jīng)存在的dataset中。使用該參數(shù),sqoop將把數(shù)據(jù)先導(dǎo)入到一個臨時目錄中,然后重新給文件命名到一個正式的目錄中,以避免和該目錄中已存在的文件重名。 |
–as-avrodatafile | 將數(shù)據(jù)導(dǎo)入到一個Avro數(shù)據(jù)文件中 |
–as-sequencefile | 將數(shù)據(jù)導(dǎo)入到一個sequence文件中 |
–as-textfile | 將數(shù)據(jù)導(dǎo)入到一個普通文本文件中,生成該文本文件后,可以在hive中通過sql語句查詢出結(jié)果。 |
–boundary-query <statement> | 邊界查詢,也就是在導(dǎo)入前先通過SQL查詢得到一個結(jié)果集,然后導(dǎo)入的數(shù)據(jù)就是該結(jié)果集內(nèi)的數(shù)據(jù),格式如:–boundary-query ‘select id,creationdate from person where id = 3’,表示導(dǎo)入的數(shù)據(jù)為id=3的記錄,或者select min(<split-by>), max(<split-by>) from <table name>,注意查詢的字段中不能有數(shù)據(jù)類型為字符串的字段,否則會報錯:java.sql.SQLException: Invalid value for getLong() 目前問題原因還未知
|
–columns<col,col,col…> | 指定要導(dǎo)入的字段值,格式如:–columns id,username |
–direct | 直接導(dǎo)入模式,使用的是關(guān)系數(shù)據(jù)庫自帶的導(dǎo)入導(dǎo)出工具。官網(wǎng)上是說這樣導(dǎo)入會更快 |
–direct-split-size | 在使用上面direct直接導(dǎo)入的基礎(chǔ)上,對導(dǎo)入的流按字節(jié)數(shù)分塊,特別是使用直連模式從PostgreSQL導(dǎo)入數(shù)據(jù)的時候,可以將一個到達(dá)設(shè)定大小的文件分為幾個獨立的文件。 |
–inline-lob-limit | 設(shè)定大對象數(shù)據(jù)類型的最大值 |
-m,–num-mappers | 啟動N個map來并行導(dǎo)入數(shù)據(jù),默認(rèn)是4個,最好不要將數(shù)字設(shè)置為高于集群的節(jié)點數(shù) |
–query,-e<statement> | 從查詢結(jié)果中導(dǎo)入數(shù)據(jù),該參數(shù)使用時必須指定–target-dir、–hive-table,在查詢語句中一定要有where條件且在where條件中需要包含$CONDITIONS,示例:–query ‘select * from person where $CONDITIONS ‘ –target-dir /user/hive/warehouse/person –hive-table person |
–split-by<column-name> | 表的列名,用來切分工作單元,一般后面跟主鍵ID |
–table <table-name> | 關(guān)系數(shù)據(jù)庫表名,數(shù)據(jù)從該表中獲取 |
–target-dir <dir> | 指定hdfs路徑 |
–warehouse-dir <dir> | 與–target-dir不能同時使用,指定數(shù)據(jù)導(dǎo)入的存放目錄,適用于hdfs導(dǎo)入,不適合導(dǎo)入hive目錄 |
–where | 從關(guān)系數(shù)據(jù)庫導(dǎo)入數(shù)據(jù)時的查詢條件,示例:–where ‘id = 2’ |
-z,–compress | 壓縮參數(shù),默認(rèn)情況下數(shù)據(jù)是沒被壓縮的,通過該參數(shù)可以使用gzip壓縮算法對數(shù)據(jù)進(jìn)行壓縮,適用于SequenceFile, text文本文件, 和Avro文件 |
–compression-codec | Hadoop壓縮編碼,默認(rèn)是gzip |
–null-string <null-string> | 可選參數(shù),如果沒有指定,則字符串null將被使用 |
–null-non-string<null-string> | 可選參數(shù),如果沒有指定,則字符串null將被使用 |
參數(shù) | 說明 |
–check-column (col) | 用來作為判斷的列名,如id |
–incremental (mode) | append:追加,比如對大于last-value指定的值之后的記錄進(jìn)行追加導(dǎo)入。lastmodified:最后的修改時間,追加last-value指定的日期之后的記錄 |
–last-value (value) | 指定自從上次導(dǎo)入后列的最大值(大于該指定的值),也可以自己設(shè)定某一值 |
對incremental參數(shù),如果是以日期作為追加導(dǎo)入的依據(jù),則使用lastmodified,否則就使用append值。
將數(shù)據(jù)庫里的所有表導(dǎo)入到HDFS中,每個表在hdfs中都對應(yīng)一個獨立的目錄。
sqoop import-all-tables –connect jdbc:mysql://localhost:3306/test
sqoop import-all-tables –connect jdbc:mysql://localhost:3306/test –hive-import
參數(shù) | 說明 |
–as-avrodatafile | 同import參數(shù) |
–as-sequencefile | 同import參數(shù) |
–as-textfile | 同import參數(shù) |
–direct | 同import參數(shù) |
–direct-split-size <n> | 同import參數(shù) |
–inline-lob-limit <n> | 同import參數(shù) |
-m,–num-mappers <n> | 同import參數(shù) |
–warehouse-dir <dir> | 同import參數(shù) |
-z,–compress | 同import參數(shù) |
–compression-codec | 同import參數(shù) |
用來生成一個sqoop的任務(wù),生成后,該任務(wù)并不執(zhí)行,除非使用命令執(zhí)行該任務(wù)。
sqoop job
參數(shù) | 說明 |
–create <job-id> | 生成一個job,示例如:sqoop job –create myjob — import –connectjdbc:mysql://localhost:3306/test –table person
|
–delete <job-id> | 刪除一個jobsqoop job –delete myjob |
–exec <job-id> | 執(zhí)行一個jobsqoop job –exec myjob |
–help | 顯示幫助說明 |
–list | 顯示所有的jobsqoop job –list |
–meta-connect <jdbc-uri> | 用來連接metastore服務(wù),示例如:–meta-connect jdbc:hsqldb:hsql://localhost:16000/sqoop |
–show <job-id> | 顯示一個job的各種參數(shù)sqoop job –show myjob |
–verbose | 打印命令運行時的詳細(xì)信息 |
打印出關(guān)系數(shù)據(jù)庫所有的數(shù)據(jù)庫名
sqoop list-databases –connect jdbc:mysql://localhost:3306/ -username root -password 123456
打印出關(guān)系數(shù)據(jù)庫某一數(shù)據(jù)庫的所有表名
sqoop list-tables –connect jdbc:mysql://localhost:3306/zihou -username root -password 123456
將HDFS中不同目錄下面的數(shù)據(jù)合在一起,并存放在指定的目錄中,示例如:
sqoop merge –new-data /test/p1/person –onto /test/p2/person –target-dir /test/merged –jar-file /opt/data/sqoop/person/Person.jar –class-name Person –merge-key id
其中,–class-name所指定的class名是對應(yīng)于Person.jar中的Person類,而Person.jar是通過Codegen生成的
參數(shù) | 說明 |
–new-data <path> | Hdfs中存放數(shù)據(jù)的一個目錄,該目錄中的數(shù)據(jù)是希望在合并后能優(yōu)先保留的,原則上一般是存放越新數(shù)據(jù)的目錄就對應(yīng)這個參數(shù)。 |
–onto <path> | Hdfs中存放數(shù)據(jù)的一個目錄,該目錄中的數(shù)據(jù)是希望在合并后能被更新數(shù)據(jù)替換掉的,原則上一般是存放越舊數(shù)據(jù)的目錄就對應(yīng)這個參數(shù)。 |
–merge-key <col> | 合并鍵,一般是主鍵ID |
–jar-file <file> | 合并時引入的jar包,該jar包是通過Codegen工具生成的jar包 |
–class-name <class> | 對應(yīng)的表名或?qū)ο竺揷lass類是包含在jar包中的。 |
–target-dir <path> | 合并后的數(shù)據(jù)在HDFS里的存放目錄 |
記錄sqoop job的元數(shù)據(jù)信息,如果不啟動metastore實例,則默認(rèn)的元數(shù)據(jù)存儲目錄為:~/.sqoop,如果要更改存儲目錄,可以在配置文件sqoop-site.xml中進(jìn)行更改。
metastore實例啟動:sqoop metastore
參數(shù) | 說明 |
–shutdown | 關(guān)閉一個運行的metastore實例 |
顯示sqoop版本信息
語句:sqoop version
打印sqoop幫助信息
語句:sqoop help
參數(shù) | 說明 |
–hive-delims-replacement <arg> | 用自定義的字符串替換掉數(shù)據(jù)中的\n, \r, and \01等字符 |
–hive-drop-import-delims | 在導(dǎo)入數(shù)據(jù)到hive中時,去掉數(shù)據(jù)中\(zhòng)n,\r和\01這樣的字符 |
–map-column-hive <arg> | 生成hive表時,可以更改生成字段的數(shù)據(jù)類型,格式如:–map-column-hiveTBL_ID=String,LAST_ACCESS_TIME=string |
–hive-partition-key | 創(chuàng)建分區(qū),后面直接跟分區(qū)名即可,創(chuàng)建完畢后,通過describe 表名可以看到分區(qū)名,默認(rèn)為string型 |
–hive-partition-value<v> | 該值是在導(dǎo)入數(shù)據(jù)到hive中時,與–hive-partition-key設(shè)定的key對應(yīng)的value值。 |
–hive-home <dir> | Hive的安裝目錄,可以通過該參數(shù)覆蓋掉默認(rèn)的hive目錄 |
–hive-import | 將數(shù)據(jù)從關(guān)系數(shù)據(jù)庫中導(dǎo)入到hive表中 |
–hive-overwrite | 覆蓋掉在hive表中已經(jīng)存在的數(shù)據(jù) |
–create-hive-table | 默認(rèn)是false,如果目標(biāo)表已經(jīng)存在了,那么創(chuàng)建任務(wù)會失敗 |
–hive-table | 后面接要創(chuàng)建的hive表 |
–table | 指定關(guān)系數(shù)據(jù)庫表名 |
參數(shù) | 說明 |
–connect <jdbc-uri> | Jdcb連接url,示例如:–connect jdbc:mysql://localhost:3306/hive |
–connection-manager <class-name> | 指定要使用的連接管理類 |
–driver <class-name> | 數(shù)據(jù)庫驅(qū)動類 |
–hadoop-home <dir> | Hadoop根目錄 |
–help | 打印幫助信息 |
-P | 從控制端讀取密碼 |
–password <password> | Jdbc url中的數(shù)據(jù)庫連接密碼 |
–username <username> | Jdbc url中的數(shù)據(jù)庫連接用戶名 |
–verbose | 在控制臺打印出詳細(xì)信息 |
–connection-param-file <filename> | 一個記錄著數(shù)據(jù)庫連接參數(shù)的文件 |
用于import場景。
示例如:
sqoop import –connect jdbc:mysql://localhost:3306/test –username root –P –table person –split-by id –check-column id –incremental append –last-value 1 –enclosed-by ‘\”‘
–escaped-by \# –fields-terminated-by .
參數(shù) | 說明 |
–enclosed-by <char> | 給字段值前后加上指定的字符,比如雙引號,示例:–enclosed-by ‘\”‘,顯示例子:”3″,”jimsss”,”dd@dd.com” |
–escaped-by <char> | 給雙引號作轉(zhuǎn)義處理,如字段值為”測試”,經(jīng)過–escaped-by \\處理后,在hdfs中的顯示值為:\”測試\”,對單引號無效 |
–fields-terminated-by <char> | 設(shè)定每個字段是以什么符號作為結(jié)束的,默認(rèn)是逗號,也可以改為其它符號,如句號.,示例如:–fields-terminated-by. |
–lines-terminated-by <char> | 設(shè)定每條記錄行之間的分隔符,默認(rèn)是換行,但也可以設(shè)定自己所需要的字符串,示例如:–lines-terminated-by ‘#’ 以#號分隔 |
–mysql-delimiters | Mysql默認(rèn)的分隔符設(shè)置,字段之間以,隔開,行之間以換行\(zhòng)n隔開,默認(rèn)轉(zhuǎn)義符號是\,字段值以單引號’包含起來。 |
–optionally-enclosed-by <char> | enclosed-by是強制給每個字段值前后都加上指定的符號,而–optionally-enclosed-by只是給帶有雙引號或單引號的字段值加上指定的符號,故叫可選的。示例如:–optionally-enclosed-by ‘$’ 顯示結(jié)果: $”hehe”,測試$ |
對數(shù)據(jù)格式的解析,用于export場景,與文件輸出參數(shù)相對應(yīng)。
示例如:
sqoop export –connect jdbc:mysql://localhost:3306/test –username root –password
123456 –table person2 –export-dir /user/hadoop/person –staging-table person3
–clear-staging-table –input-fields-terminated-by ‘,’
在hdfs中存在某一格式的數(shù)據(jù),在將這樣的數(shù)據(jù)導(dǎo)入到關(guān)系數(shù)據(jù)庫中時,必須要按照該格式來解析出相應(yīng)的字段值,比如在hdfs中有這樣格式的數(shù)據(jù):
3,jimsss,dd@dd.com,1,2013-08-07 16:00:48.0,”hehe”,測試
上面的各字段是以逗號分隔的,那么在解析時,必須要以逗號來解析出各字段值,如:
–input-fields-terminated-by ‘,’
參數(shù) | 說明 |
–input-enclosed-by <char> | 對字段值前后有指定的字符,比如雙引號的值進(jìn)行解析:–input-enclosed-by ‘\”‘,數(shù)據(jù)例子:”3″,”jimsss”,”dd@dd.com” |
–input-escaped-by <char> | 對含有轉(zhuǎn)義雙引號的字段值作轉(zhuǎn)義處理,如字段值為\”測試\”,經(jīng)過–input-escaped-by \\處理后,解析得到的值為:”測試”,對單引號無效。 |
–input-fields-terminated-by <char> | 以字段間的分隔符來解析得到各字段值,示例如:– input-fields-terminated-by, |
–input-lines-terminated-by <char> | 以每條記錄行之間的分隔符來解析得到字段值,示例如:–input-lines-terminated-by ‘#’ 以#號分隔 |
–input-optionally-enclosed-by <char> | 與–input-enclosed-by功能相似,與–input-enclosed-by的區(qū)別參見輸出參數(shù)中對–optionally-enclosed-by的描述 |
本文題目:sqoop中文手冊
網(wǎng)頁鏈接:http://aaarwkj.com/article4/ispooe.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供自適應(yīng)網(wǎng)站、定制網(wǎng)站、ChatGPT、虛擬主機、品牌網(wǎng)站建設(shè)、網(wǎng)站策劃
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)