溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

sqoop基本概念安裝測試(2017)

發(fā)布時間:2020-07-16 20:01:05 來源:網(wǎng)絡(luò) 閱讀:328 作者:馬吉輝 欄目:大數(shù)據(jù)

Sqoop(發(fā)音:skup)
是一款開源的工具,主要用于在Hadoop(Hive)與傳統(tǒng)的數(shù)據(jù)庫(mysql、postgresql...)間進(jìn)行數(shù)據(jù)的傳遞,可以將一個關(guān)系型數(shù)據(jù)庫(例如 : MySQL ,Oracle ,Postgres等)中的數(shù)據(jù)導(dǎo)進(jìn)到Hadoop的HDFS中,也可以將HDFS的數(shù)據(jù)導(dǎo)進(jìn)到關(guān)系型數(shù)據(jù)庫中。
進(jìn)行增量導(dǎo)入是與效率有關(guān)的最受關(guān)注的問題,因為Sqoop專門是為大數(shù)據(jù)集設(shè)計的。Sqoop支持增量更新,將新記錄添加到最近一次的導(dǎo)出的數(shù)據(jù)源上,或者指定上次修改的時間戳。
由于Sqoop將數(shù)據(jù)移入和移出關(guān)系型數(shù)據(jù)庫的能力,其對于Hive—Hadoop生態(tài)系統(tǒng)里的著名的類SQL數(shù)據(jù)倉庫—有專門的支持不足為奇。命令“create-hive-table”可以用來將數(shù)據(jù)表定義導(dǎo)入到Hive。

簡單的說:sqoop是一款數(shù)據(jù)遷移工具
工作機(jī)制:就是通過內(nèi)置一些數(shù)據(jù)導(dǎo)入導(dǎo)出的MR 程序,來為我們的數(shù)據(jù)遷移需求提供便利
sqoop :內(nèi)置了一下導(dǎo)入導(dǎo)出數(shù)據(jù)的mr程序

官方網(wǎng)址:http://sqoop.apache.org/
下載:http://archive.apache.org/dist/sqoop/

sqoop是一個工具,只要在一臺機(jī)器上安裝就可以了,要在hadoop環(huán)境中運行。
首先在官網(wǎng)上下載sqoop,然后上傳到linux中
解壓
tar -zxvf sqoop(壓縮包) -C /usr/local/apps
然后進(jìn)入到sqoop中進(jìn)行配置修改
cd conf/
修改sqoop-env-template.sh
首先,我們要修改sqoop-env-template.sh他的名稱
mv sqoop-env-template.sh sqoop-env.sh
然后我們編輯他
vi sqoop-env.sh

首先配置這個,也就是配置hadoop的安裝目錄

#Set path to where bin/hadoop is available
export HADOOP_COMMON_HOME=/usr/local/apps/hadoop-2.6.5

接下來配置mapreduce HOME 也就是hadoop的安裝路徑
#Set path to where hadoop-*-core.jar is available
export HADOOP_MAPRED_HOME=/usr/local/apps/hadoop-2.6.5

接下來配置hbase的安裝目錄
#set the path to where bin/hbase is available
export HBASE_HOME=/usr/local/apps/hbase-0.98.24-hadoop2

配置hive的安裝目錄
#Set the path to where bin/hive is available
export HIVE_HOME=/usr/local/apps/apache-hive-2.1.1-bin

最后配置zookeeper的conf目錄
#Set the path for where zookeper config dir is
export ZOOCFGDIR=/usr/local/apps/zookeeper-3.4.6/conf

保存退出
然后我們在把sqoop配置到我們系統(tǒng)的環(huán)境變量里面
vi /etc/profile
在最下面寫
export SQOOP_HOME=/usr/local/apps/sqoop-1.4.6.bin__hadoop-2.0.4-alpha
在PATH里面添加
export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$SQOOP_HOME/bin
保存退出
別忘了讓系統(tǒng)的環(huán)境變量生效一下
source /etc/profile

接下來我們來調(diào)用一下sqoop看能不能正常運行

注意:我們所有的安裝包和安裝目錄最好都安裝在root下面,在root下面新建一個安裝目錄apps
要不然系統(tǒng)會提示錯誤
Warning: /usr/local/apps/sqoop-1.4.6.bin__hadoop-2.0.4-alpha/../hcatalog does not exist! HCatalog jobs will fail.
Please set $HCAT_HOME to the root of your HCatalog installation.

sqoop中最常用的的兩個命令
import Import a table from a database to HDFS (把外部的數(shù)據(jù)庫中的表導(dǎo)入到hdfs中)
export Export an HDFS directory to a database table(把在hdfs中的表導(dǎo)出到sqoop中)‘

測試sqoop使用(會用就行)
第一類:數(shù)據(jù)庫中的數(shù)據(jù)導(dǎo)入到hdfs中
首先要確保hdfs和yarn都啟動起來
start-dfs.sh
start-yarn.sh
接下來我們運行sqoop的命令
sqoop import --connect jdbc:mysql://hadoop-server-00:3306/baba --username root --password root --table bbs_detail
他是放在了hdfs中
hadoop fs -ls /
hadoop fs -ls /user
hadoop fs -ls /user/root
hadoop fs -ls /user/root/bbs_detail
在這下面就是我們上傳的數(shù)據(jù) 他會把我們的上傳的數(shù)據(jù)基本平均分給幾個map去上傳默認(rèn)是分給4個map task去做
在沒有指點的情況下他會把我們上傳的數(shù)據(jù)上傳到/user/root/bbs_detail 是他自己自動生成的
默認(rèn)情況下的分隔符為 ','

sqoop導(dǎo)入數(shù)據(jù)到hdfs的高級用法(注意寫命令之間的空格)
第一
指定輸出路徑(--target-dir '/sqoop/td'),指點數(shù)據(jù)分隔符(--field-terminated-by '\t')
sqoop import --connect jdbc:mysql://hadoop-server-00:3306/baba --username root --password root --table bbs_detail --target-dir '/sqoop/td' --fields-terminated-by '\t'

    指點map task的數(shù)量 -m  (控制map task的數(shù)量可以控制內(nèi)存小文件多了,效率就會低,如果表很大的話,我們也要把map task 數(shù)量變多)

sqoop import --connect jdbc:mysql://hadoop-server-00:3306/baba --username root --password root --table bbs_detail --target-dir '/sqoop/td' --fields-terminated-by '\001'-m 1
(在實際生成中,很好用逗號或者tab建做分隔符的,我們用(\001)不可打印的字符作為分隔符)

   增加where條件,注意:條件必須用單引號引起來

sqoop import --connect jdbc:mysql://hadoop-server-00:3306/baba --username root --password root --table bbs_detail --where 'id>30' --target-dir '/sqoop/td2' --fields-terminated-by '\001'-m 1

增加query語句(使用\將語句換行  '\'表示轉(zhuǎn)義回車,因為sqoop語句是要寫在一行里面的,太長了寫不下,我們就用'\'來轉(zhuǎn)義)

sqoop import --connect jdbc:mysql://hadoop-server-00:3306/baba --username root --password root \
--query 'SELECT id,order_id,product_id FROM bbs_detail where id > 30 AND $CONDITIONS'
--split-by bbs_detail.id --target-dir '/sqoop/td3'
注意:如果使用--query這個命令的時候,需要注意的是where后面的參數(shù),AND $CONDITIONS 這個參數(shù)必須加上(AND $CONDITIONS 表示上面寫的select條件結(jié)尾了,這是固定的)
而且存在單引號與雙引號的區(qū)別,如果--query后面使用的是雙引號,那么需要在$CONDITIONS前加上\即\$CONDITIONS
如果設(shè)置map的數(shù)量為1個時即-m 1,不用加上--split-by ${tablename.column},否則需要加上(--split-by bbs_detail.id 表示,告訴map task按照bbs_detail.id去劃分)

我們一般都是把數(shù)據(jù)導(dǎo)入到hive(數(shù)據(jù)倉庫)中講SQL語法表達(dá)的數(shù)據(jù)運算邏輯轉(zhuǎn)換為mapreduce程序在hadoop集群上對海量數(shù)據(jù)進(jìn)行分析
從數(shù)據(jù)庫中導(dǎo)入數(shù)據(jù)到hive中
sqoop import --hive-import --connect jdbc:mysql://hadoop-server-00:3306/baba --username root --password root --table bbs_detail

啟動hive
命令為hive
show tables

也可以把數(shù)據(jù)庫中的數(shù)據(jù)導(dǎo)入到hbase中
sqoop import --hbase-import --connect jdbc:mysql://hadoop-server-00:3306/baba --username root --password root --table bbs_detail

第二類:將hdfs上的數(shù)據(jù)導(dǎo)出到數(shù)據(jù)庫中
sqoop export --connect jdbc:mysql://hadoop-server-00:3306/baba --username root --password root --export-dir '/sqoop/bak' --table td_bak --columns id,order_id --fields-terminated-by',' -m 2
(baba 表示:庫 --export-dir '/sqoop/bak'表示:導(dǎo)出的數(shù)據(jù)現(xiàn)在在哪個目錄 --table td_bak 表示:導(dǎo)入的目標(biāo)的表是哪個表 導(dǎo)入的目標(biāo)的這個表必須事先存在的(也就是在mysql中要先創(chuàng)建好td_bak這個表),也就是你要先創(chuàng)建好 --columns id,order_id 表示:把哪些字段導(dǎo)入到表中 --fields-terminated-by','表示:文件分隔符為逗號 map task為2)

由于命令太長,我們可以這樣去使用命令:
sqoop export --connect jdbc:mysql://hadoop-server-00:3306/baba \
--username root --password root \
--export-dir '/sqoop/bak' --table td_bak \
--columns id,order_id --fields-terminated-by',' -m 2

注意:以上測試要配置mysql的遠(yuǎn)程連接
GRANT ALL PRIVILEGES ON mytest.* TO 'root'@'192.168.0.104' IDENTIFIED BY 'itcast' WITH GRANT OPTION;
FLUSH PRIVILEGES;

GRANT ALL PRIVILEGES ON*.*TO'root'@'%'IDENTIFIED BY 'itcast' WITH GRANT OPTION;

設(shè)置Mysql遠(yuǎn)程訪問
grant all privileges on . to 'root'@'%' identified by '123456' with grant option;

解決Mysql亂碼問題
找一個配置文件,復(fù)制到/etc/目錄,命名為my.cnf
(有時候沒有my.cnf)
cp /usr/share/doc/mysql-server-5.1.73/my-medium.cnf /etc/my.cnf

vim my.cnf
在[client]和[mysqld]下面都添加上
default-character-set=utf8

最后按Esc輸入
:wq
保存退出

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI