sqoop简介
sqoop是什么
Sqoop是一款开源的软件工具,提供了Hadoop和关系型数据库中的数据相互转移的功能。可以将一个关系型数据库(例如 : MySQL)中的数据导进到Hadoop的HDFS中,也可以将HDFS的数据导进到关系型数据库中。
在E-MapReduce集群中使用sqoop
当前E-MapReduce还没有集成Sqoop,很快会发布下个版本默认提供sqoop组件。在E-MapReduce集群安装和常见场景的导入导出基本功能使用请参见
帮助文档-sqoop
sqoop高级特性
导入导出通用可选参数
-m
指定启动n个map来并行导入数据,默认是4个。根据数据量的大小调整作业数。
--direct
快速模式,利用了数据库自带的导入导出工具,如mysql的mysqlimport,官方说比jdbc连接的方式更快速
--as-avrodatafile
将数据导入到一个Avro数据文件中或从Avro数据文件中导出,默认是textfile
--as-sequencefile
将数据导入到一个sequence文件中或从Avro数据文件中导出
-z
指定使用压缩导入或从压缩的hdfs文件中导出。默认压缩格式是gzip
--compression-codec
配合-Z使用,指定具体压缩格式。默认压缩格式是gzip
导入import高级特性
--split-by
指定map基于哪个列的值划分范围,默认是主键。sqoop会先查询该列的最大,最小值,在最大最小值的范围内划分各map的取值范围。
条件和字段过滤
--columns
指定导入哪些字段,例如 --columns "employee_id,first_name,last_name,job_title"
--where
附加额外的sql过滤,例如–where ‘id > 2’,可以用来做增量插入的条件。
--query
提供完整的select sql,从查询结果中导入数据。在查询语句中一定要有where条件且在where条件中需要包含$CONDITIONS,并且指定--split-by 参数。示例:–query ‘select * from person where $CONDITIONS ‘ –split-by id。 map会根据 id的划分范围替换 $CONDITIONS。
增量导入
--append
将数据追加到hdfs中已经存在的目录中。使用该参数,sqoop将把数据先导入到一个临时目录中,然后重新给文件命名到正式的目录中,以避免和该目录中已存在的文件重名。
导入支持各种sql过滤,字段或时间戳增量,-append .
--incremental
mode支持append and lastmodified两种。append:按列的大小追加,对大于last-value指定的值之后的记录进行追加导入。lastmodified:最后的修改时间,追加last-value指定的日期之后的记录。
需要跟 --check-column (col)和–last-value (value) 联合使用。前者指定判断增量的列名,后者指定自从上次导入后列的最大值,大于该值的都会被导入。
导出 export高级特性
--batch
使用batch sql批量insert 数据。
insert or update
默认导出只会insert 记录进关系型数据库,如果有唯一主键冲突,则会失败。指定--update-key id,会根据该字段做update操作。将关系数据库中已经存在的数据进行更新。
更新模式下不存在也不会报错,如果期待存在就更新不存在就插入,用 --update-mode allowinsert