大數據技術之Sqoop
- 2020 年 3 月 5 日
- 筆記
一、Sqoop簡介
Apache Sqoop(TM)是一種旨在有效地在Apache Hadoop和諸如關係資料庫等結構化數據存儲之間傳輸大量數據的工具。
Sqoop於2012年3月孵化出來,現在是一個頂級的Apache項目。
請注意,1.99.7與1.4.6不兼容,且沒有特徵不完整,它並不打算用於生產部署。
二、Sqoop原理
將導入或導出命令翻譯成mapreduce程式來實現。
在翻譯出的mapreduce中主要是對inputformat和outputformat進行訂製。
三、Sqoop安裝
安裝Sqoop的前提是已經具備Java和Hadoop的環境。
3.1、下載並解壓
1) 最新版下載地址:http://mirrors.hust.edu.cn/apache/sqoop/1.4.6/
2) 上傳安裝包sqoop-1.4.6.bin__hadoop-2.0.4-alpha.tar.gz到虛擬機中,如我的上傳目錄是:/opt/software/
3) 解壓sqoop安裝包到指定目錄,如:
$ tar -zxvf sqoop-1.4.6.bin__hadoop-2.0.4-alpha.tar.gz -C /opt/module/
3.2、修改配置文件
Sqoop的配置文件與大多數大數據框架類似,在sqoop根目錄下的conf目錄中。
1) 重命名配置文件
$ mv sqoop-env-template.sh sqoop-env.sh $ mv sqoop-site-template.xml sqoop-site.xml 此行不用做
2) 修改配置文件
sqoop-env.sh
export HADOOP_COMMON_HOME=/opt/module/hadoop-2.8.4 export HADOOP_MAPRED_HOME=/opt/module/hadoop-2.8.4 export HIVE_HOME=/opt/module/hive export ZOOKEEPER_HOME=/opt/module/zookeeper-3.4.10 export ZOOCFGDIR=/opt/module/zookeeper-3.4.10/conf
3.3、拷貝JDBC驅動
拷貝jdbc驅動到sqoop的lib目錄下,如:
$ cp -a mysql-connector-java-5.1.27-bin.jar /opt/module/sqoop-1.4.6.bin__hadoop-2.0.4-alpha/lib
3.4、驗證Sqoop
我們可以通過某一個command來驗證sqoop配置是否正確:
$ bin/sqoop help 出現一些Warning警告(警告資訊已省略),並伴隨著幫助命令的輸出: Available commands: codegen Generate code to interact with database records create-hive-table Import a table definition into Hive eval Evaluate a SQL statement and display the results export Export an HDFS directory to a database table help List available command import Import a table from a database to HDFS import-all-tables Import tables from a database to HDFS version Display version information ·····
注:注釋掉configure-sqoop 134行到143行的內容,內容如下
134 ## Moved to be a runtime check in sqoop. 135 #if [ ! -d "${HCAT_HOME}" ]; then 136 # echo "Warning: $HCAT_HOME does not exist! HCatalog jobs will fail." 137 # echo 'Please set $HCAT_HOME to the root of your HCatalog installation.' 138 #fi 139 # 140 #if [ ! -d "${ACCUMULO_HOME}" ]; then 141 # echo "Warning: $ACCUMULO_HOME does not exist! Accumulo imports will fail." 142 # echo 'Please set $ACCUMULO_HOME to the root of your Accumulo installation.' 143 #fi3.5、測試Sqoop是否能夠成功連接資料庫
$ bin/sqoop list-databases --connect jdbc:mysql://bigdata113:3306/ --username root --password 000000 出現如下輸出: information_schema metastore mysql performance_schema
四、Sqoop的簡單使用案例
4.1、導入數據
在Sqoop中,「導入」概念指:從非大數據集群(RDBMS)向大數據集群(HDFS,HIVE,HBASE)中傳輸數據,叫做:導入,即使用import關鍵字。
4.1.1、RDBMS到HDFS
1) 確定Mysql服務開啟正常
2) 在Mysql中新建一張表並插入一些數據
$ mysql -uroot -p000000 mysql> create database company; mysql> create table company.staff(id int(4) primary key not null auto_increment, name varchar(255), sex varchar(255)); mysql> insert into company.staff(name, sex) values('Thomas', 'Male'); mysql> insert into company.staff(name, sex) values('Catalina', 'FeMale');3) 導入數據
(1)全部導入
$ bin/sqoop import --connect jdbc:mysql://bigdata113:3306/company --username root --password 000000 --table staff --target-dir /user/company --delete-target-dir --num-mappers 1 --fields-terminated-by "t" |
|---|
(2)查詢導入
$ bin/sqoop import --connect jdbc:mysql://bigdata113:3306/company --username root --password 000000 --target-dir /user/company --delete-target-dir --num-mappers 1 --fields-terminated-by "t" --query 'select name,sex from staff where id <=3 and $CONDITIONS;' |
|---|
尖叫提示:must contain '$CONDITIONS' in WHERE clause. 註:CONDITIONS 翻譯『條件』
尖叫提示:如果query後使用的是雙引號,則$CONDITIONS前必須加轉移符,防止shell識別為自己的變數。
(3)導入指定列
$ bin/sqoop import --connect jdbc:mysql://bigdata113:3306/company --username root --password 000000 --target-dir /user/company --delete-target-dir --num-mappers 1 --fields-terminated-by "t" --columns id,sex --table staff |
|---|
尖叫提示:columns中如果涉及到多列,用逗號分隔,分隔時不要添加空格
(4)使用sqoop關鍵字篩選查詢導入數據
$ bin/sqoop import --connect jdbc:mysql://bigdata113:3306/company --username root --password 000000 --target-dir /user/company --delete-target-dir --num-mappers 1 --fields-terminated-by "t" --table staff --where "id=2" |
|---|
尖叫提示:在Sqoop中可以使用sqoop import -D property.name=property.value這樣的方式加入執行任務的參數,多個參數用空格隔開。
4.1.2、RDBMS到Hive
$ bin/sqoop import --connect jdbc:mysql://bigdata113:3306/Andy --username root --password 000000 --table aca --num-mappers 1 --hive-import --fields-terminated-by "t" --hive-overwrite --hive-table staff_hive |
|---|
尖叫提示:該過程分為兩步,第一步將數據導入到HDFS,第二步將導入到HDFS的數據遷移到Hive倉庫
尖叫提示:從MYSQL到Hive,本質時從MYSQL => HDFS => load To Hive
4.2、導出數據
在Sqoop中,「導出」概念指:從大數據集群(HDFS,HIVE,HBASE)向非大數據集群(RDBMS)中傳輸數據,叫做:導出,即使用export關鍵字。
4.2.1、HIVE/HDFS到RDBMS
創建aca表create table abc(id int,name VARCHAR(5)); |
|---|
$ bin/sqoop export --connect jdbc:mysql://bigdata113:3306/Andy --username root --password 000000 --export-dir /user/hive/warehouse/staff_hive --table abc --num-mappers 1 --input-fields-terminated-by "t" |
|---|
尖叫提示:Mysql中如果表不存在,不會自動創建,自行根據表結構創建
思考:數據是覆蓋還是追加 答案:追加
4.3、腳本打包
使用opt格式的文件打包sqoop命令,然後執行
1) 創建一個.opt文件
$ touch job_HDFS2RDBMS.opt |
|---|
2) 編寫sqoop腳本
$ vi ./job_HDFS2RDBMS.opt#以下命令是從staff_hive中追加導入到mysql的aca表中export--connectjdbc:mysql://bigdata113:3306/Andy--usernameroot--password000000--tableaca--num-mappers1--export-dir/user/hive/warehouse/staff_hive--input-fields-terminated-by"t" |
|---|
3) 執行該腳本
$ bin/sqoop --options-file job_HDFS2RDBMS.opt |
|---|
五、Sqoop一些常用命令及參數
5.1、常用命令列舉
這裡給大家列出來了一部分Sqoop操作時的常用參數,以供參考,需要深入學習的可以參看對應類的源程式碼。
序號 | 命令 | 類 | 說明 |
|---|---|---|---|
1 | import | ImportTool | 將數據導入到集群 |
2 | export | ExportTool | 將集群數據導出 |
3 | codegen | CodeGenTool | 獲取資料庫中某張表數據生成Java並打包Jar |
4 | create-hive-table | CreateHiveTableTool | 創建Hive表 |
5 | eval | EvalSqlTool | 查看SQL執行結果 |
6 | import-all-tables | ImportAllTablesTool | 導入某個資料庫下所有表到HDFS中 |
7 | job | JobTool | 用來生成一個sqoop的任務,生成後,該任務並不執行,除非使用命令執行該任務。 |
8 | list-databases | ListDatabasesTool | 列出所有資料庫名 |
9 | list-tables | ListTablesTool | 列出某個資料庫下所有表 |
10 | merge | MergeTool | 將HDFS中不同目錄下面的數據合在一起,並存放在指定的目錄中 |
11 | metastore | MetastoreTool | 記錄sqoop job的元數據資訊,如果不啟動metastore實例,則默認的元數據存儲目錄為:~/.sqoop,如果要更改存儲目錄,可以在配置文件sqoop-site.xml中進行更改。 |
12 | help | HelpTool | 列印sqoop幫助資訊 |
13 | version | VersionTool | 列印sqoop版本資訊 |
5.2、命令&參數詳解
剛才列舉了一些Sqoop的常用命令,對於不同的命令,有不同的參數,讓我們來一一列舉說明。
首先來我們來介紹一下公用的參數,所謂公用參數,就是大多數命令都支援的參數。
5.2.1、公用參數:資料庫連接
序號 | 參數 | 說明 |
|---|---|---|
1 | --connect | 連接關係型資料庫的URL |
2 | --connection-manager | 指定要使用的連接管理類 |
3 | --driver | Hadoop根目錄 |
4 | --help | 列印幫助資訊 |
5 | --password | 連接資料庫的密碼 |
6 | --username | 連接資料庫的用戶名 |
7 | --verbose | 在控制台列印出詳細資訊 |
5.2.2、公用參數:import
序號 | 參數 | 說明 |
|---|---|---|
1 | --enclosed-by <char> | 給欄位值前加上指定的字元 |
2 | --escaped-by <char> | 對欄位中的雙引號加轉義符 |
3 | --fields-terminated-by <char> | 設定每個欄位是以什麼符號作為結束,默認為逗號 |
4 | --lines-terminated-by <char> | 設定每行記錄之間的分隔符,默認是n |
5 | --mysql-delimiters | Mysql默認的分隔符設置,欄位之間以逗號分隔,行之間以n分隔,默認轉義符是,欄位值以單引號包裹。 |
6 | --optionally-enclosed-by <char> | 給帶有雙引號或單引號的欄位值前後加上指定字元。 |
5.2.3、公用參數:export
序號 | 參數 | 說明 |
|---|---|---|
1 | --input-enclosed-by <char> | 對欄位值前後加上指定字元 |
2 | --input-escaped-by <char> | 對含有轉移符的欄位做轉義處理 |
3 | --input-fields-terminated-by <char> | 欄位之間的分隔符 |
4 | --input-lines-terminated-by <char> | 行之間的分隔符 |
5 | --input-optionally-enclosed-by <char> | 給帶有雙引號或單引號的欄位前後加上指定字元 |
5.2.4、公用參數:hive
序號 | 參數 | 說明 |
|---|---|---|
1 | --hive-delims-replacement <arg> | 用自定義的字元串替換掉數據中的rn和13 10等字元 |
2 | --hive-drop-import-delims | 在導入數據到hive時,去掉數據中的rn1310這樣的字元 |
3 | --map-column-hive <arg> | 生成hive表時,可以更改生成欄位的數據類型 |
4 | --hive-partition-key | 創建分區,後面直接跟分區名,分區欄位的默認類型為string |
5 | --hive-partition-value <v> | 導入數據時,指定某個分區的值 |
6 | --hive-home <dir> | hive的安裝目錄,可以通過該參數覆蓋之前默認配置的目錄 |
7 | --hive-import | 將數據從關係資料庫中導入到hive表中 |
8 | --hive-overwrite | 覆蓋掉在hive表中已經存在的數據 |
9 | --create-hive-table | 默認是false,即,如果目標表已經存在了,那麼創建任務失敗。 |
10 | --hive-table | 後面接要創建的hive表,默認使用MySQL的表名 |
11 | --table | 指定關係資料庫的表名 |
公用參數介紹完之後,我們來按照命令介紹命令對應的特有參數。
5.2.5、命令&參數:import
將關係型資料庫中的數據導入到HDFS(包括Hive,HBase)中,如果導入的是Hive,那麼當Hive中沒有對應表時,則自動創建。
1) 命令:
如:導入數據到hive中
$ bin/sqoop import --connect jdbc:mysql://bigdata113:3306/Andy --username root --password 000000 --table access --hive-import --fields-terminated-by "t" |
|---|
如:增量導入數據到hive中,mode=append
append導入:$ bin/sqoop import --connect jdbc:mysql://bigdata113:3306/Andy --username root --password 000000 --table aca --num-mappers 1 --fields-terminated-by "t" --target-dir /user/hive/warehouse/staff_hive --check-column id --incremental append --last-value 10 |
|---|
尖叫提示:append不能與--hive-等參數同時使用(Append mode for hive imports is not yet supported. Please remove the parameter --append-mode)
注:--last-value 2 的意思是標記增量的位置為第二行,也就是說,當數據再次導出的時候,從第二行開始算
註:如果 --last-value N , N > MYSQL中最大行數,則HDFS會創建一個空文件。如果N<=0 , 那麼就是所有數據
如:增量導入數據到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://bigdata113:3306/company --username root --password 000000 --table staff_timestamp --delete-target-dir --hive-import --fields-terminated-by "t" --m 1再增量導入一部分數據:mysql> insert into company.staff_timestamp (id, name, sex) values(3, 'CCC', 'female');$ bin/sqoop import --connect jdbc:mysql://bigdata113:3306/company --username root --password 000000 --table staff_timestamp --check-column last_modified --incremental lastmodified --m 1 --last-value "2019-05-17 09:50:12" --append --fields-terminated-by "t" --warehouse-dir /user/hive/warehouse/ |
|---|
尖叫提示:使用lastmodified方式導入數據要指定增量數據是要--append(追加)還是要--merge-key(合併)
尖叫提示:在Hive中,如果不指定輸出路徑,可以去看以下兩個目錄
- /user/root(此為用戶名)
- /user/hive/warehouse 個人配置的目錄
尖叫提示:last-value指定的值是會包含於增量導入的數據中
如果卡住,在yarn-site.xml中加入以下配置
<property> <name>yarn.nodemanager.resource.memory-mb</name> <value>20480</value> </property> <property> <name>yarn.scheduler.minimum-allocation-mb</name> <value>2048</value> </property> <property> <name>yarn.nodemanager.vmem-pmem-ratio</name> <value>2.1</value> </property> |
|---|
2) 參數:
序號 | 參數 | 說明 |
|---|---|---|
1 | --append | 將數據追加到HDFS中已經存在的DataSet中,如果使用該參數,sqoop會把數據先導入到臨時文件目錄,再合併。 |
2 | --as-avrodatafile | 將數據導入到一個Avro數據文件中 |
3 | --as-sequencefile | 將數據導入到一個sequence文件中 |
4 | --as-textfile | 將數據導入到一個普通文本文件中 |
5 | --boundary-query <statement> | 邊界查詢,導入的數據為該參數的值(一條sql語句)所執行的結果區間內的數據。 |
6 | --columns <col1, col2, col3> | 指定要導入的欄位 |
7 | --direct | 直接導入模式,使用的是關係資料庫自帶的導入導出工具,以便加快導入導出過程。 |
8 | --direct-split-size | 在使用上面direct直接導入的基礎上,對導入的流按位元組分塊,即達到該閾值就產生一個新的文件 |
9 | --inline-lob-limit | 設定大對象數據類型的最大值 |
10 | --m或–num-mappers | 啟動N個map來並行導入數據,默認4個。 |
11 | --query或--e <statement> | 將查詢結果的數據導入,使用時必須伴隨參--target-dir,--hive-table,如果查詢中有where條件,則條件後必須加上$CONDITIONS關鍵字 |
12 | --split-by <column-name> | 按照某一列來切分表的工作單元,不能與--autoreset-to-one-mapper連用(請參考官方文檔) |
13 | --table <table-name> | 關係資料庫的表名 |
14 | --target-dir <dir> | 指定HDFS路徑 |
15 | --warehouse-dir <dir> | 與14參數不能同時使用,導入數據到HDFS時指定的目錄 |
16 | --where | 從關係資料庫導入數據時的查詢條件 |
17 | --z或--compress | 允許壓縮 |
18 | --compression-codec | 指定hadoop壓縮編碼類,默認為gzip(Use Hadoop codec default gzip) |
19 | --null-string <null-string> | string類型的列如果null,替換為指定字元串 |
20 | --null-non-string <null-string> | 非string類型的列如果null,替換為指定字元串 |
21 | --check-column <col> | 作為增量導入判斷的列名 |
22 | --incremental <mode> | mode:append或lastmodified |
23 | --last-value <value> | 指定某一個值,用於標記增量導入的位置 |
5.2.6、命令&參數:export
從HDFS(包括Hive和HBase)中將數據導出到關係型資料庫中。
1) 命令:
如:
bin/sqoop export --connect jdbc:mysql://bigdata113:3306/Andy --username root --password 000000 --export-dir /user/hive/warehouse/staff_hive --table aca --num-mappers 1 --input-fields-terminated-by "t" |
|---|
2) 參數:
序號 | 參數 | 說明 |
|---|---|---|
1 | --direct | 利用資料庫自帶的導入導出工具,以便於提高效率 |
2 | --export-dir <dir> | 存放數據的HDFS的源目錄 |
3 | -m或--num-mappers <n> | 啟動N個map來並行導入數據,默認4個 |
4 | --table <table-name> | 指定導出到哪個RDBMS中的表 |
5 | --update-key <col-name> | 對某一列的欄位進行更新操作 |
6 | --update-mode <mode> | updateonlyallowinsert(默認) |
7 | --input-null-string <null-string> | 請參考import該類似參數說明 |
8 | --input-null-non-string <null-string> | 請參考import該類似參數說明 |
9 | --staging-table <staging-table-name> | 創建一張臨時表,用於存放所有事務的結果,然後將所有事務結果一次性導入到目標表中,防止錯誤。 |
10 | --clear-staging-table | 如果第9個參數非空,則可以在導出操作執行前,清空臨時事務結果表 |
5.2.7、命令&參數:codegen
將關係型資料庫中的表映射為一個Java類,在該類中有各列對應的各個欄位。
如:
$ bin/sqoop codegen --connect jdbc:mysql://bigdata113:3306/company --username root --password 000000 --table staff --bindir /opt/Desktop/staff --class-name Staff --fields-terminated-by "t" |
|---|
序號 | 參數 | 說明 |
|---|---|---|
1 | --bindir <dir> | 指定生成的Java文件、編譯成的class文件及將生成文件打包為jar的文件輸出路徑 |
2 | --class-name <name> | 設定生成的Java文件指定的名稱 |
3 | --outdir <dir> | 生成Java文件存放的路徑 |
4 | --package-name <name> | 包名,如com.z,就會生成com和z兩級目錄 |
5 | --input-null-non-string <null-str> | 在生成的Java文件中,可以將null字元串或者不存在的字元串設置為想要設定的值(例如空字元串) |
6 | --input-null-string <null-str> | 將null字元串替換成想要替換的值(一般與5同時使用) |
7 | --map-column-java <arg> | 資料庫欄位在生成的Java文件中會映射成各種屬性,且默認的數據類型與資料庫類型保持對應關係。該參數可以改變默認類型,例如:--map-column-java id=long, name=String |
8 | --null-non-string <null-str> | 在生成Java文件時,可以將不存在或者null的字元串設置為其他值 |
9 | --null-string <null-str> | 在生成Java文件時,將null字元串設置為其他值(一般與8同時使用) |
10 | --table <table-name> | 對應關係資料庫中的表名,生成的Java文件中的各個屬性與該表的各個欄位一一對應 |
5.2.8、命令&參數:create-hive-table
生成與關係資料庫表結構對應的hive表結構。
命令:
如:僅建表
$ bin/sqoop create-hive-table --connect jdbc:mysql://bigdata113:3306/company --username root --password 000000 --table staff --hive-table hive_staff1 |
|---|
參數:
序號 | 參數 | 說明 |
|---|---|---|
1 | --hive-home <dir> | Hive的安裝目錄,可以通過該參數覆蓋掉默認的Hive目錄 |
2 | --hive-overwrite | 覆蓋掉在Hive表中已經存在的數據 |
3 | --create-hive-table | 默認是false,如果目標表已經存在了,那麼創建任務會失敗 |
4 | --hive-table | 後面接要創建的hive表 |
5 | --table | 指定關係資料庫的表名 |
5.2.9、命令&參數:eval
可以快速的使用SQL語句對關係型資料庫進行操作,經常用於在import數據之前,了解一下SQL語句是否正確,數據是否正常,並可以將結果顯示在控制台。
命令:
如:
$ bin/sqoop eval --connect jdbc:mysql://bigdata113:3306/company --username root --password 000000 --query "SELECT * FROM staff" |
|---|
參數:
序號 | 參數 | 說明 |
|---|---|---|
1 | --query或--e | 後跟查詢的SQL語句 |
5.2.10、命令&參數:import-all-tables
可以將RDBMS中的所有表導入到HDFS中,每一個表都對應一個HDFS目錄
命令:
如:注意:(卡住)
$ bin/sqoop import-all-tables --connect jdbc:mysql://bigdata113:3306/company --username root --password 000000 --hive-import --fields-terminated-by "t" |
|---|
參數:
序號 | 參數 | 說明 |
|---|---|---|
1 | --as-avrodatafile | 這些參數的含義均和import對應的含義一致 |
2 | --as-sequencefile | |
3 | --as-textfile | |
4 | --direct | |
5 | --direct-split-size <n> | |
6 | --inline-lob-limit <n> | |
7 | --m或—num-mappers <n> | |
8 | --warehouse-dir <dir> | |
9 | -z或--compress | |
10 | --compression-codec |
5.2.11、命令&參數:job
用來生成一個sqoop任務,生成後不會立即執行,需要手動執行。
命令:
如:
$ bin/sqoop job --create myjob -- import-all-tables --connect jdbc:mysql://bigdata113:3306/company --username root --password 000000$ bin/sqoop job --list$ bin/sqoop job --exec myjob |
|---|
尖叫提示:注意import-all-tables和它左邊的--之間有一個空格
尖叫提示:如果需要連接metastore,則--meta-connect
執行的結果在HDFS:/user/root/ 目錄中,即導出所有表到/user/root中
參數:
序號 | 參數 | 說明 |
|---|---|---|
1 | --create <job-id> | 創建job參數 |
2 | --delete <job-id> | 刪除一個job |
3 | --exec <job-id> | 執行一個job |
4 | --help | 顯示job幫助 |
5 | --list | 顯示job列表 |
6 | --meta-connect <jdbc-uri> | 用來連接metastore服務 |
7 | --show <job-id> | 顯示一個job的資訊 |
8 | --verbose | 列印命令運行時的詳細資訊 |
尖叫提示:在執行一個job時,如果需要手動輸入資料庫密碼,可以做如下優化
<property> <name>sqoop.metastore.client.record.password</name> <value>true</value> <description>If true, allow saved passwords in the metastore.</description></property> |
|---|
5.2.12、命令&參數:list-databases
命令:
如:
$ bin/sqoop list-databases --connect jdbc:mysql://bigdata113:3306/ --username root --password 000000 |
|---|
參數:與公用參數一樣
5.2.13、命令&參數:list-tables
命令:
如:
$ bin/sqoop list-tables --connect jdbc:mysql://bigdata113:3306/company --username root --password 000000 |
|---|
參數:與公用參數一樣
5.2.14、命令&參數:merge
將HDFS中不同目錄下面的數據合併在一起並放入指定目錄中
數據環境:注意:以下數據自己手動改成t
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,如果直接複製,請檢查之。
命令:
如:
創建JavaBean:$ bin/sqoop codegen --connect jdbc:mysql://bigdata113:3306/company --username root --password 000000 --table staff --bindir /opt/Desktop/staff --class-name Staff --fields-terminated-by "t"開始合併:註:是hdfs路徑$ bin/sqoop merge --new-data /test/new/ --onto /test/old/ --target-dir /test/merged --jar-file /opt/Desktop/staff/Staff.jar --class-name Staff --merge-key id結果:1 AAA MALE2 BBB MALE3 CCC MALE4 DDD MALE6 DDD FEMALE |
|---|
參數:
序號 | 參數 | 說明 |
|---|---|---|
1 | --new-data <path> | HDFS 待合併的數據目錄,合併後在新的數據集中保留 |
2 | --onto <path> | HDFS合併後,重複的部分在新的數據集中被覆蓋 |
3 | --merge-key <col> | 合併鍵,一般是主鍵ID |
4 | --jar-file <file> | 合併時引入的jar包,該jar包是通過Codegen工具生成的jar包 |
5 | --class-name <class> | 對應的表名或對象名,該class類是包含在jar包中的 |
6 | --target-dir <path> | 合併後的數據在HDFS里存放的目錄 |
5.2.15、命令&參數:metastore
記錄了Sqoop job的元數據資訊,如果不啟動該服務,那麼默認job元數據的存儲目錄為~/.sqoop,可在sqoop-site.xml中修改。
命令:
如:啟動sqoop的metastore服務
$ bin/sqoop metastore |
|---|
參數:
序號 | 參數 | 說明 |
|---|---|---|
1 | --shutdown | 關閉metastore |

