您好,登錄后才能下訂單哦!
這篇文章的內(nèi)容主要圍繞Linux系統(tǒng)怎么安裝sqoop進(jìn)行講述,文章內(nèi)容清晰易懂,條理清晰,非常適合新手學(xué)習(xí),值得大家去閱讀。感興趣的朋友可以跟隨小編一起閱讀吧。希望大家通過這篇文章有所收獲!
正如Sqoop的名字所示:Sqoop是一個(gè)用來將關(guān)系型數(shù)據(jù)庫和Hadoop中的數(shù)據(jù)進(jìn)行相互轉(zhuǎn)移的工具,可以將一個(gè)關(guān)系型數(shù)據(jù)庫(例如Mysql、Oracle)中的數(shù)據(jù)導(dǎo)入到Hadoop(例如HDFS、Hive、Hbase)中,也可以將Hadoop(例如HDFS、Hive、Hbase)中的數(shù)據(jù)導(dǎo)入到關(guān)系型數(shù)據(jù)庫(例如Mysql、Oracle)中。如下圖所示: 2、Sqoop架構(gòu) Sqoop架構(gòu): 正如上圖所示:Sqoop工具接收到客戶端的shell命令或者Java api命令后,通過Sqoop中的任務(wù)翻譯器(Task Translator)將命令轉(zhuǎn)換為對(duì)應(yīng)的MapReduce任務(wù),而后將關(guān)系型數(shù)據(jù)庫和Hadoop中的數(shù)據(jù)進(jìn)行相互轉(zhuǎn)移,進(jìn)而完成數(shù)據(jù)的拷貝。
Hadoop
關(guān)系型數(shù)據(jù)庫(MySQL/Oracle)
HBase
Hive
ZooKeeper
tar -zxvf .tar.gz -C 目標(biāo)目錄
mv sqoop-1.4.7.bin__hadoop-2.6.0/ sqoop-1.4.7
進(jìn)入sqoop-1.4.7/conf路徑,重命名配置文件:
mv sqoop-env-template.sh sqoop-env.sh
修改sqoop-env.sh信息:(若配置了環(huán)境變量,可通過
echo $XXXXX_HOME
查詢安裝位置)
vi sqoop-env.sh
#Set path to where bin/hadoop is available export HADOOP_COMMON_HOME=Hadoop安裝路徑 #Set path to where hadoop-*-core.jar is available #export HADOOP_MAPRED_HOME=Hadoop安裝路徑 #set the path to where bin/hbase is available #export HBASE_HOME=HBase安裝路徑 #Set the path to where bin/hive is available #export HIVE_HOME=Hive安裝路徑 #Set the path for where zookeper config dir is #export ZOOCFGDIR=ZooKeeper 配置文件夾 路徑 復(fù)制代碼
cp /XXX/hive/conf/hive-site.xml /XXX/sqoop-1.4.7/conf/
修改配置文件:
vi /etc/profile
增加以下內(nèi)容:
export SQOOP_HOME=sqoop安裝路徑
export PATH=$PATH:$SQOOP_HOME/bin
聲明環(huán)境變量:
source /etc/profile
sqoop version
導(dǎo)入MySQL驅(qū)動(dòng)到sqoop/lib下
導(dǎo)入Oracle驅(qū)動(dòng)到sqoop/lib下
參數(shù)查看:Sqoop官網(wǎng) -> documentation -> Sqoop User Guide
import 導(dǎo)入數(shù)據(jù)到集群
export 從集群導(dǎo)出數(shù)據(jù)
create-hive-table 創(chuàng)建hive表
import-all-tables 指定關(guān)系型數(shù)據(jù)庫所有表到集群
list-databases 列出所有數(shù)據(jù)庫
list-tables 列出所有數(shù)據(jù)庫表
merge 合并數(shù)據(jù)
codegen 獲取某張表數(shù)據(jù)生成JavaBean并打Jar包
功能:MySQL/Oracle –> HDFS/Hive
修改MySQL訪問權(quán)限:
update user set host='%' where host='localhost';
delete from user where Host='127.0.0.1';
delete from user where Host='bigdata01';
delete from user where Host='::1';
flush privileges;
use mysql;
select User, Host, Password from user;
查看權(quán)限:
修改權(quán)限為所有用戶都可訪問:
操作命令:
準(zhǔn)備工作:
導(dǎo)入命令:
開啟hive服務(wù)
在hive中創(chuàng)建好要導(dǎo)入的對(duì)應(yīng)表
FAILED: SemanticException [Error 10072]: Database does not exist: XXXXXXXX
報(bào)錯(cuò)原因:Sqoop沒有關(guān)聯(lián)Hive
解決方法:
cp /XXX/hive/conf/hive-site.xml /XXX/sqoop-1.4.7/conf/
ERROR tool.ImportTool: Import failed: org.apache.hadoop.mapred.FileAlreadyExistsException: Output directory hdfs://bigdata01:9000/XXXXXXXXXX already exists
報(bào)錯(cuò)原因:hdfs中存在同名路徑
解決方法:
指定新路徑或者刪除hdfs中原文件
ERROR tool.ImportTool: Import failed: java.io.IOException: java.lang.ClassNotFoundException: org.apache.hadoop.hive.conf.HiveConf
報(bào)錯(cuò)原因:hive環(huán)境變量配置缺失
解決方法:——Hadoop環(huán)境加入Hive依賴
source /etc/profile
export HADOOP_CLASSPATH=$HADOOP_CLASSPATH:$HIVE_HOME/lib/*
vi /etc/profile
修改配置文件:
增加以下內(nèi)容:
聲明環(huán)境變量:
sqoop import --connect jdbc:mysql://bigdata01:3306/數(shù)據(jù)庫名 --username root --password 密碼 --table 表名 --num-mappers 1 --hive-import --fields-terminated-by "\t" --hive-overwrite --hive-table hive數(shù)據(jù)庫名.表名
在Hive中可以看到指定表中已傳入數(shù)據(jù)信息
可能報(bào)錯(cuò)1:
可能報(bào)錯(cuò)2:
可能報(bào)錯(cuò)3:
導(dǎo)出命令:
Linux本地查看hdfs上傳結(jié)果:
使用query對(duì)數(shù)據(jù)進(jìn)行過濾:
直接過濾字段:
sqoop import --connect jdbc:mysql://bigdata01:3306/數(shù)據(jù)庫名 # 連接MySQL --username root # 用戶名 --password XXXXXX # 密碼 --table 表名 # 上傳至HDFS的表 --target-dir /YYYYYYY # HDFS目標(biāo)文件夾 --num-mappers 1 # 指定map運(yùn)行 --fields-terminated-by "\t" # 指定分隔符
hdfs dfs -cat /XXXXXXX/part-m-00000
sqoop import --connect jdbc:mysql://bigdata01:3306/數(shù)據(jù)庫名 --username root --password XXXXXX --table 表名 --target-dir /YYYYYYY --num-mappers 1 --fields-terminated-by "\t" --query 'select * from 表名 where 條件 and $CONDITIONS' # $CONDITIONS 對(duì)mapper進(jìn)行索引
sqoop import --connect jdbc:mysql://bigdata01:3306/數(shù)據(jù)庫名 --username root --password XXXXXX --table 表名 --target-dir /YYYYYYY --num-mappers 1 --columns 字段名
本地mysql表上傳至hdfs:
本地mysql表上傳至hive:
功能:HDFS/Hive –> MySQL/Oracle
操作命令:
導(dǎo)出命令:
sqoop emport --connect jdbc:mysql://bigdata01:3306/數(shù)據(jù)庫名 # 連接MySQL --username root # 用戶名 --password XXXXXX # 密碼 --table 表名 # 目標(biāo)mysql表 --export-dir /user/hive/warehouse/YYYYYYY # hive文件夾 --num-mappers 1 # 指定map運(yùn)行 --input-fields-terminated-by "\t" # 指定分隔符
hive表導(dǎo)出至本地mysql:
操作命令:
sqoop list-databases --connect jdbc:mysql://bigdata01:3306/ --username root --password 密碼
操作命令:
sqoop codegen --connect jdbc:mysql://bigdata01:3306/數(shù)據(jù)庫名 --username root --password 密碼 --table 表名 -- bindir Linux本地路徑 # 指定Jar包打包路徑 --class-name 類名 # 指定Java類名 --fields-terminated-by "\t"
操作命令:
sqoop merge --new-data hdfs新表路徑 --onto hdfs舊表路徑 --target-dir /YYYYYYY # 合并后的hdfs路徑 --jar-file = # Linux本地Jar包路徑 --class-name XXXXX # Jar包的類 --merge-key id # 合并依據(jù)
注意:merge操作是一個(gè)新表替代舊表的操作,如果有沖突id的話新表數(shù)據(jù)替換舊表數(shù)據(jù),如果沒有沖突則是新表數(shù)據(jù)添加到舊表的數(shù)據(jù)。
感謝你的閱讀,相信你對(duì)“Linux系統(tǒng)怎么安裝sqoop”這一問題有一定的了解,快去動(dòng)手實(shí)踐吧,如果想了解更多相關(guān)知識(shí)點(diǎn),可以關(guān)注億速云網(wǎng)站!小編會(huì)繼續(xù)為大家?guī)砀玫奈恼拢?/p>
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。