新聞中心
一、概述:
創(chuàng)新互聯(lián)公司專注于安澤企業(yè)網(wǎng)站建設,響應式網(wǎng)站開發(fā),成都商城網(wǎng)站開發(fā)。安澤網(wǎng)站建設公司,為安澤等地區(qū)提供建站服務。全流程按需定制,專業(yè)設計,全程項目跟蹤,創(chuàng)新互聯(lián)公司專業(yè)和態(tài)度為您提供的服務
Sqoop是一款開源的工具,主要用于在Hadoop(如Hive、HDFS)與傳統(tǒng)的數(shù)據(jù)庫(MySQL、Oracle ...)間進行數(shù)據(jù)的傳遞,可以將一個關系型數(shù)據(jù)庫(如 MySQL ,Oracle...)中的數(shù)據(jù)導進到Hadoop的HDFS中,也可以將HDFS的數(shù)據(jù)導進到關系型數(shù)據(jù)庫中。其實質(zhì)就是將導入導出命令轉換成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ù)庫連接驅動拷貝到$SQOOP_HOME/lib里。
三、導入導出:
1、數(shù)據(jù)庫中的數(shù)據(jù)導入到HDFS上:
(1)、指定導入的字段:
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
##要導入數(shù)據(jù)的表
--table trade_detail
##數(shù)據(jù)導入hdfs后所存放的目錄
--target-dir '/sqoop/td'
##導入的數(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'
##指定做導入處理時的map 任務數(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
如果設置map數(shù)量為1個時即-m 1,不用加上--split-by ${tablename.column},否則需要加上
2、將HDFS上的文件數(shù)據(jù)導出到數(shù)據(jù)庫的表里面去:
sqoop export
--connect jdbc:mysql://192.168.8.120:3306/itcast
--username root --password 123
##你要導出的數(shù)據(jù)所在的目錄
--export-dir '/td3'
##你要導往的目標關系表
--table td_bak
-m 1
##你要導出的文件的字段分隔符
--fields-termianted-by '\t'
四、用python導入導出表:
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)容保存的文件名稱)
網(wǎng)頁名稱:HadoopSqoop
轉載注明:http://www.dlmjj.cn/article/ipogjd.html