Sqoop安裝和使用

Sqoop的安裝和使用

所用環(huán)境的版本:

  • CentOS 7.9
  • Hadoop 2.9.2(已搭建集群)
  • Hive 2.3.6
  • Mysql 5.7.28

一:概述

  1. Sqoop 是 apache 旗下一款“Hadoop 和關(guān)系數(shù)據(jù)庫(kù)服務(wù)器之間傳送數(shù)據(jù)”的工具。

  2. 核心的功能有兩個(gè):導(dǎo)入夹界、導(dǎo)出

  3. 本文檔用于記錄 Sqoop的安裝和使用搀崭。

建議先配置好Hadoop的JobHistory節(jié)點(diǎn)兆龙,以便于在Web中的Yarn界面查看MapReduce任務(wù)日志信息。

二:Sqoop安裝

1.前提概述

  • Sqoop就是一個(gè)工具贤牛, 只需要在一個(gè)節(jié)點(diǎn)上進(jìn)行安裝即可靠汁。
  • 你安裝的Sqoop軟件的節(jié)點(diǎn)一定要包含你要使用的集群或者軟件系統(tǒng)的安裝包

2. 軟件下載

下載地址:點(diǎn)擊此處打開Sqoop下載鏈接

注意:

  1. 下載sqoop-xx.bin__xx.tar.gz的安裝壓縮包。

  2. Sqoop 1 和Sqoop 2不兼容健提,且絕大部分企業(yè)所使用的Sqoop的版本是 Sqoop 1。

    ? 1.4.7版本的為Sqoop 1

    ? 1.99.7版本的為Sqoop 2

三:安裝

1.創(chuàng)建sqoop安裝目錄

mkdir /usr/local/sqoop

2.解壓安裝包到指定目錄

上傳解壓縮安裝包到指定目錄(此處跳過(guò)了Ftp傳輸步驟)伟叛。

因?yàn)橹癶ive只是安裝在hadoop1機(jī)器上私痹,所以Sqoop也同樣安裝在hadoop1機(jī)器上。

tar -zxvf sqoop-1.4.7.bin__hadoop-2.6.0.tar.gz /usr/local/sqoop

3.修改配置文件

  1. 進(jìn)入到 conf 文件夾中,復(fù)制sqoop-env-template.sh紊遵,并將其修改為sqoop-env.sh

    cp sqoop-env-template.sh sqoop-env.sh
    
  2. 修改sqoop-env.sh

    vi sqoop-env.sh
    
    export HADOOP_MAPRED_HOME=/usr/local/hadoop/hadoop-2.9.2         #Hadoop的MapReduce安裝路徑
    export HADOOP_COMMON_HOME=/usr/local/hadoop/hadoop-2.9.2         #Hadoop的Common安裝路徑
    export HIVE_HOME=/usr/local/hive/hive                              #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有可能分別安裝在不同的地方会放。

  3. 將Mysql驅(qū)動(dòng)包放到 lib 文件夾下

    cp mysql-connector-java-5.1.48-bin.jar /usr/local/sqoop/sqoop-1.4.7/lib/
    
  4. 配置環(huán)境變量

    vi /etc/profile
    
    #在末尾處添加以下行
    export SQOOP_HOME=/usr/local/sqoop/sqoop-1.4.7
    export PATH=${PATH}:${SQOOP_HOME}/bin
    
    #使文件生效
    source /etc/profile
    
  5. 驗(yàn)證是否安裝成功

    sqoop version
    

四:Sqoop的基本命令

#查看命令
sqoop help

#運(yùn)行結(jié)果:
usage: sqoop COMMAND [ARGS]

Available commands:
                            #生成與數(shù)據(jù)庫(kù)記錄交互的代碼
  codegen            Generate code to interact with database records
                            #將表定義導(dǎo)入到Hive中
  create-hive-table  Import a table definition into Hive
                            #計(jì)算一個(gè)SQL語(yǔ)句并顯示結(jié)果,可以用來(lái)校驗(yàn)下import的查詢條件是否正確钉凌。
  eval               Evaluate a SQL statement and display the results
                            #將HDFS目錄導(dǎo)出到數(shù)據(jù)庫(kù)表
  export             Export an HDFS directory to a database table
                            #可用命令列表
  help               List available commands
                            #將表從數(shù)據(jù)庫(kù)導(dǎo)入到HDFS
  import             Import a table from a database to HDFS
                            #將所有表從數(shù)據(jù)庫(kù)導(dǎo)入到HDFS
  import-all-tables  Import tables from a database to HDFS
                            #從大型機(jī)服務(wù)器導(dǎo)入數(shù)據(jù)集到HDFS
  import-mainframe   Import datasets from a mainframe server to HDFS
                            #將Import任務(wù)保存為job咧最,可以理解為起了個(gè)別名,這樣方便的Sqoop任務(wù)的管理御雕。
  job                Work with saved jobs
                            #列出服務(wù)器上可用的數(shù)據(jù)庫(kù)
  list-databases     List available databases on a server
                            #列出數(shù)據(jù)庫(kù)上可用的b表
  list-tables        List available tables in a database
                            #增量導(dǎo)入的合并結(jié)果
  merge              Merge results of incremental imports
                            #運(yùn)行一個(gè)獨(dú)立的Sqoop metastore
  metastore          Run a standalone Sqoop metastore
                            #顯示sqoop的版本
  version            Display version information

See 'sqoop help COMMAND' for information on a specific command.

五:Sqoop的基本使用

執(zhí)行Sqoop命令時(shí)矢沿,請(qǐng)登錄對(duì)hadoop有操作權(quán)限的系統(tǒng)用戶,否則會(huì)報(bào)沒有權(quán)限等錯(cuò)誤酸纲。

以下命令中出現(xiàn)的\為連接符捣鲸,連接下一句命令,在實(shí)際操作中也可使用闽坡。


列出Mysql中有哪些數(shù)據(jù)庫(kù)

sqoop list-databases \
-connect jdbc:mysql://localhost:3306/ \
-username root \
-password root

列出Mysql中指定數(shù)據(jù)庫(kù)的表

sqoop list-tables \
-connect jdbc:mysql://localhost:3306/sqoop_test \
-username root \
-password root

創(chuàng)建一張跟sqoop_test庫(kù)中user表結(jié)構(gòu)一樣的hive表hive_user

此處需要將 hive 中的hive-common-2.3.6.jar包復(fù)制到 sqoop 的 lib 文件夾下栽惶,否則會(huì)報(bào) java.lang.ClassNotFoundException: org.apache.hadoop.hive.conf.HiveConf

sqoop create-hive-table \
-connect jdbc:mysql://localhost:3306/sqoop_test \
-username root \
-password root \
-table user \
-hive-table hive_user                   #要?jiǎng)?chuàng)建的hive表名

創(chuàng)建完后可登錄hive查看,以下為所執(zhí)行的命令:

hive                                                #登錄Hive
show databases;                             #查看數(shù)據(jù)庫(kù)
use default;                                    #選擇數(shù)據(jù)庫(kù),由于上面沒有指定數(shù)據(jù)庫(kù)疾嗅,所以在默認(rèn)數(shù)據(jù)庫(kù)中創(chuàng)建了表
show tables;                                    #列出Default數(shù)據(jù)庫(kù)中的所有表

Mysql→HDFS:從Mysql導(dǎo)入到HDFS

sqoop import \
-connect jdbc:mysql://{數(shù)據(jù)庫(kù)IP}:3306/{數(shù)據(jù)庫(kù)}?autoReconnect=true \         #數(shù)據(jù)庫(kù)連接
-driver com.mysql.jdbc.Driver   \                                                       #數(shù)據(jù)庫(kù)驅(qū)動(dòng)
-username root  \                                                                           #數(shù)據(jù)庫(kù)用戶名
-password root  \                                                                           #數(shù)據(jù)庫(kù)密碼
-table user \                                                                               #數(shù)據(jù)庫(kù)表
-target-dir /user/admin/temp/sqoop-import   \                                       #導(dǎo)入到HDFS的目標(biāo)目錄
-fields-terminated-by ','   \                                                           #按什么分隔
-m 1                                                                                            #MapReduce執(zhí)行任務(wù)數(shù)

拓展命令(在導(dǎo)出中同樣適用):

-where "name = 'ZhangSan'"                                                              #帶Where條件導(dǎo)入
-columns "name"                                                                             #導(dǎo)入指定列
#自定義Sql查詢外厂,導(dǎo)入查詢后數(shù)據(jù)
-query 'select * from mysql.help_keyword where $CONDITIONS and name = "STRING"'                 
-split-by ‘id’                                                                              #主鍵
-incremental  append                                                                    #增量導(dǎo)入

在需要按照自定義SQL語(yǔ)句導(dǎo)出數(shù)據(jù)到HDFS的情況下:

  • 引號(hào)問(wèn)題,要么外層使用單引號(hào)代承,內(nèi)層使用雙引號(hào)汁蝶,CONDITIONS的符號(hào)不用轉(zhuǎn)義, 要么外層使用雙引號(hào)论悴,那么內(nèi)層使用單引號(hào)掖棉,然后CONDITIONS的符號(hào)需要轉(zhuǎn)義。
  • 自定義的SQL語(yǔ)句中必須帶有WHERE $CONDITIONS

HDFS→Mysql:從HDFS中導(dǎo)出到Mysql

sqoop export \
-connect jdbc:mysql://{數(shù)據(jù)庫(kù)IP}:3306/{數(shù)據(jù)庫(kù)}?autoReconnect=true \            #數(shù)據(jù)庫(kù)連接
-driver com.mysql.jdbc.Driver   \                                                           #數(shù)據(jù)庫(kù)驅(qū)動(dòng)
-username root  \                                                                               #數(shù)據(jù)庫(kù)用戶名
-password root  \                                                                               #數(shù)據(jù)庫(kù)密碼
-table sqoop_test   \                                                                           #數(shù)據(jù)庫(kù)表
-export-dir /user/admin/temp/sqoop-import   \                                           #導(dǎo)出HDFS的目標(biāo)目錄到Mysql
-fields-terminated-by ','   \                                                               #按什么分隔
-split-by id    \                                                                               #主鍵
-m 1                                                                                                #MapReduce執(zhí)行任務(wù)數(shù)

記錄問(wèn)題:

  • 數(shù)據(jù)庫(kù)連接處**必須帶上 **autoReconnect=true 屬性膀估;
  • 若數(shù)據(jù)庫(kù)連接帶上了 serverTimezone=UTC 屬性幔亥,則會(huì)導(dǎo)致后面語(yǔ)法報(bào)未找到命令錯(cuò)誤
    • 如果Mysql為8.0的版本玖像,同樣不需要帶上這個(gè)屬性;
  • 導(dǎo)入導(dǎo)出時(shí)需帶上 -driver命令,否則有可能會(huì)導(dǎo)致出現(xiàn)數(shù)據(jù)庫(kù)連接失敗錯(cuò)誤捐寥;
    • 如果Mysql為8.0的版本笤昨,需要更改為8.0驅(qū)動(dòng)包:com.mysql.cj.jdbc.Driver
  • 執(zhí)行命令時(shí)必須帶上-split-by或者-m 1命令,否則會(huì)報(bào)錯(cuò)握恳;
  • -fields-terminated-by命令表示 數(shù)據(jù)庫(kù)中的列在導(dǎo)入文本中按照什么字符分隔瞒窒,如上面例子中的 ;

Mysql→Hive:從Mysql導(dǎo)入到Hive中

導(dǎo)入過(guò)程:先導(dǎo)入到 hdfs乡洼,然后再 load 進(jìn)入 hive

普通導(dǎo)入:數(shù)據(jù)存儲(chǔ)在Hive默認(rèn)的default庫(kù)中崇裁,表名就是對(duì)應(yīng)的mysql的表名:

sqoop import   \
--connect jdbc:mysql://localhost:3306/sqoop_test   \            #數(shù)據(jù)庫(kù)連接
--username root  \                                                      #數(shù)據(jù)庫(kù)用戶名
--password root   \                                                     #數(shù)據(jù)庫(kù)密碼
--table user   \                                                            #數(shù)據(jù)庫(kù)表
--hive-import \                                                         #導(dǎo)入路徑
-m 1                                                                            #任務(wù)并發(fā)數(shù)

查看 Hive 中的數(shù)據(jù)

hadoop fs -cat /user/hive/warehouse/user/part-m-00000           #user就是表名

拓展命令:

-fields-terminated-by ","                                   #數(shù)據(jù)按什么分隔
-lines-terminated-by "\n"                                   #行數(shù)按什么分隔
-hive-overwrite                                                     #指定覆蓋導(dǎo)入
-create-hive-table                                                  #指定自動(dòng)創(chuàng)建hive表
-delete-target-dir                                              #指定刪除中間結(jié)果數(shù)據(jù)目錄
-hive-database  mydb_test                                       #指定Hive數(shù)據(jù)庫(kù)
-hive-table new_user                                                #指定表名
-incremental  append                                            #增量導(dǎo)入

當(dāng)指定Hive數(shù)據(jù)庫(kù)時(shí)束昵,必須先創(chuàng)建該數(shù)據(jù)庫(kù)拔稳,否則會(huì)報(bào)Database does not exist: xx數(shù)據(jù)庫(kù)不存在。

從Hive導(dǎo)出到Mysql的步驟 和 從HDFS導(dǎo)出到Mysql的步驟 一致锹雏。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末巴比,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子礁遵,更是在濱河造成了極大的恐慌轻绞,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,826評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件佣耐,死亡現(xiàn)場(chǎng)離奇詭異政勃,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)兼砖,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,968評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門奸远,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人掖鱼,你說(shuō)我怎么就攤上這事然走。” “怎么了戏挡?”我有些...
    開封第一講書人閱讀 164,234評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵芍瑞,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我褐墅,道長(zhǎng)拆檬,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,562評(píng)論 1 293
  • 正文 為了忘掉前任妥凳,我火速辦了婚禮竟贯,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘逝钥。我一直安慰自己屑那,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,611評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著持际,像睡著了一般沃琅。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上蜘欲,一...
    開封第一講書人閱讀 51,482評(píng)論 1 302
  • 那天益眉,我揣著相機(jī)與錄音,去河邊找鬼姥份。 笑死郭脂,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的澈歉。 我是一名探鬼主播展鸡,決...
    沈念sama閱讀 40,271評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼闷祥!你這毒婦竟也來(lái)了娱颊?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,166評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤凯砍,失蹤者是張志新(化名)和其女友劉穎箱硕,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體悟衩,經(jīng)...
    沈念sama閱讀 45,608評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡剧罩,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,814評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了座泳。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片惠昔。...
    茶點(diǎn)故事閱讀 39,926評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖挑势,靈堂內(nèi)的尸體忽然破棺而出镇防,到底是詐尸還是另有隱情,我是刑警寧澤潮饱,帶...
    沈念sama閱讀 35,644評(píng)論 5 346
  • 正文 年R本政府宣布来氧,位于F島的核電站,受9級(jí)特大地震影響香拉,放射性物質(zhì)發(fā)生泄漏啦扬。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,249評(píng)論 3 329
  • 文/蒙蒙 一凫碌、第九天 我趴在偏房一處隱蔽的房頂上張望扑毡。 院中可真熱鬧,春花似錦盛险、人聲如沸瞄摊。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,866評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)换帜。三九已至赐写,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間膜赃,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,991評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工揉忘, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留跳座,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,063評(píng)論 3 370
  • 正文 我出身青樓泣矛,卻偏偏與公主長(zhǎng)得像疲眷,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子您朽,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,871評(píng)論 2 354

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

  • 1/列出mysql數(shù)據(jù)庫(kù)中的所有數(shù)據(jù)庫(kù)sqoop list-databases -connect jdbc:mys...
    時(shí)待吾閱讀 2,739評(píng)論 1 5
  • 一狂丝、Python簡(jiǎn)介和環(huán)境搭建以及pip的安裝 4課時(shí)實(shí)驗(yàn)課主要內(nèi)容 【Python簡(jiǎn)介】: Python 是一個(gè)...
    _小老虎_閱讀 5,746評(píng)論 0 10
  • Apache Sqoop 概述 使用Hadoop來(lái)分析和處理數(shù)據(jù)需要將數(shù)據(jù)加載到集群中并且將它和企業(yè)生產(chǎn)數(shù)據(jù)庫(kù)中的...
    和心數(shù)據(jù)閱讀 1,305評(píng)論 0 8
  • Sqoop是一種用于在Hadoop和關(guān)系數(shù)據(jù)庫(kù)或大型機(jī)之間傳輸數(shù)據(jù)的工具。您可以使用Sqoop從關(guān)系數(shù)據(jù)庫(kù)管理系統(tǒng)...
    糧憶雨閱讀 2,146評(píng)論 0 2
  • 一哗总、什么是Sqoop Sqoop是一個(gè)在結(jié)構(gòu)化數(shù)據(jù)和Hadoop之間進(jìn)行批量數(shù)據(jù)遷移的工具几颜,結(jié)構(gòu)化數(shù)據(jù)可以是Mys...
    data之道閱讀 35,596評(píng)論 4 29