今天學(xué)的是數(shù)據(jù)遷移工具Sqoop,關(guān)于flume,第二遍的時(shí)候再去學(xué)一下具體的使用。
- 了解Sqoop的結(jié)構(gòu)、功能和一些大概情況
- 學(xué)習(xí)Sqoop的應(yīng)用(數(shù)據(jù)導(dǎo)入、數(shù)據(jù)導(dǎo)出)
- 學(xué)習(xí)常用命令和參數(shù)
Sqoop概述
這是一個(gè)開源的工具,功能主要就是連接Hadoop(hive)與傳統(tǒng)數(shù)據(jù)庫(MySQL)間的數(shù)據(jù)互相傳遞。
其實(shí)就是將數(shù)據(jù)的導(dǎo)入和導(dǎo)出命令用MapReduce來實(shí)現(xiàn)。
應(yīng)用案例
在Sqoop里面,數(shù)據(jù)的導(dǎo)入就是從關(guān)系數(shù)據(jù)庫像HDFS中傳輸數(shù)據(jù),用的是import;
導(dǎo)出就是從大數(shù)據(jù)集群向關(guān)系數(shù)據(jù)庫里面導(dǎo)數(shù)據(jù),使用export關(guān)鍵字。

image.png

image.png
以上代碼就是在MySQL中生成數(shù)據(jù),使用了隨機(jī)的方式來創(chuàng)建,手法極其優(yōu)秀,還重建了函數(shù),我沒能看明白。
第一節(jié) 導(dǎo)入數(shù)據(jù)
sqoop import \
--connect jdbc : mysql : // linux123 :3306 \
--username hive
--password 12345678
--table goodtbl
--target -dir /root /lagou #目標(biāo)HDFS路徑
--delete - target - dir #如果數(shù)據(jù)在目標(biāo)路徑已出現(xiàn),那么再次運(yùn)行就會(huì)報(bào)錯(cuò)
--num-mappers 1 #啟動(dòng)的map task數(shù)量,默認(rèn)是4
--fields -terminated-by "\t" #文件分割符號

image.png

image.png
這三個(gè)都是數(shù)據(jù)的導(dǎo)入,第一個(gè)就是導(dǎo)入全部數(shù)據(jù),第二個(gè)是導(dǎo)入查詢的數(shù)據(jù),第三個(gè)就是導(dǎo)入指定列,這三個(gè)知識都比較重要,屬于Sqoop的必會(huì)知識。
多看多默寫!
第二節(jié) 導(dǎo)出數(shù)據(jù)
首先,hive中要有一個(gè)表,依舊是先在MySQL中建表再導(dǎo)入到hive中:

image.png
在導(dǎo)出數(shù)據(jù)到MySQL之前,需要提前創(chuàng)建一個(gè)空的表。

image.png
其實(shí)格式都是差不多了。
上面說的都是全量數(shù)據(jù)導(dǎo)入,數(shù)據(jù)量會(huì)比較大,如果數(shù)據(jù)量小,則需要采取完全源數(shù)據(jù)抽取。而這種抽取,有時(shí)候是抽取發(fā)生變化的數(shù)據(jù),簡稱CDC。
- 如何判斷是否大量?
- 為何抽取發(fā)生變化的數(shù)據(jù)?
增量數(shù)據(jù)的導(dǎo)入一般有兩種
- 基于遞增列(append)
- 基于時(shí)間戳(LastModified)
下面只講解:append的方式,這個(gè)比較常用
注意1 刪除MySQL和Hive數(shù)據(jù)的方式
注意2
image.png
因?yàn)槭窃隽康姆绞?,所以把原有的create hive table換成incremental append;然后既然是追加數(shù)據(jù),就要考慮參考的那一列,從哪開始。這兩個(gè)就是接下來的check column和last value兩段代碼的任務(wù)了。最后一個(gè)m1就是起一個(gè)job的意思。
image.png
因?yàn)檫@個(gè)數(shù)據(jù)就是額外增加的,而last value已經(jīng)固定了起點(diǎn),那么下次再想接著上次增加怎么做呢?
就是下面這個(gè)call batchInsertTestData函數(shù)。
image.png
執(zhí)行job
執(zhí)行數(shù)據(jù)增量導(dǎo)入方式有兩種,一種就是每次手動(dòng)的去調(diào)last-value。當(dāng)每天都需要新增數(shù)據(jù)時(shí),這個(gè)方式就會(huì)顯得比較呆。
另一種就是使用job,每天自動(dòng)定時(shí)調(diào)度,解放雙手
注意1:如何設(shè)定每日更新的參數(shù)
注意2:如何啟動(dòng)job和關(guān)閉job
下圖第一行命令是將12345678寫入這個(gè)pwd文件中。第二行是在hdfs里新建一個(gè)文件目錄,第三行是將這個(gè)pwd文件放到這個(gè)文件目錄中,第四行是改變這個(gè)目錄的權(quán)限:400。
這個(gè)意思就是下次不用再輸入密碼了,直接使用這個(gè)就可以,怎么使用看下下圖
image.png
這就是job的創(chuàng)建,有固定格式。執(zhí)行和刪除的代碼比較簡單。
image.png
image.png
常用函數(shù)
稍微了解一下就可,具體一些可以用時(shí)上網(wǎng)查閱
image.png






