Sqoop
来源:互联网 发布:python做网页 编辑:程序博客网 时间:2024/06/02 05:19
Apache Sqoop是用来实现结构型数据(如关系数据库)和Hadoop之间进行数据迁移的工具。它充分利用了MapReduce的并行特点以批处理的方式加快数据的传输,同时也借助MapReduce实现了容错。
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:/
通过sqoophelp命令查看sqoop帮助
import(将关系数据库迁移到HDFS上)
[例1] 将mysql中的sds表导入HDFS中
sqoop import
--connectjdbc:mysql://node01/test
--username root -password passwd
--table sds
[例2] 将mysql中的sds,指定的列表导入HDFS中
sqoop import
--connect jdbc:mysql://node01/test
--username root -password 123
--table sds
--columns "SD_ID,CD_ID,LOCATION"
[例3]将整个数据库中的表全部导入到hdfs上
import-all-tables命令
sqoop import-all-tables
--connect jdbc:mysql://node01/test
--username root -password 123
[例4]指定导出文件为SequenceFiles,文件命名为com.ctrip.sds
sqoop import
--connect jdbc:mysql://node01/test
--username root -password 123
--table psn
--class-name com.ctrip.psn --as-sequencefile
[例5]导入文本时可以指定分隔符
sqoop import
--connect jdbc:mysql://node01/test
--username root -password 123
--table psn
--fields-terminated-by '\t'
--lines-terminated-by '\n'
--optionally-enclosed-by '\"'
[例6]可以指定过滤条件
sqoop import
--connect jdbc:mysql://node01/test
--username root -password passwd
--table sds
--where "sd_id > 100"
--m设置并行数据,即map的数据,决定文件的个数。
--target-dir设置hdfs上的目标目录。
export(将hdfs上的数据导入到关系数据库中)
[例一] 将HDFS中数据导入到mysql中的sds表
sqoop export
--connect jdbc:mysql://node01/test
--username root -password 123
--table psn
--export-dir /user/root/psn
mysql数据库的sds表需要先把表结构创建出来,否则export操作会直接失败。
[例二] 将关系数据库表导入到hive表中
create-hive-table
sqoop create-hive-table
--connect jdbc:mysql://node01/test
--username root --password 123
--table psn
--hive-table sds_bak
默认sds_bak是在default数据库的。
这一步需要依赖HCatalog,需要先安装HCatalog,否则报错。
list-databases列出一台server上可用的数据库
sqoop list-databases
--connect jdbc:mysql://node01/
--username root -password 123
list-tables列出一个数据库中的表
sqoop list-tables
--connect jdbc:mysql://node01/test
--username root -password 123
codegen:
将关系数据库表映射为一个java文件、javaclass类相关的jar包
sqoop codegen
--connect jdbc:mysql://node01/test
--username root -password 123
--table psn
eval用户可以很快的使用sql语句对数据库进行操作。
sqoop eval
--connect jdbc:mysql://node01/test
--username root -password 123
--query "SELECT * FROM psn LIMIT 10"
job用来生成sqoop任务。
sqoop job
--create myjob
-- import
--connect jdbc:mysql://node01/test
--username root -password 123
--table psn-m 1
sqoop job -exec myjob
metastore配置sqoop job的共享元数据信息,这样多个用户定义和执行sqoop job在这一metastore中。
启动:sqoop metastore
关闭:sqoop metastore –shutdown
存储位置: conf/sqoop-site.xml/sqoop.metastore.server.location
[补充]
由于sqoop是通过map完成数据的导入,各个map过程是独立的,没有事物的概念,可能会有部分map数据导入失败的情况。为了解决这一问题,sqoop中有一个折中的办法,即是指定中间staging表,成功后再由中间表导入到结果表。
--staging-table<staging-table-name>staging表结构也是需要提前创建出来
sqoop export
--connect jdbc:mysql://192.168.81.176/sqoop
--username root -password passwd
--table sds
--export-dir /user/guojian/sds
--staging-table sds_tmp
[注]在使用 –direct,--update-key或者--call存储过程的选项时,staging中间表是不可用的。
验证结果:
(1)数据会首先写到sds_tmp表,导入操作成功后,再由sds_tmp表导入到sds结果表中,同时会清除sds_tmp表。
(2)如果有map失败,则成功的map会将数据写入tmp表,export任务失败,同时tmp表的数据会被保留。
(3)如果tmp中已有数据,则此export操作会直接失败,
--clear-staging-table 指定在执行前清除中间表。
- SQOOP
- Sqoop
- SQOOP
- SQOOP
- sqoop
- sqoop
- Sqoop
- sqoop
- sqoop
- sqoop
- Sqoop
- Sqoop
- sqoop
- sqoop
- sqoop
- sqoop
- Sqoop
- sqoop
- JavaScript对象总概
- IntelliJ IDEA的安装和使用
- Native JsBridge源码解析 深入理解JsBridge
- UVAlive 3890&Poj3525 半平面交+二分 解题报告
- 机房收费系统(三)组合查询
- Sqoop
- webhook开发环境部署
- 使用 Netty 搭建消息中心
- 组合数取模(-)
- linux运行级别
- c# 获取当前运行程序文件,函数,行号
- [LintCode]53.翻转字符串
- jQuery源码学习笔记系列(一)
- hdu6153 A Secret CCPC1004 扩展KMP