Hadoop数据传输工具sqoop

概述

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

sqoop架构非常简单,其整合了Hive、Hbase和Oozie,通过map-reduce任务来传输数据,从而提供并发特性和容错。
sqoop的进一步发展可以参考:A New Generation of Data Transfer Tools for Hadoop: Sqoop 2

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

Database            version            –direct support            connect string matches
HSQLDB            1.8.0+            No            jdbc:hsqldb:*//
MySQL            5.0+             Yes            jdbc:mysql://
Oracle             10.2.0+            No             jdbc:oracle:*//
PostgreSQL             8.3+            Yes             (import only)jdbc:postgresql://

较老的版本有可能也被支持,但未经过测试。
出于性能考虑,sqoop提供不同于JDBC的快速存取数据的机制,可以通过–direct使用。

以下基于sqoop-1.4.3

安装

sqoop安装使用可以参考http://www.54chen.com/java-ee/sqoop-mysql-to-hive.html,测试work

工具

sqoop包含一系列的工具,运行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.

使用工具list-tables查看表,如下:
$ ./sqoop list-tables –connect jdbc:mysql://127.0.0.1/test –username root –password 123456 
a
t1

可以使用codegen生成代码,但不执行map-reduce,如下:
$ ./sqoop codegen –connect jdbc:mysql://127.0.0.1/test –username root –password 123456 –table a –
class-name zxm_sqoop 
……
13/03/21 21:02:01 INFO orm.CompilationManager: Writing jar file: /tmp/sqoop-work/compile/29864e3980ab5630b699e8e1e2145369/zxm_sqoop.jar
此处相关代码和java包可在 /tmp/sqoop-work/compile/29864e3980ab5630b699e8e1e2145369/找到

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)
   数据导入Hive分三步:1)导入数据到HDFS  2)Hive建表  3)使用“LOAD DATA INPAHT”将数据LOAD到表中
   数据导入HBase分二部:1)导入数据到HDFS 2)调用HBase put操作逐行将数据写入表
*

示例:
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     |
+——+——–+

编写文件a.conf,内容:

[html] view plaincopy

  1. import  
  2.   
  3. –append  
  4.   
  5. -m  
  6. 3  
  7.   
  8. –connect   
  9. jdbc:mysql://127.0.0.1/test   
  10.   
  11. –username   
  12. root   
  13.   
  14. –password   
  15. 123456   
  16.   
  17. –table   
  18. a  
  19.   
  20. –target-dir  
  21. /tmp/a  
  22.   
  23. –columns  
  24. key1  
  25.   
  26. –where  
  27. ‘key1>3′  

运行:
$ ./sqoop –options-file a.conf 
查看输出:
$ 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

Export

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

其具有以下特点:
1. 支持将数据导出到表(–table)或者调用存储过程(–call)

2. 支持insert、update模式
3. 支持并发控制(-m)
实例:
$ hadoop fs -cat /tmp/b/*
1,a
2,b
3,c

$ ./sqoop export –connect jdbc:mysql://127.0.0.1/test –table b  -username root -password 123456 –ex
port-dir /tmp/b

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

出了上述提到的工具外,sqoop还提供了一些有意思的工具,例如sqoop job,有兴趣的同学可以研究下

其它:

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

时间: 2024-10-28 19:52:17

Hadoop数据传输工具sqoop的相关文章

Hadoop数据传输工具:Sqoop

&http://www.aliyun.com/zixun/aggregation/37954.html">nbsp;   ApacheSqoop(SQL-to-Hadoop)项目旨在协助RDBMS与Hadoop之间进行高效的大数据交流.用户可以在Sqoop的帮助下,轻松地把关系型数据库的数据导入到Hadoop与其相关的系统(如HBase和Hive)中:同时也可以把数据从Hadoop系统里抽取并导出到关系型数据库里.除了这些主要的功能外,Sqoop也提供了一些诸如查看数据库表等实用的

当Hadoop SQL工具与大数据框架携手同行

目前,SQL-on-Hadoop的采用率仍然偏低,但是其发展似乎是与Hadoop本身的采用有着相似的步调.2015年由IT研究和教育机构TDWI进行的一项对新兴技术的调查证实了这一结论. 在320位受访者中只有16%的人表示他们所在的企业正在使用商业SQL-on-Hadoop引擎作为商业智能或分析应用程序的一部分: 344位受访者中有22%的人说Hadoop SQL技术正用于管理数据.在后一种情况中,部署水平与前一种是接近的,而这也符合调查当时以及计划三年内的情况,这表明大多数Hadoop用户同

Hadoop生态系统工具指南

Hadoop工具生态系统生长迅速,以下是IT经理网整理的最新Hadoop工具资源,供IT经理日常参考,欢迎读者来信或留言补充. Hadoop Apache hadoop项目负责开发可靠的.可扩展的分布式计算开源软件. 网址:hadoop.apache.org   HDFS 分布式文件系统提供高速的应用数据访问. 网址:hadoop.apache.org/hdfs/   MapReduce 在计算机集群上进行大数据分布式处理的软件框架.   亚马逊Elastic MapReduce 亚马逊Elas

hadoop HDFS工具类:对hdfs的读、写

1.文件流写入hdfs public static void putFileToHadoop(String hadoop_path, byte[] fileBytes) throws Exception { Configuration conf = new Configuration(); FileSystem fs = FileSystem.get(URI.create(hadoop_path), conf); Path path = new Path(hadoop_path); FSData

基于大数据分析系统Hadoop的13个开源工具

Hadoop是由Apache基金会开发的一个大数据分布式系统基础架构,最早版本是2003年原Yahoo!DougCutting根据Google发布的学术论文研究而来.用户可以在不了解分布式底层细节的情况下,轻松地在Hadoop上开发和运行处理海量数据的应用程序.低成本.高可靠.高扩展.高有效.高容错等特性让Hadoop成为最流行的大数据分析系统,然而其赖以生存的HDFS和MapReduce组件却让其一度陷入困境--批处理的工作方式让其只适用于离线数据处理,在要求实时性的场景下毫无用武之地.因此,

在Hadoop集群环境中为MySQL安装配置Sqoop的教程_Mysql

Sqoop是一个用来将Hadoop和关系型数据库中的数据相互转移的工具,可以将一个关系型数据库(例如 : MySQL ,Oracle ,Postgres等)中的数据导进到Hadoop的HDFS中,也可以将HDFS的数据导进到关系型数据库中. Sqoop中一大亮点就是可以通过hadoop的mapreduce把数据从关系型数据库中导入数据到HDFS. 一.安装sqoop1.下载sqoop压缩包,并解压 压缩包分别是:sqoop-1.2.0-CDH3B4.tar.gz,hadoop-0.20.2-CD

sqoop数据迁移(基于Hadoop和关系数据库服务器之间传送数据)

1:sqoop的概述: (1):sqoop是apache旗下一款"Hadoop和关系数据库服务器之间传送数据"的工具.(2):导入数据:MySQL,Oracle导入数据到Hadoop的HDFS.HIVE.HBASE等数据存储系统:(3):导出数据:从Hadoop的文件系统中导出数据到关系数据库 (4):工作机制: 将导入或导出命令翻译成mapreduce程序来实现: 在翻译出的mapreduce中主要是对inputformat和outputformat进行定制: (5):Sqoop的原

Hadoop工具降低分布式计算环境复杂度

问:最近一段时间,包括Pentaho.Actuate.http://www.aliyun.com/zixun/aggregation/13432.html">Tableau.EMC.SAS.Jaspersoft 以及Birst等许多厂商都开始提供Hadoop工具.但是目前公司中懂Hadoop的人很少,厂商说他们的工具都有不错的易用性,即使Hadoop知识储备不足的用户也可以使用.请问这样的情况是真的吗? 答:Hadoop是用Java编写的,采用分布式计算范式作为平台.目前为止,使用Hado

大数据初探——Hadoop历史

  Hadoop是一个开源的分布式框架,是Apache下的一个开源项目.Hadoop运行可以在成千上万个普通机器节点组成的集群上,通过分布式的计算模型和存储模型来处理大数据集.Hadoop具有高容错性.工作在普通的机器节点上扩展性强等众多的优点,是企业选择处理大数据集工具的不二"人"选. 这个框架是另一个大项目的一部分,有数据库管理专家Mike Cafarella与开源技术的支持者DougCutting所构建.两人创建了一个名叫Nutch的网络爬虫与分析系统,该系统使用集群运算同时执行