Apache Sqoop是用来实现结构型数据(如关系数据库)和Hadoop之间进行数据迁移的工具。它充分利用了MapReduce的并行特点以批处理的方式加快数据的传输,同时也借助MapReduce实现了容错。
项目地址:http://sqoop.apache.org/
目前为止,已演变出了2个版本:sqoop1和sqoop2。
sqoop1的最新版本是1.4.5,sqoop2的最新版本是1.99.3;1.99.3和1.4.5是不兼容的,并且功能还没有开发完成,还不合适在生产环境部署。
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:/ |
guojian@localtest:~/work$ sudo apt-get install sqoop
guojian@localtest:~/work$ sqoop help
usage: sqoop COMMAND [ARGS]Available commands:codegen Generate code to interact with database recordscreate-hive-table Import a table definition into Hiveeval Evaluate a SQL statement and display the resultsexport Export an HDFS directory to a database tablehelp List available commandsimport Import a table from a database to HDFSimport-all-tables Import tables from a database to HDFSjob Work with saved jobslist-databases List available databases on a serverlist-tables List available tables in a databasemerge Merge results of incremental importsmetastore Run a standalone Sqoop metastoreversion Display version informationSee 'sqoop help COMMAND' for information on a specific command.
import是将关系数据库迁移到HDFS上
guojian@localtest:~/work$ sqoop import --connect jdbc:mysql://192.168.81.176/hivemeta2db --username root -password passwd --table sds
guojian@localtest:~/work$ hadoop fs -ls /user/guojian/sdsFound 5 items-rw-r--r-- 3 guojian cug_test 0 2014-09⑴1 16:04 /user/guojian/sds/_SUCCESS-rw-r--r-- 3 guojian cug_test 483 2014-09⑴1 16:03 /user/guojian/sds/part-m-00000.snappy-rw-r--r-- 3 guojian cug_test 504 2014-09⑴1 16:04 /user/guojian/sds/part-m-00001.snappy-rw-r--r-- 3 guojian cug_test 1001 2014-09⑴1 16:03 /user/guojian/sds/part-m-00002.snappy-rw-r--r-- 3 guojian cug_test 952 2014-09⑴1 16:03 /user/guojian/sds/part-m-00003.snappy
可以通过--m设置并行数据,即map的数据,决定文件的个数。
默许目录是/user/${user.name}/${tablename},可以通过--target-dir设置hdfs上的目标目录。
如果想要将全部数据库中的表全部导入到hdfs上,可使用import-all-tables命令。
sqoop import-all-tables