Hadoop学习笔记: sqoop配置与使用
sqoop即SQL-to-Hadoop,是一个把数据从关系型数据库导入到Hadoop系统中的工具(HDFS,HIVE和HBase),也可以将数据从Hadoop导入到关系型数据库。本文以sqoop 1.99.6版本为例演示如何配置和使用sqoop。
一. 安装配置sqoop
1. 从Apache网上下载sqoop http://apache.fayea.com/sqoop/1.99.6/
2. 将压缩包放置到指定目录后,运行tar -zxvf sqoop-1.99.6-bin-hadoop200.tar.gz 解压缩文件
3. 配置sqoop环境变量
- 修改/etc/profile
export SQOOP_HOME=/usr/local/sqoop-1.99.6
export CATALINA_BASE=$SQOOP_HOME/server
export LOGDIR=$SQOOP_HOME/logs
export PATH=$SQOOP_HOME/bin:$PATH
- 修改server/conf/catalina.properties,找到common.loader行,把/usr/lib/hadoop/lib/*.jar改成你的hadoop jar包目录,或者在$SQOOP_HOME中建个文件夹例如hadoop_lib,然后将这些jar包cp到此文件夹中,最后将此文件夹路径添加到common.loader属性中。
- 修改server/conf/sqoop.properties,找到Hadoop configuration directory,将其修改为Hadoop配置文件所在目录,并且替换@LOGDIR@ 和@BASEDIR@为sqoop相对应目录
4. 下载mysql JDBC驱动程序 http://dev.mysql.com/downloads/connector/j/, 将其拷贝到$SQOOP_HOME/Server/lib下。
5. 在终端中验证sqoop配置
sqoop2-tool verify
出现以下信息说明sqoop配置成功
Verification was successful.
Tool class org.apache.sqoop.tools.tool.VerifyTool has finished correctly
6.在终端中启动sqoop服务
sqoop.sh server start
7.进入sqoop命令行
sqoop.sh client or sqoop2-shell
8. 查看sqoop版本
show version --all
如果出现如下类似信息说明安装配置成功
client version: Sqoop 1.99.6 source revision 07244c3915975f26f03d9e1edf09ab7d06619bb8 Compiled by root on Wed Apr 29 10:40:43 CST 2015 server version: Sqoop 1.99.6 source revision 07244c3915975f26f03d9e1edf09ab7d06619bb8 Compiled by root on Wed Apr 29 10:40:43 CST 2015 API versions: [v1]
二. 使用sqoop
mysql数据库脚本如下
create database hadoop; create table hadoop.widgets(id INT NOT NULL PRIMARY KEY AUTO_INCREMENT, widget_name VARCHAR(64) NOT NULL, price DECIMAL(10,2), design_date DATE, version INT, design_comment VARCHAR(100)); INSERT INTO hadoop.widgets VALUES (NULL, 'sprocket', 0.25, '2010-02-10',1, 'Connects two gizmos'); INSERT INTO hadoop.widgets VALUES (NULL, 'gizmo', 4.00, '2009-11-30', 4, NULL); INSERT INTO hadoop.widgets VALUES (NULL, 'gadget', 99.99, '1983-08-13', 13, 'Our flagship product');
1. 创建link object
查看已经在sqoop server上注册的connector
创建指向mysql的link
创建指向hadoop的link
2. 创建job对象
3. 执行job
如果执行时出错,可以设置打开verbose模式以得到更详细的错误信息
set option --name verbose --value true
查看结果,发现目标目录中生成了10个文件,其中两个包含了源数据库中的3行纪录,其余为空文件。
如果想要将数据从hadoop导入mysql中,只要在创建job时将上述案例的link交换即可。
参考资料:http://sqoop.apache.org/docs/1.99.6/index.html