真正了解sqoop的一切

一.sqoop的簡單概論

1.sqoop產(chǎn)生的原因:

A. 多數(shù)使用hadoop技術(shù)的處理大數(shù)據(jù)業(yè)務(wù)的企業(yè)拒担,有大量的數(shù)據(jù)存儲(chǔ)在關(guān)系型數(shù)據(jù)中鲤孵。

B. 由于沒有工具支持兆旬,對hadoop和關(guān)系型數(shù)據(jù)庫之間數(shù)據(jù)傳輸是一個(gè)很困難的事脖岛。

依據(jù)以上的原因sqoop產(chǎn)生的舍沙。

2. sqoop的介紹

sqoop是連接關(guān)系型數(shù)據(jù)庫和hadoop的橋梁近上,主要有兩個(gè)方面(導(dǎo)入和導(dǎo)出):

A. 將關(guān)系型數(shù)據(jù)庫的數(shù)據(jù)導(dǎo)入到Hadoop 及其相關(guān)的系統(tǒng)中,如 Hive和HBase

B. 將數(shù)據(jù)從Hadoop 系統(tǒng)里抽取并導(dǎo)出到關(guān)系型數(shù)據(jù)庫

導(dǎo)出和導(dǎo)入

3.Sqoop的優(yōu)點(diǎn):

A. 可以高效拂铡、可控的利用資源壹无,可以通過調(diào)整任務(wù)數(shù)來控制任務(wù)的并發(fā)度。

B. 可以自動(dòng)的完成數(shù)據(jù)映射和轉(zhuǎn)換感帅。由于導(dǎo)入數(shù)據(jù)庫是有類型的斗锭,它可以自動(dòng)根據(jù)數(shù)據(jù)庫中的類型轉(zhuǎn)換到Hadoop 中,當(dāng)然用戶也可以自定義它們之間的映射關(guān)系

C.支持多種數(shù)據(jù)庫失球,如mysql岖是,orcale等數(shù)據(jù)庫

4. sqoop工作的機(jī)制:

將導(dǎo)入或?qū)С雒罘g成MapReduce程序來實(shí)現(xiàn)在翻譯出的,MapReduce 中主要是對InputFormat和OutputFormat進(jìn)行定制

5. sqoop版本介紹:sqoop1和sqoop2

A. sqoop的版本sqoop1和sqoop2是兩個(gè)不同的版本,它們是完全不兼容的

B. 版本劃分方式: apache1.4.X之后的版本是1,1.99.0之上的版本是2

C. Sqoop2相比sqoop1的優(yōu)勢有:

1) 它引入的sqoop Server实苞,便于集中化的管理Connector或者其它的第三方插件豺撑;

2) 多種訪問方式:CLI、Web UI黔牵、REST API聪轿;

3) 它引入了基于角色的安全機(jī)制,管理員可以在sqoop Server上配置不同的角色猾浦。

D. Sqoop2和sqoop1的功能性對比:

功能性對比

E. sqoop1和sqoop2的架構(gòu)區(qū)別:

1)sqoop1的架構(gòu)圖:

sqoop1的架構(gòu)圖

版本號(hào):1.4.X以后的sqoop1

在架構(gòu)上:sqoop1使用sqoop客戶端直接提交代碼方式

訪問方式:CLI命令行控制臺(tái)方式訪問

安全性:命令或者腳本指定用戶數(shù)據(jù)庫名和密碼

原理:Sqoop工具接收到客戶端的shell命令或者Java api命令后陆错,通過Sqoop中的任務(wù)翻譯器(Task Translator)將命令轉(zhuǎn)換為對應(yīng)的MapReduce任務(wù),而后將關(guān)系型數(shù)據(jù)庫和Hadoop中的數(shù)據(jù)進(jìn)行相互轉(zhuǎn)移金赦,進(jìn)而完成數(shù)據(jù)的拷貝

2)sqoop2架構(gòu)圖:

sqoop2架構(gòu)圖

版本號(hào):1.99.X以上的版本sqoop2

在架構(gòu)上:sqoop2引入了 sqoop server,對對connector實(shí)現(xiàn)了集中的管理訪問方式:REST API音瓷、 JAVA API、 WEB UI以及CLI控制臺(tái)方式進(jìn)行訪問?

CLI方式訪問夹抗,會(huì)通過交互過程界面绳慎,輸入的密碼信息會(huì)被看到,同時(shí)Sqoop2引入基亍角色的安全機(jī)制兔朦,Sqoop2比Sqoop多了一個(gè)Server端偷线。

F. Sqoop1和sqoop2優(yōu)缺點(diǎn):

sqoop1優(yōu)點(diǎn):架構(gòu)部署簡單

sqoop1缺點(diǎn):命令行方式容易出錯(cuò),格式緊耦合沽甥,無法支持所有數(shù)據(jù)類型声邦,安全機(jī)制不夠完善,例如密碼暴漏摆舟,安裝需要root權(quán)限亥曹,connector必須符合JDBC模型

sqoop2優(yōu)點(diǎn):多種交互方式邓了,命令行,web UI媳瞪,rest API骗炉,conncetor集中化管理,所有的鏈接安裝在sqoop server上蛇受,完善權(quán)限管理機(jī)制句葵,connector規(guī)范化,僅僅負(fù)責(zé)數(shù)據(jù)的讀寫

sqoop2缺點(diǎn):sqoop2的缺點(diǎn)兢仰,架構(gòu)稍復(fù)雜乍丈,配置部署更繁瑣

二.安裝sqoop1:

1. 安裝前提:

Sqoop需要安裝在hive,hbase的服務(wù)器上把将,linux環(huán)境中必須有java和hadoop環(huán)境

Java 1.8.0_161

Hadoop ?2.8.5

2. 下載軟件:

軟件下載地址:http://mirrors.hust.edu.cn/apache/sqoop

此處下載的軟件是sqoop1的軟件包:sqoop-1.4.7.bin__hadoop-2.6.0.tar.gz

3. 安裝sqoop:

A. 解壓:

tar xf sqoop-1.4.7.bin__hadoop-2.6.0.tar.gz

mv sqoop-1.4.7.bin__hadoop-2.6.0 /usr/local/sqoop

B. 修改配置文件:

cd /usr/local/sqoop/conf

cp sqoop-env-template.sh ?sqoop-env.sh

vim ?sqoop-env.sh

export HADOOP_COMMON_HOME=/usr/local/hadoop

export HADOOP_MAPRED_HOME=/usr/local/hadoop

export HIVE_HOME=/usr/local/hive

注意:為什么在sqoop-env.sh文件中會(huì)要求分別進(jìn)行 common和mapreduce的配置呢

在apache的hadoop的安裝中四大組件都是安裝在同一個(gè)hadoop_home中的轻专,但是在CDH, HDP中, 這些組件都是可選的察蹲。在安裝hadoop的時(shí)候请垛,可以選擇性的只安裝HDFS或者YARN。CDH,HDP在安裝hadoop的時(shí)候洽议,會(huì)把HDFS和MapReduce有可能分別安裝在不同的地方宗收。

CDH(Cloudera’s Distribution, including Apache Hadoop),是Hadoop眾多分支中的一種绞铃,由Cloudera維護(hù)镜雨,基于穩(wěn)定版本的Apache Hadoop構(gòu)建,并集成了很多補(bǔ)丁儿捧,可直接用于生產(chǎn)環(huán)境

HDP(Hortonworks Data Platform)是hortworks推出的100%開源的hadoop發(fā)行版本,以YARN 作為其架構(gòu)中心荚坞,包含pig、hive菲盾、phoniex颓影、hbase、storm懒鉴、spark等大量組件诡挂,在最新的2.4版本,監(jiān)控UI實(shí)現(xiàn)與grafana集成

C. 將mysql的驅(qū)動(dòng)包放到sqoop的lib目錄下

cp ?mysql-connector-java-5.1.46.jar /usr/local/sqoop/lib

D. 修改環(huán)境變量:

export SQOOP_HOME=/usr/local/sqoop

export PATH=$SQOOP_HOME/bin:$PATH

4.安裝顯示:

安裝成功顯示

三.Sqoop的使用

1. 查看數(shù)據(jù)庫的名稱:

sqoop list-databases --connect jdbc:mysql://ip:3306/ --username 用戶名--password 密碼

2. 列舉出數(shù)據(jù)庫中的表名:

sqoop list-tables --connect jdbc:mysql://ip:3306/數(shù)據(jù)庫名稱?--username 用戶名?--password 密碼

3. 導(dǎo)入:

sqoop import ?

--connect jdbc:mysql://ip:3306/databasename ?#指定JDBC的URL 其中database指的是(Mysql或者Oracle)中的數(shù)據(jù)庫名

--table ?tablename ?#要讀取數(shù)據(jù)庫database中的表名???????????

--username root ?????#用戶名?

--password ?123456 ?#密碼????

--target-dir ??/path ?#指的是HDFS中導(dǎo)入表的存放目錄(注意:是目錄)

--fields-terminated-by '\t' ??#設(shè)定導(dǎo)入數(shù)據(jù)后每個(gè)字段的分隔符临谱,默認(rèn)璃俗;分隔

--lines-terminated-by '\n'????#設(shè)定導(dǎo)入數(shù)據(jù)后每行的分隔符

--m 1 ?#并發(fā)的map數(shù)量1,如果不設(shè)置默認(rèn)啟動(dòng)4個(gè)map task執(zhí)行數(shù)據(jù)導(dǎo)入,則需要指定一個(gè)列來作為劃分map task任務(wù)的依據(jù)

-- where ’查詢條件‘ ??#導(dǎo)入查詢出來的內(nèi)容悉默,表的子集

--incremental ?append ?#增量導(dǎo)入

--check-column:column_id ??#指定增量導(dǎo)入時(shí)的參考列

--last-value:num ??#上一次導(dǎo)入column_id的最后一個(gè)值

--null-string ‘’ ??#導(dǎo)入的字段為空時(shí)城豁,用指定的字符進(jìn)行替換

以上導(dǎo)入到hdfs中

--hive-import ???#導(dǎo)入到hive

--hive-overwrite ??#可以多次寫入

--hive-database ?databasename ??#創(chuàng)建數(shù)據(jù)庫,如果數(shù)據(jù)庫不存在的必須寫抄课,默認(rèn)存放在default中

--create-hive-table ??#sqoop默認(rèn)自動(dòng)創(chuàng)建hive表

--delete-target-dir ?#刪除中間結(jié)果數(shù)據(jù)目錄

--hive-table tablename ??#創(chuàng)建表名

4. 導(dǎo)入所有的表放到hdfs中:

sqoop import-all-tables ?--connect jdbc:mysql://ip:3306/庫名 --username 用戶名 ?--password ?密碼 ?--target-dir 導(dǎo)入存放的目錄

5. 導(dǎo)出(目標(biāo)表必須在mysql數(shù)據(jù)庫中已經(jīng)建好唱星,數(shù)據(jù)存放在hdfs中):

sqoop export

--connect jdbs:mysql://ip:3600/庫名 #指定JDBC的URL 其中database指的是(Mysql或者Oracle)中的數(shù)據(jù)庫名

--username用戶名 ?#數(shù)據(jù)庫的用戶名

--password密碼 ????#數(shù)據(jù)庫的密碼

--table表名 ???????#需要導(dǎo)入到數(shù)據(jù)庫中的表名

--export-dir導(dǎo)入數(shù)據(jù)的名稱 ???#hdfs上的數(shù)據(jù)文件

--fields-terminated-by ‘\t’ ??????#HDFS中被導(dǎo)出的文件字段之間的分隔符

--lines-terminated-by '\n'????#設(shè)定導(dǎo)入數(shù)據(jù)后每行的分隔符

--m 1 ?#并發(fā)的map數(shù)量1,如果不設(shè)置默認(rèn)啟動(dòng)4個(gè)map task執(zhí)行數(shù)據(jù)導(dǎo)入雳旅,則需要指定一個(gè)列來作為劃分map task任務(wù)的依據(jù)

--incremental ?append ?#增量導(dǎo)入

--check-column:column_id ??#指定增量導(dǎo)入時(shí)的參考列

--last-value:num ??#上一次導(dǎo)入column_id的最后一個(gè)值

--null-string ‘’ ??#導(dǎo)出的字段為空時(shí),用指定的字符進(jìn)行替換

6. 創(chuàng)建和維護(hù)sqoop作業(yè):sqoop作業(yè)創(chuàng)建并保存導(dǎo)入和導(dǎo)出命令间聊。

A.創(chuàng)建作業(yè):

sqoop job --create作業(yè)名 -- import --connect jdbc:mysql://ip:3306/數(shù)據(jù)庫 --username 用戶名 --table 表名 --password 密碼 --m 1 --target-dir ?存放目錄

注意加粗的地方是有空格的

B. 驗(yàn)證作業(yè)(顯示已經(jīng)保存的作業(yè)):

sqoop job ?--list

C. 顯示作業(yè)詳細(xì)信息:

sqoop ?job --show作業(yè)名稱

D.刪除作業(yè):

sqoop ?job ?--delete作業(yè)名

E. 執(zhí)行作業(yè):

sqoop ?job --exec作業(yè)

7. eval:它允許用戶針對各自的數(shù)據(jù)庫服務(wù)器執(zhí)行用戶定義的查詢攒盈,并在控制臺(tái)中預(yù)覽結(jié)果,可以使用期望導(dǎo)入結(jié)果數(shù)據(jù)哎榴。

A.選擇查詢:

sqoop eval -connect jdbc:mysql://ip:3306/數(shù)據(jù)庫 --username 用戶名 ?--password 密碼 --query ”select * from emp limit 1“

選擇查詢

B.插入查詢:

sqoop eval ?jdbc:mysql://ip:3306/數(shù)據(jù)庫 --username 用戶名 ?--password 密碼?--query "insert into emp values(4,'ceshi','hebei')"

插入查詢

8.codegen:從面向?qū)ο蟮膽?yīng)用程序的角度來看碍扔,每個(gè)數(shù)據(jù)庫表都有一個(gè)DAO類酸些,它包含用于初始化對象的'getter'和'setter'方法汽馋。該工具(-codegen)自動(dòng)生成DAO類醉拓。

它根據(jù)表模式結(jié)構(gòu)在Java中生成DAO類。Java定義被實(shí)例化為導(dǎo)入過程的一部分驼壶。這個(gè)工具的主要用途是檢查Java是否丟失了Java代碼。如果是這樣喉酌,它將使用字段之間的默認(rèn)分隔符創(chuàng)建Java的新版本,其實(shí)就是生成表名.java

語法:sqoop codegen --connectjdbc:mysql://ip:3306/數(shù)據(jù)庫 --username 用戶名 --table 表名 --m 1 --password 密碼

回顯中會(huì)顯示文件存放的位置热凹。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市泪电,隨后出現(xiàn)的幾起案子般妙,更是在濱河造成了極大的恐慌,老刑警劉巖相速,帶你破解...
    沈念sama閱讀 217,277評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件碟渺,死亡現(xiàn)場離奇詭異,居然都是意外死亡突诬,警方通過查閱死者的電腦和手機(jī)苫拍,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,689評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來旺隙,“玉大人绒极,你說我怎么就攤上這事∈呓荩” “怎么了垄提?”我有些...
    開封第一講書人閱讀 163,624評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長周拐。 經(jīng)常有香客問我铡俐,道長,這世上最難降的妖魔是什么妥粟? 我笑而不...
    開封第一講書人閱讀 58,356評(píng)論 1 293
  • 正文 為了忘掉前任审丘,我火速辦了婚禮,結(jié)果婚禮上罕容,老公的妹妹穿的比我還像新娘备恤。我一直安慰自己稿饰,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,402評(píng)論 6 392
  • 文/花漫 我一把揭開白布露泊。 她就那樣靜靜地躺著喉镰,像睡著了一般。 火紅的嫁衣襯著肌膚如雪惭笑。 梳的紋絲不亂的頭發(fā)上侣姆,一...
    開封第一講書人閱讀 51,292評(píng)論 1 301
  • 那天,我揣著相機(jī)與錄音沉噩,去河邊找鬼捺宗。 笑死,一個(gè)胖子當(dāng)著我的面吹牛川蒙,可吹牛的內(nèi)容都是我干的蚜厉。 我是一名探鬼主播,決...
    沈念sama閱讀 40,135評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼畜眨,長吁一口氣:“原來是場噩夢啊……” “哼昼牛!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起康聂,我...
    開封第一講書人閱讀 38,992評(píng)論 0 275
  • 序言:老撾萬榮一對情侶失蹤贰健,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后恬汁,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體伶椿,經(jīng)...
    沈念sama閱讀 45,429評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,636評(píng)論 3 334
  • 正文 我和宋清朗相戀三年氓侧,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了脊另。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,785評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡甘苍,死狀恐怖尝蠕,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情载庭,我是刑警寧澤看彼,帶...
    沈念sama閱讀 35,492評(píng)論 5 345
  • 正文 年R本政府宣布,位于F島的核電站囚聚,受9級(jí)特大地震影響靖榕,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜顽铸,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,092評(píng)論 3 328
  • 文/蒙蒙 一茁计、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧谓松,春花似錦星压、人聲如沸践剂。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,723評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽逊脯。三九已至,卻和暖如春竣贪,著一層夾襖步出監(jiān)牢的瞬間军洼,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,858評(píng)論 1 269
  • 我被黑心中介騙來泰國打工演怎, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留匕争,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,891評(píng)論 2 370
  • 正文 我出身青樓爷耀,卻偏偏與公主長得像甘桑,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子畏纲,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,713評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容

  • 1/列出mysql數(shù)據(jù)庫中的所有數(shù)據(jù)庫sqoop list-databases -connect jdbc:mys...
    時(shí)待吾閱讀 2,739評(píng)論 1 5
  • 1/列出mysql數(shù)據(jù)庫中的所有數(shù)據(jù)庫sqoop list-databases -connect jdbc:mys...
    時(shí)待吾閱讀 1,350評(píng)論 0 0
  • 上節(jié)課學(xué)習(xí)了Hadoop集群測試扇住,這節(jié)課我們一起學(xué)習(xí)一下Sqoop,Sqoop是專門用來遷移數(shù)據(jù)的盗胀,它可以把數(shù)據(jù)庫...
    文子軒閱讀 6,923評(píng)論 1 9
  • Apache Sqoop is a tool designed for efficiently transferr...
    白面葫蘆娃92閱讀 1,377評(píng)論 0 0
  • 最近看了一本書《荷爾蒙戰(zhàn)爭》,顛覆了我對性別差異的認(rèn)知锄贼。作者認(rèn)為人類世界過去對男女性別差異是源于生理構(gòu)造的不...
    紫夜星沙閱讀 817評(píng)論 0 12