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 开源项目: 大数据入门指南