一、sqoop概念
Sqoop是一款开源的工具,主要用于在Hadoop(Hive)与传统的数据库(mysql、postgresql...)间进行数据的传递,可以将一个关系型数据库(例如 : MySQL ,Oracle ,Postgres等)中的数据导进到Hadoop的HDFS中,也可以将HDFS的数据导进到关系型数据库中。
Sqoop项目开始于2009年,最早是作为Hadoop的一个第三方模块存在,后来为了让使用者能够快速部署,也为了让开发人员能够更快速的迭代开发,Sqoop独立成为一个Apache项目。
简而言之,sqoop就是用于关系型数据和非关系型数据库之间进行数据转换的工具。
Sqoop: 采集关系型数据库中数据
1、采集关系型数据库中数据,一般Sqoop用于离线计算
2、数据交换:Oracle <---> Sqoop <---> HDFS、HBase、Hive
3、基于JDBC
二、sqoop的安装
1、下载sqoop-1.4.6.tar.gz和sqoop-1.4.6.bin__hadoop-2.0.4-alpha.tar.gz
2、上传到/tools目录下
3、 解压
(1)tar -zvxf sqoop-1.4.6.tar.gz -C /training/
(2)配置环境变量:
export SQOOP_HOME=/training/sqoop-1.4.6
export PATH=$PATH:$SQOOP_HOME/bin
(3)让环境变量生效:source ~/.bash_profile
(4)进入到/training/sqoop-1.4.6/conf/目录下
cp sqoop-env-template.sh sqoop-env.sh
vi sqoop-env.sh
修改对应的选项:
#Set path to where bin/hadoop is available
export HADOOP_COMMON_HOME=/training/hadoop-2.7.3
#Set path to where hadoop-*-core.jar is available
export HADOOP_MAPRED_HOMEi=/training/hadoop-2.7.3
#set the path to where bin/hbase is available
#export HBASE_HOME=/training/hbase-1.3.1
#Set the path to where bin/hive is available
#export HIVE_HOME=/training/hive
#Set the path for where zookeper config dir is
export ZOOCFGDIR=/training/zookeeper-3.4.5
(5)将mysql的驱动程序mysql-connector-java-5.1.44-bin.jar上传到/training/sqoop/lib目录下
(6)进入到/tools目录下,解压sqoop-1.4.6.bin__hadoop-2.0.4-alpha.tar.gz
tar -zvxf sqoop-1.4.6.bin__hadoop-2.0.4-alpha.tar.gz
cd /tools/sqoop-1.4.6.bin__hadoop-2.0.4-alpha
将sqoop-1.4.6.jar复制到/training/sqoop-1.4.6/lib/目录下(如果没有一步,会报错: 找不到或无法加载主类 org.apache.sqoop.Sqoop)
cp sqoop-1.4.6.jar /training/sqoop-1.4.6/lib/
4)、测试sqoop命令
sqoop help
不报错,即安装正确
三、sqoop的使用
1、常用命令及其介绍
命令 |
说明 |
codegen |
将关系数据库表映射为一个Java文件、Java class类、以及相关的jar包 |
create-hive-table |
生成与关系数据库表的表结构对应的HIVE表 |
eval |
以快速地使用SQL语句对关系数据库进行操作,这可以使得在使用import这种工具进行数据导入的时候,可以预先了解相关的SQL语句是否正确,并能将结果显示在控制台。 |
export |
从hdfs中导数据到关系数据库中 |
help |
|
import |
将数据库表的数据导入到HDFS中 |
import-all-tables |
将数据库中所有的表的数据导入到HDFS中 |
job |
用来生成一个sqoop的任务,生成后,该任务并不执行,除非使用命令执行该任务。 |
list-databases |
打印出关系数据库所有的数据库名 |
list-tables |
打印出关系数据库某一数据库的所有表名 |
merge |
将HDFS中不同目录下面的数据合在一起,并存放在指定的目录中 |
metastore |
记录sqoop job的元数据信息 |
version |
显示sqoop版本信息 |
2、具体使用案例
注意:大小写
实例一:
sqoop codegen --connect jdbc:oracle:thin:@192.168.137.129:1521:orcl --username SCOTT --password tiger --table EMP
也可以写成下面的形式:
sqoop codegen \
--connect jdbc:oracle:thin:@192.168.137.129:1521:orcl \
--username SCOTT --password tiger \
--table EMP
实例二:
sqoop create-hive-table --connect jdbc:oracle:thin:@192.168.137.129:1521:orcl --username SCOTT --password tiger --table EMP --hive-table emphive
实例三:
sqoop eval --connect jdbc:oracle:thin:@192.168.137.129:1521:orcl --username SCOTT --password tiger --query "select ename from emp where deptno=10"
sqoop eval --connect jdbc:oracle:thin:@192.168.137.129:1521:orcl --username SCOTT --password tiger --query "select ename,dname from emp,dept where emp.deptno=dept.deptno"
实例四:
Orcale:
sqoop export --connect jdbc:oracle:thin:@192.168.137.129:1521:orcl --username SCOTT --password tiger --table STUDENTS --export-dir /students
MySQL:
sqoop export --connect jdbc:mysql://192.168.215.131:3306/university --username root --password 123456 --table t_result --export-dir /output/flume01
sqoop export \
--connect jdbc:mysql://192.168.215.131:3306/university \
--username root \
--password 123456 \
--input-fields-terminated-by '\t' \
--table t_mr_result \
--export-dir /output/flume01
实例五:
sqoop import --connect jdbc:oracle:thin:@192.168.137.129:1521:orcl --username SCOTT --password tiger --table EMP --target-dir /emp
实例六:
sqoop import-all-tables --connect jdbc:oracle:thin:@192.168.137.129:1521:orcl --username SCOTT --password tiger -m 1
实例七:
sqoop list-databases --connect jdbc:oracle:thin:@192.168.137.129:1521:orcl --username SYSTEM --password password
实例八:
sqoop list-tables --connect jdbc:oracle:thin:@192.168.137.129:1521:orcl --username SCOTT --password tiger
实例九:
sqoop version
实例十:将数据导入HBase(需要事先将表创建)
sqoop import --connect jdbc:oracle:thin:@192.168.137.129:1521:orcl --username SCOTT --password tiger --table EMP --columns empno,ename,sal,deptno --hbase-table emp --hbase-row-key empno --column-family empinfo