1,什么是Sqoop
sqoop是apache旗下一款“Hadoop和关系数据库服务器之间传送数据”的工具。
导入数据:可以从MySQL,Oracle等关系数据库中导入数据到Hadoop的HDFS、HIVE、HBASE等数据存储系统。
导出数据:从Hadoop的文件系统中导出数据到关系数据库。
image.png
2,Sqoop安装
下载地址:http://ftp.wayne.edu/apache/sqoop/1.4.7/ 从改地址下载sqoop-1.4.7.bin__hadoop-2.6.0.tar.gz该文件
#到指定目录解压该文件
tar zxvf sqoop-1.4.7.bin__hadoop-2.6.0.tar.gz
cd $SQOOP_HOME/conf
mv sqoop-env-template.sh sqoop-env.sh
#通过vi打开sqoop-env.sh并编辑如下配置文件
export HADOOP_COMMON_HOME=/home/hadoop/apps/hadoop-2.6.1/ #Hadoop的home路径
export HADOOP_MAPRED_HOME=/home/hadoop/apps/hadoop-2.6.1/ #Hadoop的home路径
export HIVE_HOME=/home/hadoop/apps/hive-1.2.1 #Hive的home路径
3,验证启动
cd $SQOOP_HOME/bin
sqoop-version
预期的输出:
15/12/17 14:52:32 INFO sqoop.Sqoop: Running Sqoop version: 1.4.7
到这里,整个Sqoop安装工作完成。
4,Sqoop的数据导入
导入语法如下
$ sqoop import (generic-args) (import-args)
示例1
bin/sqoop import --connect jdbc:mysql://wing1:3306/sqoop_test --username root --password root --table emp --target-dir /data/input1 --m 1
#--connect表示连接所需要导出数据的数据库
#--username数据库的用户名
#--password数据库的密码
#--table导出那张表的数据
#--target-dir表示在hdfs上的存储路径
#--m表示几个map执行
示例2
bin/sqoop import --connect jdbc:mysql://wing1:3306/sqoop_test --username root --password root --table emp --where "name ='zhangsan'" --target-dir /data/input1 --m 1
#--where表示查询中的where条件
示例3
bin/sqoop import --connect jdbc:mysql://wing1:3306/sqoop_test --username root --password root --query 'select e.id, e.name, e.age, a.id as address_id, a.address from emp e left join emp_address a on e.id = a.emp_id and $CONDITIONS;' --split-by id --target-dir /data/input1 --m 1
#--query可以灵活的使用SQL语句进行各种查询
示例4
#该语法表示的是增量导入
bin/sqoop import --connect jdbc:mysql://wing1:3306/sqoop_test --username root --password root --table emp --incremental append --check-column id --last-value 1 --target-dir /data/input5 --m 1
#--incremental append表示增量导入
#--check-column id以ID为基准进行导入
#--last-value 1表从ID这个位置开始增量导入
示例5
#该语法表示的是从hdfs中导出数据到关系型数据库中
bin/sqoop export --connect jdbc:mysql://wing1:3306/sqoop_test2 --username root --password root --table emp --export-dir /data/input5