1. 程式人生 > 程式設計 >Sqoop 簡介與安裝

Sqoop 簡介與安裝

一、Sqoop 簡介

Sqoop 是一個常用的資料遷移工具,主要用於在不同儲存系統之間實現資料的匯入與匯出:

  • 匯入資料:從 MySQL,Oracle 等關係型資料庫中匯入資料到 HDFS、Hive、HBase 等分散式檔案儲存系統中;

  • 匯出資料:從 分散式檔案系統中匯出資料到關係資料庫中。

其原理是將執行命令轉化成 MapReduce 作業來實現資料的遷移,如下圖:

https://github.com/heibaiying

二、安裝

版本選擇:目前 Sqoop 有 Sqoop 1 和 Sqoop 2 兩個版本,但是截至到目前,官方並不推薦使用 Sqoop 2,因為其與 Sqoop 1 並不相容,且功能還沒有完善,所以這裡優先推薦使用 Sqoop 1。

https://github.com/heibaiying

2.1 下載並解壓

下載所需版本的 Sqoop ,這裡我下載的是 CDH 版本的 Sqoop 。下載地址為: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_HOMEHADOOP_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 目錄下,驅動包的下載地址為 dev.mysql.com/downloads/c… 。在本倉庫的resources 目錄下我也上傳了一份,有需要的話可以自行下載。

https://github.com/heibaiying

2.5 驗證

由於已經將 sqoop 的 bin 目錄配置到環境變數,直接使用以下命令驗證是否配置成功:

# sqoop version
複製程式碼

出現對應的版本資訊則代表配置成功:

https://github.com/heibaiying

這裡出現的兩個 Warning 警告是因為我們本身就沒有用到 HCatalogAccumulo,忽略即可。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 開源專案大資料入門指南