Hadoop数据传输工具sqoop
来源:互联网 发布:便宜已备案域名出售 编辑:程序博客网 时间:2024/04/20 02:59
概述
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的进一步发展可以参考:A New Generation of Data Transfer Tools for Hadoop: Sqoop 2
但是,只有一小部分经过sqoop官方测试,如下:
Database version --direct support connect string matchesHSQLDB 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 helpusage: 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 informationSee '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,内容:
运行:
$ ./sqoop --options-file a.conf
查看输出:
sqoop export 能将HDFS上的文件导出到关系数据库。其工作原理是根据用户指定的分隔符(字段分隔符:--fields-terminated-by)读入并解析数据,然后转换成insert/update语句导入数据到关系数据库。
- 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'
$ ./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/*456789
Export
sqoop export 能将HDFS上的文件导出到关系数据库。其工作原理是根据用户指定的分隔符(字段分隔符:--fields-terminated-by)读入并解析数据,然后转换成insert/update语句导入数据到关系数据库。其具有以下特点:
1. 支持将数据导出到表(--table)或者调用存储过程(--call)
2. 支持insert、update模式1. 支持将数据导出到表(--table)或者调用存储过程(--call)
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
reference:
Apache sqoopSqoop User Guide
Apache Sqoop: A Data Transfer Tool for Hadoop
A New Generation of Data Transfer Tools for Hadoop: Sqoop 2
Sqoop使用
大数据异构环境数据同步工具DataX 与Sqoop 之比较
- Hadoop数据传输工具sqoop
- Hadoop数据传输工具sqoop
- Hadoop数据传输工具sqoop
- Hadoop数据传输工具sqoop
- Hadoop数据传输工具sqoop
- Hadoop数据传输工具:Sqoop
- Hadoop数据传输工具sqoop
- Hadoop数据传输工具sqoop
- Hadoop数据传输工具sqoop(一)简介
- Hadoop数据传输工具sqoop(二)工具命令
- Hadoop数据传输工具sqoop(四)Java远程调用Sqoop进行数据传输
- Hadoop数据传输工具sqoop(三)用Sqoop导入数据到HIVE
- 【hadoop Sqoop】数据迁移工具 sqoop 入门
- hadoop中的sqoop工具的使用
- hadoop之sqoop------>数据迁移工具
- Hadoop-Sqoop
- 学习Hadoop第二十二课(Sqoop---数据迁移工具)
- hadoop平台下的数据导入导出工具Sqoop
- SOA标准之----JBI架构思想
- QT中如何驱动链接数据库MYSql
- ServiceMix流程介绍
- xcode中动态添加label控件(转)
- IPOD 1 之通知栏显示与交互
- Hadoop数据传输工具sqoop
- 从锤子手机发布说起
- Delphi Socket 编程(7)
- C++:STL标准入门汇总
- JS 文本框输入字数 显示剩余
- VerticalTextView的实现
- char、varchar和varchar2的区别
- 收获,不止Oracle
- 面试感想