在Aliyun E-MapReduce集群上 使用sqoop高级特性

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

上一篇:科学家通过碳纳米管研发神奇“纱线” 可为物联网传感器提供方便电能


下一篇:Android技术周报_W2