Sqoop 的基本使用

1、Sqoop 簡介

Sqoop 是一個經常使用的數據遷移工具,主要用於在不一樣存儲系統之間實現數據的導入與導出:mysql

  • 導入數據:從 MySQL,Oracle 等關係型數據庫中導入數據到 HDFS、Hive、HBase 等分佈式文件存儲系統中;git

  • 導出數據:從 分佈式文件系統中導出數據到關係數據庫中。github

其原理是將執行命令轉化成 MapReduce 做業來實現數據的遷移,以下圖:sql

2、安裝

版本選擇:目前 Sqoop 有 Sqoop 1 和 Sqoop 2 兩個版本,可是截至到目前,官方並不推薦使用 Sqoop 2,由於其與 Sqoop 1 並不兼容,且功能尚未完善,因此這裏優先推薦使用 Sqoop 1。shell

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

添加環境變量:vim

export SQOOP_HOME=/usr/app/sqoop-1.4.6-cdh5.15.2
export PATH=$SQOOP_HOME/bin:$PATH

使得配置的環境變量當即生效:app

# 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 目錄下, 驅動包的下載地址爲 https://dev.mysql.com/downloads/connector/j/ 。在本倉庫的resources 目錄下我也上傳了一份,有須要的話能夠自行下載。

2.5 驗證

因爲已經將 sqoop 的 bin 目錄配置到環境變量,直接使用如下命令驗證是否配置成功:

# sqoop version

出現對應的版本信息則表明配置成功:

這裏出現的兩個 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 開源項目大數據入門指南

相關文章
相關標籤/搜索