Hadoop数据传输工具sqoop
jopen
11年前
概述
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 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://
较老的版本有可能也被支持,但未经过测试。 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 |
+------+--------+
</div>