安裝配置sqoop
原料:
1.sqoop tar 包
2.mysql jar包[最好用高版本的,我用的是5.1.32版]
步驟1
解壓tar包,指定安裝路徑。
2配置環(huán)境變量,在/etc/profile文件里指定家目錄和path目錄。
3.將mysql jar 驅(qū)動(dòng)包放在sqoop安裝目錄的lib目錄下。
4測(cè)試 ? sqoop list-databases jdbc:mysql://master:3306/sqoopDB ? --username sqoop -P
5輸入密碼。如果能顯示所有數(shù)據(jù)庫(kù),則證明sqoop安裝配置成功,并且與mysql建立鏈接,剩下要做的就是利用sqoop實(shí)現(xiàn)數(shù)據(jù)的導(dǎo)入導(dǎo)出。

創(chuàng)建數(shù)據(jù)源
接下來(lái)便是在Linux上的MySQL中創(chuàng)建一個(gè)數(shù)據(jù)庫(kù),我這里創(chuàng)建的是sqoopDB數(shù)據(jù)庫(kù),并創(chuàng)建一個(gè)sqoop用戶并授予權(quán)限。
create user ‘uername’ indentified by'password'?
grant all privileges on sqoopDB.* to userame@ % indentified by 'password'
再然后對(duì)權(quán)限的刷新
flush privileges;

接著在這個(gè)sqoopDB數(shù)據(jù)庫(kù)創(chuàng)建表 并添加數(shù)據(jù)。添加完成后 使用sqoop將MySQL中數(shù)據(jù)上傳到hdfs 或者是hive 中去。
sqoop導(dǎo)入數(shù)據(jù)命令
上傳到hdfs命令: sqoop import --connect jdbc:mysql://mysql.server.ip:3306/sqoopDB --username 'username' -P --table 'tablename'? --target-dir /user/sqoop
要注意的是hdfs中的user/sqoop中的sqoop不能存在,要是存在就無(wú)法自動(dòng)創(chuàng)建 就會(huì)報(bào)錯(cuò)。

上傳到hive 命令:sqoop import --connect jdbc:mysql://mysql.server.ip:3306/sqoopDB
--table 'tablename'? --username 'username' -P?? --hive-import -m 1
--hive-import-m 1? 是指定有一個(gè)map任務(wù)。

如果源數(shù)據(jù)發(fā)生改變了怎么辦,比如發(fā)生insert update操作。這時(shí)候需要增量導(dǎo)入數(shù)據(jù)操作
目前sqoop支持兩種增量導(dǎo)入,分別為append和lastmodified
append主要針對(duì)insert操作
lastmoified主要針對(duì)update操作
實(shí)現(xiàn)數(shù)據(jù)導(dǎo)入hive倉(cāng)庫(kù)分三步驟
1.將相應(yīng)的表數(shù)據(jù)導(dǎo)入到hdfs中
2.把表數(shù)據(jù)類型映射為hive數(shù)據(jù)類型。然后根據(jù)表結(jié)構(gòu)在hive上執(zhí)行create table 操作創(chuàng)建hive表。
3.在hive中執(zhí)行l(wèi)oad data input 語(yǔ)句將hdfs上的表數(shù)據(jù)移動(dòng)到hive數(shù)據(jù)倉(cāng)庫(kù)目錄【該目錄位置有定義在文件hive_home/conf/hive/hive_site.xml中的屬性${hive.metastore.warehose.dir}設(shè)置】
sqoop-import-all -tables 操作
這個(gè)命令是把MySQL中的某一個(gè)數(shù)據(jù)庫(kù)中的所有的表數(shù)據(jù)導(dǎo)入到hdfs中,每一個(gè)表數(shù)據(jù)分別位于hdfs上的一個(gè)單獨(dú)目錄下。
執(zhí)行該命令操作必須滿足三個(gè)條件。
1.要有主鍵,但主鍵不是組合鍵。
2,不能有任何子句。
3,所有表中的所有列都將被導(dǎo)入到hdfs上不能出現(xiàn)列數(shù)據(jù)丟失,否則不能導(dǎo)入。


此時(shí)需要把添加的兩個(gè)表同時(shí)導(dǎo)入到hdfs 上
命令操作:sqoop import-all-tables --connect jdbc:mysql://192.168.145.100:3306/sqoopDB --username sqoop -P
數(shù)據(jù)的導(dǎo)出
sqoop -export 與sqoop-import 操作功能相反的。 即 吧HDFS HIVE HBase 上的數(shù)據(jù)導(dǎo)出數(shù)據(jù)庫(kù)中,條件是數(shù)據(jù)庫(kù)中的表必須存在,表結(jié)構(gòu)也要相同。sqoop-export 支持三種模式,insert update call? 執(zhí)行導(dǎo)出操作時(shí),sqoop將HDFS上輸入文件中的數(shù)據(jù)根據(jù)用戶指定的分隔符解析成一系列的記錄和記錄字段,sqoop export 操作默認(rèn)將這些記錄以insert方式插入到指定的數(shù)據(jù)庫(kù)目標(biāo)表中,用戶可以指定update方式替換數(shù)據(jù)庫(kù)系統(tǒng)中已經(jīng)存在的記錄,或指定call模式調(diào)用數(shù)據(jù)庫(kù)系統(tǒng)存儲(chǔ)過(guò)程。

sqoop 有很多命令,也有很多組合選項(xiàng),一時(shí)半會(huì)記不來(lái),也記不住,需要積累的,只要知道怎么操作,需要達(dá)成什么效果,到時(shí)候在上網(wǎng)搜命令。

最后有兩個(gè)命令要注意
1 sqoop list-databases 這個(gè)在前面在我測(cè)試時(shí)候用到了,它是用于列舉出指定數(shù)據(jù)庫(kù)服務(wù)器中的數(shù)據(jù)庫(kù)模式。
2.sqoop list-tables 用于列決出指定數(shù)據(jù)庫(kù)服務(wù)器中的數(shù)據(jù)表。
eg:? sqoop list -tables --connect jdbc:mysql://192.168.145.100/sqoopDB --username sqoop -P
