Sqoop 是一個經常使用的數據遷移工具,主要用於在不一樣存儲系統之間實現數據的導入與導出:mysql
導入數據:從 MySQL,Oracle 等關係型數據庫中導入數據到 HDFS、Hive、HBase 等分佈式文件存儲系統中;git
導出數據:從 分佈式文件系統中導出數據到關係數據庫中。github
其原理是將執行命令轉化成 MapReduce 做業來實現數據的遷移,以下圖:sql
版本選擇:目前 Sqoop 有 Sqoop 1 和 Sqoop 2 兩個版本,可是截至到目前,官方並不推薦使用 Sqoop 2,由於其與 Sqoop 1 並不兼容,且功能尚未完善,因此這裏優先推薦使用 Sqoop 1。shell
下載所需版本的 Sqoop ,這裏我下載的是 CDH
版本的 Sqoop 。下載地址爲:http://archive.cloudera.com/cdh5/cdh/5/數據庫
# 下載後進行解壓 tar -zxvf sqoop-1.4.6-cdh5.15.2.tar.gz
# 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
進入安裝目錄下的 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
將 MySQL 驅動包拷貝到 Sqoop 安裝目錄的 lib
目錄下, 驅動包的下載地址爲 https://dev.mysql.com/downloads/connector/j/ 。在本倉庫的resources 目錄下我也上傳了一份,有須要的話能夠自行下載。
因爲已經將 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 開源項目: 大數據入門指南