溫馨提示×

溫馨提示×

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

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

Hadoop Sqoop

發(fā)布時間:2020-06-24 17:13:52 來源:網(wǎng)絡(luò) 閱讀:444 作者:lzf05303774 欄目:數(shù)據(jù)庫

一、概述:

Sqoop是一款開源的工具,主要用于在Hadoop(如Hive、HDFS)與傳統(tǒng)的數(shù)據(jù)庫(mysql、Oracle ...)間進行數(shù)據(jù)的傳遞,可以將一個關(guān)系型數(shù)據(jù)庫(如 MySQL ,Oracle...)中的數(shù)據(jù)導(dǎo)進到Hadoop的HDFS中,也可以將HDFS的數(shù)據(jù)導(dǎo)進到關(guān)系型數(shù)據(jù)庫中。其實質(zhì)就是將導(dǎo)入導(dǎo)出命令轉(zhuǎn)換成MapReduce程序來實現(xiàn)。

二、安裝和配置

1、修改配置文件sqoop-env.sh:

#Set path to where bin/hadoop is available

export HADOOP_COMMON_HOME=/home/hadoop/app/hadoop-2.4.1


#Set path to where hadoop-*-core.jar is available

export HADOOP_MAPRED_HOME=/home/hadoop/app/hadoop-2.4.1


#set the path to where bin/hbase is available

export HBASE_HOME=/home/hadoop/app/hbase-0.96.2-hadoop2


#Set the path to where bin/hive is available

export HIVE_HOME=/home/hadoop/app/hive-0.12.0-bin


#Set the path for where zookeper config dir is

export ZOOCFGDIR=/home/hadoop/app/zookeeper-3.4.5/conf


2、將sqoop添加到環(huán)境變量。


3、將數(shù)據(jù)庫連接驅(qū)動拷貝到$SQOOP_HOME/lib里。


三、導(dǎo)入導(dǎo)出:

1、數(shù)據(jù)庫中的數(shù)據(jù)導(dǎo)入到HDFS上:

(1)、指定導(dǎo)入的字段:

sqoop import 

--connect jdbc:mysql://192.168.1.10:3306/itcast 

--username root --password 123  

--table trade_detail 

--columns 'id, account, income, expenses'

(2)、指定輸出路徑、指定數(shù)據(jù)分隔符:

sqoop import 

--connect jdbc:mysql://192.168.1.10:3306/itcast 

--username root --password 123  

##要導(dǎo)入數(shù)據(jù)的表

--table trade_detail 

##數(shù)據(jù)導(dǎo)入hdfs后所存放的目錄

--target-dir '/sqoop/td' 

##導(dǎo)入的數(shù)據(jù)字段之間的分隔符

--fields-terminated-by '\t'

(3)、指定Map數(shù)量 -m 

sqoop import 

--connect jdbc:mysql://192.168.1.10:3306/itcast 

--username root --password 123  

--table trade_detail 

--target-dir '/sqoop/td1' 

--fields-terminated-by '\t'

##指定做導(dǎo)入處理時的map 任務(wù)數(shù) 

-m 2


(4)、增加where條件, 注意:條件必須用引號引起來

sqoop import 

--connect jdbc:mysql://192.168.1.10:3306/itcast 

--username root --password 123  

--table trade_detail 

--where 'id>3' 

--target-dir '/sqoop/td2' 


(5)、增加query語句(使用 \ 將語句換行)

sqoop import 

--connect jdbc:mysql://192.168.1.10:3306/itcast 

--username root --password 123 

--query 'SELECT * FROM trade_detail where id > 2 AND $CONDITIONS' 

--split-by trade_detail.id 

--target-dir '/sqoop/td3'

注意:如果使用--query這個命令的時候,需要注意的是where后面的參數(shù),AND $CONDITIONS這個參數(shù)必須加上

而且存在單引號與雙引號的區(qū)別,如果--query后面使用的是雙引號,那么需要在$CONDITIONS前加上\即\$CONDITIONS

如果設(shè)置map數(shù)量為1個時即-m 1,不用加上--split-by ${tablename.column},否則需要加上

2、將HDFS上的文件數(shù)據(jù)導(dǎo)出到數(shù)據(jù)庫的表里面去:

sqoop export 

--connect jdbc:mysql://192.168.8.120:3306/itcast 

--username root --password 123 

##你要導(dǎo)出的數(shù)據(jù)所在的目錄

--export-dir '/td3' 

##你要導(dǎo)往的目標(biāo)關(guān)系表

--table td_bak 

-m 1 

##你要導(dǎo)出的文件的字段分隔符

--fields-termianted-by '\t'

四、用python導(dǎo)入導(dǎo)出表:

import os


from_table="rpt_daily"


to_table="rpt_daily"


sqoop1="sqoop import --connect jdbc:mysql://172.30.200.219/bi_warehouse --username root " \

      "--password artisan  --table "+from_table+"  --fields-terminated-by '\\001' --target-dir /db/as_main/modifier/lzf/"+from_table+"  --delete-target-dir --num-mappers 1 "

os.system(sqoop1)


sqoop2="sqoop export --connect \"jdbc:mysql://192.168.1.4/bi_warehouse?useUnicode=true&characterEncoding=utf-8\" --username root --password root --table "+to_table+"  " \

       "--export-dir /db/as_main/modifier/lzf/"+to_table+"/part-m-00000 --input-fields-terminated-by '\\001'"


os.system(sqoop2)



執(zhí)行有2種方法:

方法1、在linux行,執(zhí)行python ,進入python,然后將上面內(nèi)容粘貼后回車即可


方法2、在linux行,執(zhí)行python  test2.py,即python調(diào)用文件(test2.py為上述內(nèi)容保存的文件名稱)


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

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

AI