一、Sqoop 簡介 Sqoop 是一個常用的數據遷移工具,主要用於在不同存儲系統之間實現數據的導入與導出: + 導入數據:從 MySQL,Oracle 等關係型資料庫中導入數據到 HDFS、Hive、HBase 等分散式文件存儲系統中; + 導出數據:從 分散式文件系統中導出數據到關係資料庫中。 ...
一、Sqoop 簡介
Sqoop 是一個常用的數據遷移工具,主要用於在不同存儲系統之間實現數據的導入與導出:
導入數據:從 MySQL,Oracle 等關係型資料庫中導入數據到 HDFS、Hive、HBase 等分散式文件存儲系統中;
導出數據:從 分散式文件系統中導出數據到關係資料庫中。
其原理是將執行命令轉化成 MapReduce 作業來實現數據的遷移,如下圖:
二、安裝
版本選擇:目前 Sqoop 有 Sqoop 1 和 Sqoop 2 兩個版本,但是截至到目前,官方並不推薦使用 Sqoop 2,因為其與 Sqoop 1 並不相容,且功能還沒有完善,所以這裡優先推薦使用 Sqoop 1。
2.1 下載並解壓
下載所需版本的 Sqoop ,這裡我下載的是 CDH
版本的 Sqoop 。下載地址為:http://archive.cloudera.com/cdh5/cdh/5/
# 下載後進行解壓
tar -zxvf sqoop-1.4.6-cdh5.15.2.tar.gz
2.2 配置環境變數
# vim /etc/profile
添加環境變數:
export SQOOP_HOME=/usr/app/sqoop-1.4.6-cdh5.15.2
export PATH=$SQOOP_HOME/bin:$PATH
使得配置的環境變數立即生效:
# source /etc/profile
2.3 修改配置
進入安裝目錄下的 conf/
目錄,拷貝 Sqoop 的環境配置模板 sqoop-env.sh.template
# cp sqoop-env-template.sh sqoop-env.sh
修改 sqoop-env.sh
,內容如下 (以下配置中 HADOOP_COMMON_HOME
和 HADOOP_MAPRED_HOME
是必選的,其他的是可選的):
# Set Hadoop-specific environment variables here.
#Set path to where bin/hadoop is available
export HADOOP_COMMON_HOME=/usr/app/hadoop-2.6.0-cdh5.15.2
#Set path to where hadoop-*-core.jar is available
export HADOOP_MAPRED_HOME=/usr/app/hadoop-2.6.0-cdh5.15.2
#set the path to where bin/hbase is available
export HBASE_HOME=/usr/app/hbase-1.2.0-cdh5.15.2
#Set the path to where bin/hive is available
export HIVE_HOME=/usr/app/hive-1.1.0-cdh5.15.2
#Set the path for where zookeper config dir is
export ZOOCFGDIR=/usr/app/zookeeper-3.4.13/conf
2.4 拷貝資料庫驅動
將 MySQL 驅動包拷貝到 Sqoop 安裝目錄的 lib
目錄下, 驅動包的下載地址為 https://dev.mysql.com/downloads/connector/j/ 。在本倉庫的resources 目錄下我也上傳了一份,有需要的話可以自行下載。
2.5 驗證
由於已經將 sqoop 的 bin
目錄配置到環境變數,直接使用以下命令驗證是否配置成功:
# sqoop version
出現對應的版本信息則代表配置成功:
這裡出現的兩個 Warning
警告是因為我們本身就沒有用到 HCatalog
和 Accumulo
,忽略即可。Sqoop 在啟動時會去檢查環境變數中是否有配置這些軟體,如果想去除這些警告,可以修改 bin/configure-sqoop
,註釋掉不必要的檢查。
# Check: If we can't find our dependencies, give up here.
if [ ! -d "${HADOOP_COMMON_HOME}" ]; then
echo "Error: $HADOOP_COMMON_HOME does not exist!"
echo 'Please set $HADOOP_COMMON_HOME to the root of your Hadoop installation.'
exit 1
fi
if [ ! -d "${HADOOP_MAPRED_HOME}" ]; then
echo "Error: $HADOOP_MAPRED_HOME does not exist!"
echo 'Please set $HADOOP_MAPRED_HOME to the root of your Hadoop MapReduce installation.'
exit 1
fi
## Moved to be a runtime check in sqoop.
if [ ! -d "${HBASE_HOME}" ]; then
echo "Warning: $HBASE_HOME does not exist! HBase imports will fail."
echo 'Please set $HBASE_HOME to the root of your HBase installation.'
fi
## Moved to be a runtime check in sqoop.
if [ ! -d "${HCAT_HOME}" ]; then
echo "Warning: $HCAT_HOME does not exist! HCatalog jobs will fail."
echo 'Please set $HCAT_HOME to the root of your HCatalog installation.'
fi
if [ ! -d "${ACCUMULO_HOME}" ]; then
echo "Warning: $ACCUMULO_HOME does not exist! Accumulo imports will fail."
echo 'Please set $ACCUMULO_HOME to the root of your Accumulo installation.'
fi
if [ ! -d "${ZOOKEEPER_HOME}" ]; then
echo "Warning: $ZOOKEEPER_HOME does not exist! Accumulo imports will fail."
echo 'Please set $ZOOKEEPER_HOME to the root of your Zookeeper installation.'
fi
更多大數據系列文章可以參見 GitHub 開源項目: 大數據入門指南