Hadoop入門進(jìn)階課程11--Sqoop介紹、安裝與操作
本文版權(quán)歸作者和博客園共有,歡迎轉(zhuǎn)載,但未經(jīng)作者同意必須保留此段聲明,且在文章頁(yè)面明顯位置給出原文連接,博主為石山園,博客地址為 http://www.rzrgm.cn/shishanyuan 。該系列課程是應(yīng)邀實(shí)驗(yàn)樓整理編寫的,這里需要贊一下實(shí)驗(yàn)樓提供了學(xué)習(xí)的新方式,可以邊看博客邊上機(jī)實(shí)驗(yàn),課程地址為 https://www.shiyanlou.com/courses/237
【注】該系列所使用到安裝包、測(cè)試數(shù)據(jù)和代碼均可在百度網(wǎng)盤下載,具體地址為 http://pan.baidu.com/s/10PnDs,下載該PDF文件
1、搭建環(huán)境
部署節(jié)點(diǎn)操作系統(tǒng)為CentOS,防火墻和SElinux禁用,創(chuàng)建了一個(gè)shiyanlou用戶并在系統(tǒng)根目錄下創(chuàng)建/app目錄,用于存放Hadoop等組件運(yùn)行包。因?yàn)樵撃夸浻糜诎惭bhadoop等組件程序,用戶對(duì)shiyanlou必須賦予rwx權(quán)限(一般做法是root用戶在根目錄下創(chuàng)建/app目錄,并修改該目錄擁有者為shiyanlou(chown –R shiyanlou:shiyanlou /app)。
Hadoop搭建環(huán)境:
l 虛擬機(jī)操作系統(tǒng): CentOS6.6 64位,單核,1G內(nèi)存
l JDK:1.7.0_55 64位
l Hadoop:1.1.2
2、Sqoop介紹
2.1 Sqoop簡(jiǎn)介
Sqoop即 SQL to Hadoop ,是一款方便的在傳統(tǒng)型數(shù)據(jù)庫(kù)與Hadoop之間進(jìn)行數(shù)據(jù)遷移的工具,充分利用MapReduce并行特點(diǎn)以批處理的方式加快數(shù)據(jù)傳輸,發(fā)展至今主要演化了二大版本,Sqoop1和Sqoop2。
Sqoop工具是hadoop下連接關(guān)系型數(shù)據(jù)庫(kù)和Hadoop的橋梁,支持關(guān)系型數(shù)據(jù)庫(kù)和hive、hdfs,hbase之間數(shù)據(jù)的相互導(dǎo)入,可以使用全表導(dǎo)入和增量導(dǎo)入。
那么為什么選擇Sqoop呢?
l 高效可控的利用資源,任務(wù)并行度,超時(shí)時(shí)間。
l 數(shù)據(jù)類型映射與轉(zhuǎn)化,可自動(dòng)進(jìn)行,用戶也可自定義
l 支持多種主流數(shù)據(jù)庫(kù),MySQL,Oracle,SQL Server,DB2等等
2.2 Sqoop1和Sqoop2比較
2.2.1 Sqoop1和Sqoop2異同
l 兩個(gè)不同的版本,完全不兼容
l 版本號(hào)劃分區(qū)別,Apache版本:1.4.x(Sqoop1); 1.99.x(Sqoop2) CDH版本 : Sqoop-1.4.3-cdh4(Sqoop1) ; Sqoop2-1.99.2-cdh4.5.0 (Sqoop2)
l Sqoop2比Sqoop1的改進(jìn)
(1)引入Sqoop server,集中化管理connector等
(2)多種訪問方式:CLI,Web UI,REST API
(3)引入基于角色的安全機(jī)制
2.2.2 Sqoop1與Sqoop2的架構(gòu)圖
Sqoop架構(gòu)圖1
Sqoop架構(gòu)圖2
2.2.3 Sqoop1與Sqoop2的優(yōu)缺點(diǎn)
|
比較 |
Sqoop1 |
Sqoop2 |
|
架構(gòu) |
僅僅使用一個(gè)Sqoop客戶端 |
引入了Sqoop server集中化管理connector,以及rest api,web,UI,并引入權(quán)限安全機(jī)制 |
|
部署 |
部署簡(jiǎn)單,安裝需要root權(quán)限,connector必須符合JDBC模型 |
架構(gòu)稍復(fù)雜,配置部署更繁瑣 |
|
使用 |
命令行方式容易出錯(cuò),格式緊耦合,無法支持所有數(shù)據(jù)類型,安全機(jī)制不夠完善,例如密碼暴漏 |
多種交互方式,命令行,web UI,rest API,conncetor集中化管理,所有的鏈接安裝在Sqoop server上,完善權(quán)限管理機(jī)制,connector規(guī)范化,僅僅負(fù)責(zé)數(shù)據(jù)的讀寫 |
3、安裝部署Sqoop
3.1 下載Sqoop
可以到apache基金sqoop官網(wǎng)http://hive.apache.org/,選擇鏡像下載地址:http://mirror.bit.edu.cn/apache/sqoop/下載一個(gè)穩(wěn)定版本,如下圖所示下載支持Hadoop1.X的1.4.5版本gz包:
也可以在/home/shiyanlou/install-pack目錄中找到該安裝包,解壓該安裝包并把該安裝包復(fù)制到/app目錄中
cd /home/shiyanlou/install-pack
tar -xzf sqoop-1.4.5.bin__hadoop-1.0.0.tar.gz
mv sqoop-1.4.5.bin__hadoop-1.0.0 /app/sqoop-1.4.5
ll /app
3.2 設(shè)置/etc/profile參數(shù)
編輯/etc/profile文件,加入sqoop的Home路徑和在PATH加入bin的路徑:
export SQOOP_HOME=/app/sqoop-1.4.5
export PATH=$PATH:$SQOOP_HOME/bin
編譯配置文件/etc/profile,并確認(rèn)生效
source /etc/profile
echo $PATH
3.3 設(shè)置bin/configure-sqoop配置文件
修改bin/configure-sqoop配置文件
cd /app/sqoop-1.4.5/bin
sudo vi configure-sqoop
注釋掉HBase和Zookeeper等檢查(除非使用HBase和Zookeeper等HADOOP上的組件)
3.4 設(shè)置conf/sqoop-env.sh配置文件
如果不存在sqoop-env.sh文件,復(fù)制sqoop-env-template.sh文件,然后修改sqoop-env.sh配置文件
cd /app/sqoop-1.4.5/conf
cp sqoop-env-template.sh sqoop-env.sh
sudo vi sqoop-env.sh
設(shè)置hadoop運(yùn)行程序所在路徑和hadoop-*-core.jar路徑(Hadoop1.X需要配置)
#Set path to where bin/hadoop is available
export HADOOP_COMMON_HOME=/app/hadoop-1.1.2
#Set path to where hadoop-*-core.jar is available
export HADOOP_MAPRED_HOME=/app/hadoop-1.1.2
編譯配置文件sqoop-env.sh使之生效
3.5 驗(yàn)證安裝完成
輸入如下命令驗(yàn)證是否正確安裝sqoop,如果正確安裝則出現(xiàn)sqoop提示
sqoop help
4、文件導(dǎo)入/導(dǎo)出
4.1 MySql數(shù)據(jù)導(dǎo)入到HDFS中
如果沒有安裝MySql,請(qǐng)參照第8課3.1進(jìn)行安裝
4.1.1 下載MySql驅(qū)動(dòng)
到MySql官網(wǎng)進(jìn)入下載頁(yè)面:http://dev.mysql.com/downloads/connector/j/ ,選擇所需要的版本進(jìn)行下載,這里下載的zip格式的文件,然后在本地解壓:
也可以在/home/shiyanlou/install-pack目錄中找到該安裝包,把MySql驅(qū)動(dòng)包使用如下命令放到Sqoop的lib目錄下
cd /home/shiyanlou/install-pack
cp mysql-connector-java-5.1.22-bin.jar /app/sqoop-1.4.5/lib
4.1.2 啟動(dòng)MySql服務(wù)
查看MySql服務(wù)并查看狀態(tài),如果沒有啟動(dòng)則啟動(dòng)服務(wù)
sudo service mysql status
sudo service mysql start
4.1.3 查看MySql中的數(shù)據(jù)表
進(jìn)入MySql數(shù)據(jù)庫(kù),選擇有數(shù)據(jù)的一張表查看內(nèi)容,比較導(dǎo)出結(jié)果是否正確,輸入如下命令:
mysql -uhive -phive
mysql>show databases;
mysql>use hive;
mysql>show tables;
mysql>select TBL_ID, CREATE_TIME, DB_ID, OWNER, TBL_NAME,TBL_TYPE from TBLS;
4.1.4 把MySql數(shù)據(jù)導(dǎo)入到HDFS中
使用如下命令列出MySql中所有數(shù)據(jù)庫(kù):
sqoop list-databases --connect jdbc:mysql://hadoop:3306/ --username hive --password hive
使用如下命令把hive數(shù)據(jù)庫(kù)TBLS表數(shù)據(jù)導(dǎo)入到HDFS中:
sqoop import --connect jdbc:mysql://hadoop:3306/hive --username hive --password hive --table TBLS -m 1
l--username 數(shù)據(jù)庫(kù)用戶名
l--password連接數(shù)據(jù)庫(kù)密碼
l--table 表名
l-m 1表示map數(shù)
4.1.5 查看導(dǎo)出結(jié)果
使用如下命令查看導(dǎo)出到HDFS結(jié)果,文件路徑在當(dāng)前用戶hadoop目錄下增加了TBLS表目錄,查看part-m-00000文件:
hadoop fs -ls /user/shiyanlou/TBLS
hadoop fs -cat /user/shiyanlou/TBLS/part-m-00000
4.2 MySql數(shù)據(jù)導(dǎo)入到Hive中
4.2.1 啟動(dòng)metastore和hiveserver
在使用hive之前需要啟動(dòng)metastore和hiveserver服務(wù),通過如下命令啟用:
hive --service metastore &
hive --service hiveserver &
啟動(dòng)用通過jps命令可以看到兩個(gè)進(jìn)行運(yùn)行在后臺(tái)
4.2.2 從MySql導(dǎo)入表數(shù)據(jù)到Hive中
使用如下命令到把MySql中TBLS表數(shù)據(jù)導(dǎo)入到Hive中:
sqoop import --connect jdbc:mysql://hadoop:3306/hive --username hive --password hive --table TBLS --hive-table MySql2Hive --hive-import -m 1
l-- username為mysql中的數(shù)據(jù)庫(kù)連接用戶名
l--password為mysql中的數(shù)據(jù)庫(kù)連接密碼
l--table為導(dǎo)出表
l--hive-table test1 為導(dǎo)出表在Hive中的名稱
l-m 1表示map數(shù)
從運(yùn)行的日志可以看到,這個(gè)過程有兩個(gè)階段:
1. 第一個(gè)階段是從MySql中把數(shù)據(jù)到HDFS文件中
2. 第二個(gè)階段是從HDFS中把數(shù)據(jù)寫入到MySql中
4.2.3 查看導(dǎo)出結(jié)果
登錄hive,在hive創(chuàng)建表并查看該表,命令如下:
hive
hive>show tables;
hive>desc MySql2Hive;























浙公網(wǎng)安備 33010602011771號(hào)