新聞中心
sqoop它是一款開源的工具,主要用于在Hadoop(Hive)與傳統(tǒng)的數(shù)據(jù)庫(mysql、postgresql…)間進(jìn)行數(shù)據(jù)的傳遞,可以將一個(gè)關(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ù)庫中。

在尉犁等地區(qū),都構(gòu)建了全面的區(qū)域性戰(zhàn)略布局,加強(qiáng)發(fā)展的系統(tǒng)性、市場(chǎng)前瞻性、產(chǎn)品創(chuàng)新能力,以專注、極致的服務(wù)理念,為客戶提供網(wǎng)站制作、網(wǎng)站設(shè)計(jì) 網(wǎng)站設(shè)計(jì)制作按需網(wǎng)站設(shè)計(jì),公司網(wǎng)站建設(shè),企業(yè)網(wǎng)站建設(shè),高端網(wǎng)站設(shè)計(jì),全網(wǎng)整合營銷推廣,外貿(mào)網(wǎng)站制作,尉犁網(wǎng)站建設(shè)費(fèi)用合理。
sqoop-1.4.7安裝配置流程
(1) Sqoop環(huán)境前提:
Hadoop 關(guān)系型數(shù)據(jù)庫(MySQL/Oracle) HBase Hive ZooKeeper
(2) 解壓sqoop-1.4.7.bin__hadoop-2.6.0.tar.gz安裝包到目標(biāo)目錄下:
tar -zxvf .tar.gz -C 目標(biāo)目錄
(3) 為后續(xù)方便,重命名Sqoop文件夾:
mv sqoop-1.4.7.bin__hadoop-2.6.0/ sqoop-1.4.7
(4) 修改配置文件:
進(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ù)制代碼
(5) 關(guān)聯(lián)Hive:
cp /XXX/hive/conf/hive-site.xml /XXX/sqoop-1.4.7/conf/
(5) 配置環(huán)境變量:
修改配置文件:
vi /etc/profile
增加以下內(nèi)容:
export SQOOP_HOME=sqoop安裝路徑export PATH=$PATH:$SQOOP_HOME/bin
聲明環(huán)境變量:
source /etc/profile
(6) 啟動(dòng)查看版本號(hào)
sqoop version
(7) 添加驅(qū)動(dòng):
導(dǎo)入MySQL驅(qū)動(dòng)到sqoop/lib下 導(dǎo)入Oracle驅(qū)動(dòng)到sqoop/lib下
3. Sqoop操作
(1) 常用參數(shù):
參數(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包
(2) import——Sqoop的導(dǎo)入操作:
功能: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/profileexport 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-00000sqoop 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:
(3) emport——Sqoop的導(dǎo)出操作:
功能: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:
(4) 列出所有數(shù)據(jù)庫:
操作命令:
sqoop list-databases --connect jdbc:mysql://bigdata01:3306/ --username root --password 密碼
(5) 獲取數(shù)據(jù)庫表數(shù)據(jù)生成JavaBean:
操作命令:
sqoop codegen --connect jdbc:mysql://bigdata01:3306/數(shù)據(jù)庫名 --username root --password 密碼 --table 表名
-- bindir Linux本地路徑# 指定Jar包打包路徑
--class-name 類名# 指定Java類名
--fields-terminated-by "\t"
(6) 合并hdfs中不同目錄下的數(shù)據(jù):
操作命令:
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ù)。
當(dāng)前名稱:Linux下安裝并使用sqoop
本文地址:http://fisionsoft.com.cn/article/ccccdhi.html


咨詢
建站咨詢
