全國(guó)咨詢(xún)/投訴熱線(xiàn):400-618-4000

首頁(yè)技術(shù)文章正文

sqoop的工作原理介紹

更新時(shí)間:2022-01-05 來(lái)源:黑馬程序員 瀏覽量:

Sqoop是Apache旗下的一款開(kāi)源工具,該項(xiàng)目開(kāi)始于2009年,最早是作為Hadoop的一個(gè)第三方模塊存在,后來(lái)為了讓使用者能夠快速部署,也為了讓開(kāi)發(fā)人員能夠更快速的迭代開(kāi)發(fā),并在2013年,獨(dú)立成為Apache的一個(gè)頂級(jí)開(kāi)源項(xiàng)目。

Sqoop主要用于在Hadoop和關(guān)系數(shù)據(jù)庫(kù)或大型機(jī)之間傳輸數(shù)據(jù),可以使用Sqoop工具將數(shù)據(jù)從關(guān)系數(shù)據(jù)庫(kù)管理系統(tǒng)導(dǎo)入(import)到Hadoop分布式文件系統(tǒng)中,或者將Hadoop中的數(shù)據(jù)轉(zhuǎn)換導(dǎo)出(export)到關(guān)系數(shù)據(jù)庫(kù)管理系統(tǒng),其功能如下圖所示。

Sqoop的功能

目前Sqoop主要分為Sqoop1和Sqoop2兩個(gè)版本,其中,版本號(hào)為1.4.x屬于Sqoop1,而版本號(hào)為1.99.x的屬于Sqoop2。這兩個(gè)版本開(kāi)發(fā)時(shí)的定位方向不同,體系結(jié)構(gòu)具有很大的差異,因此它們之間互不兼容。

Sqoop1功能結(jié)構(gòu)簡(jiǎn)單,部署方便,提供命令行操作方式,主要適用于系統(tǒng)服務(wù)管理人員進(jìn)行簡(jiǎn)單的數(shù)據(jù)遷移操作;Sqoop2功能完善、操作簡(jiǎn)便,同時(shí)支持多種訪(fǎng)問(wèn)模式(命令行操作、Web訪(fǎng)問(wèn)、Rest API),引入角色安全機(jī)制增加安全性等多種優(yōu)點(diǎn),但是結(jié)構(gòu)復(fù)雜,配置部署更加繁瑣。

Sqoop原理

Sooop是傳統(tǒng)關(guān)系數(shù)據(jù)庫(kù)服務(wù)器與Hadoop間進(jìn)行數(shù)據(jù)同步的工具,其底層利用MapReduce并行計(jì)算模型以批處理方式加快了數(shù)據(jù)傳輸速度,并且具有較好的容錯(cuò)性功能,工作流程如下圖所示。

Sqoop工作原理
Sqoop工作流程

從上圖中可以看出,通過(guò)客戶(hù)端CLI(命令行界面)方式或Java API方式調(diào)用Sqoop工具,Sqoop可以將指令轉(zhuǎn)換為對(duì)應(yīng)的MapReduce作業(yè)(通常只涉及Map任務(wù),每個(gè)Map任務(wù)從數(shù)據(jù)庫(kù)中讀取一片數(shù)據(jù),這樣多個(gè)Map任務(wù)實(shí)現(xiàn)并發(fā)地復(fù)制,可以快速地將整個(gè)數(shù)據(jù)復(fù)制到HDFS上),然后將關(guān)系數(shù)據(jù)庫(kù)和Hadoop中的數(shù)據(jù)進(jìn)行相互轉(zhuǎn)換,從而完成數(shù)據(jù)的遷移。

可以說(shuō),Sqoop是關(guān)系數(shù)據(jù)庫(kù)與Hadoop 之間的數(shù)據(jù)橋梁,這個(gè)橋梁的重要組件是Sgoop連接器,它用于實(shí)現(xiàn)與各種關(guān)系數(shù)據(jù)庫(kù)的連接,從而實(shí)現(xiàn)數(shù)據(jù)的導(dǎo)人和導(dǎo)出操作。

Sqoop連接器能夠支持大多數(shù)常用的關(guān)系數(shù)據(jù)庫(kù),如MySQL、Oracle、DB2和SQL Server等,同時(shí)它還有一個(gè)通用的JDBC連接器,用于連接支持JDBC協(xié)議的數(shù)據(jù)庫(kù)。


1.導(dǎo)入原理

在導(dǎo)人數(shù)據(jù)之前,Sqoop使用JDBC檢查導(dǎo)人的數(shù)據(jù)表,檢索出表中的所有列以及列的SQL數(shù)據(jù)類(lèi)型,并將這些SQL類(lèi)型映射為Java數(shù)據(jù)類(lèi)型,在轉(zhuǎn)換后的MapReduce應(yīng)用中使用這些對(duì)應(yīng)的Java類(lèi)型來(lái)保存字段的值,Sqoop的代碼生成器使用這些信息來(lái)創(chuàng)建對(duì)應(yīng)表的類(lèi),用于保存從表中抽取的記錄。


2.導(dǎo)出原理

在導(dǎo)出數(shù)據(jù)之前,Sqoop會(huì)根據(jù)數(shù)據(jù)庫(kù)連接字符串來(lái)選擇一個(gè)導(dǎo)出方法,對(duì)于大部分系統(tǒng)來(lái)說(shuō),Sqoop會(huì)選擇JDBC。Sqoop會(huì)根據(jù)目標(biāo)表的定義生成一個(gè)Java類(lèi),這個(gè)生成的類(lèi)能夠從文本中解析出記錄數(shù)據(jù),并能夠向表中插人類(lèi)型合適的值,然后啟動(dòng)一個(gè)MapReduce作業(yè),從HDFS中讀取源數(shù)據(jù)文件,使用生成的類(lèi)解析出記錄,并且執(zhí)行選定的導(dǎo)出方法。



猜你喜歡:

Hadoop怎樣實(shí)現(xiàn)二次排序?

Hadoop有幾種運(yùn)行模式?各種模式都有哪些特性?

Hadoop安裝步驟講解,安裝目錄的內(nèi)容和作用是什么?

怎樣在hadoop虛擬機(jī)上安裝和配置JDK?

黑馬程序員Python+大數(shù)據(jù)開(kāi)發(fā)培訓(xùn)課程

分享到:
在線(xiàn)咨詢(xún) 我要報(bào)名
和我們?cè)诰€(xiàn)交談!