利用sqoop實(shí)現(xiàn)mysql與Hdfs間的數(shù)據(jù)的導(dǎo)入導(dǎo)出

安裝配置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)出。


qoop與MySQL 建立連接

創(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ò)。


上傳到hdfs中的數(shù)據(jù)

上傳到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ù)。


上傳到hive中的數(shù)據(jù)



如果源數(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)入。


現(xiàn)在只有一個(gè)表


又添加2個(gè)表

此時(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ò)程。


數(shù)據(jù)導(dǎo)出

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

數(shù)據(jù)導(dǎo)出結(jié)果表

最后有兩個(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


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容