Sqoop是什么
Apache Sqoop(TM)是一种旨在有效地在Apache Hadoop和诸如关系数据库等结构化数据存储之间传输大量数据的工具。
Sqoop于2012年3月孵化出来,现在是一个顶级的Apache项目。
最新的稳定版本是1.4.6。Sqoop2的最新版本是1.99.7。请注意,1.99.7与1.4.6不兼容,且没有特征不完整,它并不打算用于生产部署。
Sqoop是用来做什么的
将导入或导出命令翻译成mapreduce程序来实现。
在翻译出的mapreduce中主要是对inputformat和outputformat进行定制。
如何玩转Sqoop
首先要说的是安装sqoop之前必须已经具备了hadoop环境和java环境,因为说到底Sqoop的操作是把MySQL中的数据导出到HDFS中或者hive中,或者从HDFS和hive中导入MySQL中,所以这些基本的条件是必须具备的。
另外hive使用的元数据(metastore)为了能多个hive客户端同时使用也要放在数据库中,hive默认元数据库Derby(嵌入模式)
正题
下载地址:最新版下载地址:http://mirrors.hust.edu.cn/apache/sqoop/1.4.6/
后面就是上传解压什么的就不多说了,直接开始说修改配置文件
1.conf目录下修改这两个文件的名字
mv sqoop-env-template.sh sqoop-env.sh
mv sqoop-site-template.xml sqoop-site.xml
2.修改sqoop-env.sh(配置环境,现在只配目前所需,有几个没配)
export HADOOP_COMMON_HOME=/home/admin/modules/hadoop-2.7.2
export HADOOP_MAPRED_HOME=/home/admin/modules/hadoop-2.7.2
export HIVE_HOME=/home/admin/modules/apache-hive-1.2.2-bin
export ZOOKEEPER_HOME=/home/admin/modules/zookeeper-3.4.5
export ZOOCFGDIR=/home/admin/modules/zookeeper-3.4.5
3把驱动的jar包拷贝到sqoop lib目录下(jdbc驱动)
cp -a mysql-connector-java-5.1.27-bin.jar ~/modules/sqoop-1.4.6.bin__hadoop-2.0.4-alpha/lib/
4.bin/sqoop help:验证sqoop是否配置成功
5.测试Sqoop是否能够成功连接数据库
bin/sqoop list-databases –connect jdbc:mysql://xxx:3306/ –username root –password xxxxxx
成功的标志:
information_schema
metastore
mysql
performance_schema
举例
需求一:从MySQL导入数据到HDFS
mysql> create database company;
mysql> create table company.staff(id int(4) primary key not null auto_increment, name varchar(255), sex varchar(255));
mysql> insert into company.staff(name, sex) values(‘Thomas’, ‘Male’);
mysql> insert into company.staff(name, sex) values(‘Catalina’, ‘FeMale’);
(1)全部导入(在sqoop文件目录下运行,运行的前提是集群已经开了)
bin/sqoop import \
–connect jdbc:mysql://linux01:3306/company \
–username root \
–password 123456 \
–table staff \
–target-dir /user/company \
–delete-target-dir \
–num-mappers 1 \
–fields-terminated-by “\t”
提示:如果query后使用的是双引号,则$CONDITIONS前必须加转移符,防止shell识别为自己的变量。
需求二:MySQL到Hive
bin/sqoop import \
–connect jdbc:mysql://linux01:3306/company \
–username root \
–password 123456 \
–table staff \
–num-mappers 1 \
–hive-import \
–fields-terminated-by “\t” \
–hive-overwrite \
–hive-table staff_hive
以上都是导入下面是导出
需求三:HIVE/HDFS到RDBMS
bin/sqoop export \
–connect jdbc:mysql://linux01:3306/company \
–username root \
–password 123456 \
–table staff \
–num-mappers 1 \
–export-dir /user/hive/warehouse/staff_hive \
–input-fields-terminated-by “\t”
注释一:–num-mappers 1 \ 是指定mappers的数量默认四个,指定一个导入到HDFS或者hive中时,如果mappers是四个则会生成四个文件一条数据一个文件,不超过四个。
注释二:Mysql中如果表不存在,不会自动创建
Sqoop一些常用命令及参数
import:将数据导入到集群
export:将集群数据导出
codegen:获取数据库中某张表数据生成Java并打包Jar
create-hive-table:创建Hive表
eval:查看SQL执行结果
import-all-tables:导入某个数据库下所有表到HDFS中
job:用来生成一个sqoop的任务,生成后,该任务并不执行,除非使用命令执行该任务。
list-databases:列出所有数据库名
list-tables:列出某个数据库下所有表
merge:将HDFS中不同目录下面的数据合在一起,并存放在指定的目录中
metastore:记录sqoop job的元数据信息,如果不启动metastore实例,则默认的元数据存储目录为:~/.sqoop,如果要更改存储目录,可以在配置文件sqoop-site.xml中进行更改。
help:打印sqoop帮助信息
version:打印sqoop版本信息
命令&参数详解
上面列举了一些Sqoop的常用命令,对于不同的命令,有不同的参数,让我们来一一列举说明。
最详细的sqoop命令和参数 请去官网查看http://sqoop.apache.org/