Hadoop数据传输工具sqoop(一)简介

一、概述

sqoop是Apache顶级项目,主要用来在Hadoop和关系数据库中传递数据。通过sqoop,我们可以方便的将数据从关系数据库导入到HDFS,或者将数据从HDFS导出到关系数据库。

sqoop架构:

sqoop架构非常简单,其整合了Hive、Hbase和Oozie,通过map-reduce任务来传输数据,从而提供并发特性和容错。

sqoop主要通过JDBC和关系数据库进行交互。理论上支持JDBC的database都可以使用sqoop和hdfs进行数据交互。
但是,只有一小部分经过sqoop官方测试,如下:

Databaseversion-direct supportconnect string matches
HSQLDB1.8.0+NOjdbc:hsqldb:*//
MySQL5.0+YESjdbc:mysql://
Oracle10.2.0+NOjdbc:oracle:*//
PostgreSQL8.3+YES(import only)jdbc:postgresql://
较老的版本有可能也被支持,但未经过测试。
出于性能考虑,sqoop提供不同于JDBC的快速存取数据的机制,可以通过--direct使用。


二、安装配置

1、环境

操作系统:CentOS-6.3

Hadoop版本:1.2.1

Sqoop:sqoop-1.4.5.bin__hadoop-1.0.0

2、解压sqoop,配置环境变量

在/etc/profile中添加:

export $ZOOKEEPER_HOME=/usr/local/app/hadoop/zookeeper-3.4.6
<pre name="code" class="plain">export $SQOOP_HOME=/usr/local/app/hadoop/sqoop-1.4.5.bin__hadoop-1.0.0
export $PATH = $ZOOKEEPER/bin:$SQOOP_HOME/bin:$PATH

 3、将jdbc驱动包放到$SQOOP_HOME/lib里,配置完成。 


三、工具命令

1、sqoop help可以查看相关帮助

$ sqoop help
usage: sqoop COMMAND [ARGS]
Available commands:
  codegen            Generate code to interact with database records
  create-hive-table  Import a table definition into Hive
  eval               Evaluate a SQL statement and display the results
  export             Export an HDFS directory to a database table
  help               List available commands
  import             Import a table from a database to HDFS
  import-all-tables  Import tables from a database to HDFS
  job                Work with saved jobs
  list-databases     List available databases on a server
  list-tables        List available tables in a database
  merge              Merge results of incremental imports
  metastore          Run a standalone Sqoop metastore
  version            Display version information
See 'sqoop help COMMAND' for information on a specific command.

2、list-tables查看表

$ sqoop list-tables --connect jdbc:mysql://127.0.0.1/test --username root --password 123456 
a
t1

3、import

sqoop 数据导入具有以下特点:
1)支持文本文件(--as-textfile)、avro(--as-avrodatafile)、SequenceFiles(--as-sequencefile)。 RCFILE暂未支持,默认为文本
2支持数据追加,通过--apend指定
3支持table列选取(--column),支持数据选取(--where),和--table一起使用
4支持数据选取,例如读入多表join后的数据'SELECT a.*, b.* FROM a JOIN b on (a.id == b.id) ‘,不可以和--table同时使用
5支持map数定制(-m)
6支持压缩(--compress)
7支持将关系数据库中的数据导入到Hive(--hive-import)、HBase(--hbase-table)

示例:

1)MySQL数据库内容:

mysql> select * from a;                          
+------+--------+
| key1 | value1 |
+------+--------+
|    1 | a1     |
|    2 | a2     |
|    3 | a3     |
|    4 | a4     |
|    5 | a5     |
|    6 | a6     |
|    7 | a7     |
|    8 | a8     |
|    9 | a9     |
+------+--------+
2)执行sqoop import将MySQL数据导入HDFS:

$ sqoop --options-file a.conf 
参数文件a.conf内容:

import  
--append  
-m 3 
--connect jdbc:mysql://127.0.0.1/test   
--username root   
--password 123456   
--table a  
--target-dir /tmp/a  
--columns key1
--where 'key1>3'
3)查看执行结果:

$ hadoop fs -ls /tmp/a/  
Found 3 items
-rw-r--r--   1 work supergroup          4 2013-03-21 23:08 /tmp/a/part-m-00000
-rw-r--r--   1 work supergroup          4 2013-03-21 23:08 /tmp/a/part-m-00001
-rw-r--r--   1 work supergroup          4 2013-03-21 23:08 /tmp/a/part-m-00002  
3个文件对应3个mapper

$ hadoop fs -cat /tmp/a/*
4
5
6
7
8
9


4、Export

sqoop export 能将HDFS上的文件导出到关系数据库。其工作原理是根据用户指定的分隔符(字段分隔符:--fields-terminated-by)读入并解析数据,然后转换成insert/update语句导入数据到关系数据库。

其具有以下特点:
1)支持将数据导出到表(--table)或者调用存储过程(--call)
2) 支持insert、update模式
3)支持并发控制(-m)

示例:

1)查看HDFS上的数据

$ hadoop fs -cat /tmp/b/*
1,a
2,b
3,c
2)执行sqoop export将HDFS数据导出到MySQL

$ sqoop export --connect jdbc:mysql://127.0.0.1/test --table b  -username root -password 123456 --export-dir /tmp/b
3)查看MySQL数据

mysql> select * from b;         
+------+--------+
| key1 | value1 |
+------+--------+
|    1 | a      |
|    2 | b      |
|    3 | c      |
+------+--------+

四、其它

1. 通过使用map-reduce,sqoop提供了良好的并发性和容错,可以作为 异构数据库同步工具
2. Sqoop虽然支持Hive、HBase,但并不完整,某些场景下数据传输后的加工不可避免
3. 大数据传输,也许可以使用--direct


转自:http://blog.csdn.net/yfkiss/article/details/8700480

参考:

Sqoop Documentation (v1.4.5)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值