更新時(shí)間:2022-01-05 來源:黑馬程序員 瀏覽量:
Sqoop是Apache旗下的一款開源工具,該項(xiàng)目開始于2009年,最早是作為Hadoop的一個(gè)第三方模塊存在,后來為了讓使用者能夠快速部署,也為了讓開發(fā)人員能夠更快速的迭代開發(fā),并在2013年,獨(dú)立成為Apache的一個(gè)頂級(jí)開源項(xiàng)目。
Sqoop主要用于在Hadoop和關(guān)系數(shù)據(jù)庫或大型機(jī)之間傳輸數(shù)據(jù),可以使用Sqoop工具將數(shù)據(jù)從關(guān)系數(shù)據(jù)庫管理系統(tǒng)導(dǎo)入(import)到Hadoop分布式文件系統(tǒng)中,或者將Hadoop中的數(shù)據(jù)轉(zhuǎn)換導(dǎo)出(export)到關(guān)系數(shù)據(jù)庫管理系統(tǒng),其功能如下圖所示。
目前Sqoop主要分為Sqoop1和Sqoop2兩個(gè)版本,其中,版本號(hào)為1.4.x屬于Sqoop1,而版本號(hào)為1.99.x的屬于Sqoop2。這兩個(gè)版本開發(fā)時(shí)的定位方向不同,體系結(jié)構(gòu)具有很大的差異,因此它們之間互不兼容。
Sqoop1功能結(jié)構(gòu)簡(jiǎn)單,部署方便,提供命令行操作方式,主要適用于系統(tǒng)服務(wù)管理人員進(jìn)行簡(jiǎn)單的數(shù)據(jù)遷移操作;Sqoop2功能完善、操作簡(jiǎn)便,同時(shí)支持多種訪問模式(命令行操作、Web訪問、Rest API),引入角色安全機(jī)制增加安全性等多種優(yōu)點(diǎn),但是結(jié)構(gòu)復(fù)雜,配置部署更加繁瑣。
Sooop是傳統(tǒng)關(guān)系數(shù)據(jù)庫服務(wù)器與Hadoop間進(jìn)行數(shù)據(jù)同步的工具,其底層利用MapReduce并行計(jì)算模型以批處理方式加快了數(shù)據(jù)傳輸速度,并且具有較好的容錯(cuò)性功能,工作流程如下圖所示。
Sqoop工作流程
從上圖中可以看出,通過客戶端CLI(命令行界面)方式或Java API方式調(diào)用Sqoop工具,Sqoop可以將指令轉(zhuǎn)換為對(duì)應(yīng)的MapReduce作業(yè)(通常只涉及Map任務(wù),每個(gè)Map任務(wù)從數(shù)據(jù)庫中讀取一片數(shù)據(jù),這樣多個(gè)Map任務(wù)實(shí)現(xiàn)并發(fā)地復(fù)制,可以快速地將整個(gè)數(shù)據(jù)復(fù)制到HDFS上),然后將關(guān)系數(shù)據(jù)庫和Hadoop中的數(shù)據(jù)進(jìn)行相互轉(zhuǎn)換,從而完成數(shù)據(jù)的遷移。
可以說,Sqoop是關(guān)系數(shù)據(jù)庫與Hadoop 之間的數(shù)據(jù)橋梁,這個(gè)橋梁的重要組件是Sgoop連接器,它用于實(shí)現(xiàn)與各種關(guān)系數(shù)據(jù)庫的連接,從而實(shí)現(xiàn)數(shù)據(jù)的導(dǎo)人和導(dǎo)出操作。
Sqoop連接器能夠支持大多數(shù)常用的關(guān)系數(shù)據(jù)庫,如MySQL、Oracle、DB2和SQL Server等,同時(shí)它還有一個(gè)通用的JDBC連接器,用于連接支持JDBC協(xié)議的數(shù)據(jù)庫。
1.導(dǎo)入原理
在導(dǎo)人數(shù)據(jù)之前,Sqoop使用JDBC檢查導(dǎo)人的數(shù)據(jù)表,檢索出表中的所有列以及列的SQL數(shù)據(jù)類型,并將這些SQL類型映射為Java數(shù)據(jù)類型,在轉(zhuǎn)換后的MapReduce應(yīng)用中使用這些對(duì)應(yīng)的Java類型來保存字段的值,Sqoop的代碼生成器使用這些信息來創(chuàng)建對(duì)應(yīng)表的類,用于保存從表中抽取的記錄。
2.導(dǎo)出原理
在導(dǎo)出數(shù)據(jù)之前,Sqoop會(huì)根據(jù)數(shù)據(jù)庫連接字符串來選擇一個(gè)導(dǎo)出方法,對(duì)于大部分系統(tǒng)來說,Sqoop會(huì)選擇JDBC。Sqoop會(huì)根據(jù)目標(biāo)表的定義生成一個(gè)Java類,這個(gè)生成的類能夠從文本中解析出記錄數(shù)據(jù),并能夠向表中插人類型合適的值,然后啟動(dòng)一個(gè)MapReduce作業(yè),從HDFS中讀取源數(shù)據(jù)文件,使用生成的類解析出記錄,并且執(zhí)行選定的導(dǎo)出方法。
猜你喜歡:
Hadoop有幾種運(yùn)行模式?各種模式都有哪些特性?