Sqoop官方中文手册.docx

上传人:b****5 文档编号:6085168 上传时间:2023-01-03 格式:DOCX 页数:13 大小:21.66KB
下载 相关 举报
Sqoop官方中文手册.docx_第1页
第1页 / 共13页
Sqoop官方中文手册.docx_第2页
第2页 / 共13页
Sqoop官方中文手册.docx_第3页
第3页 / 共13页
Sqoop官方中文手册.docx_第4页
第4页 / 共13页
Sqoop官方中文手册.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

Sqoop官方中文手册.docx

《Sqoop官方中文手册.docx》由会员分享,可在线阅读,更多相关《Sqoop官方中文手册.docx(13页珍藏版)》请在冰豆网上搜索。

Sqoop官方中文手册.docx

Sqoop官方中文手册

Sqoop中文手册

1. 概述

本文档主要对SQOOP的使用进行了说明,参考内容主要来自于ClouderaSQOOP的官方文档。

为了用中文更清楚明白地描述各参数的使用含义,本文档几乎所有参数使用说明都经过了我的实际验证而得到。

2.codegen

将关系数据库表映射为一个java文件、javaclass类、以及相关的jar包,

1、 将数据库表映射为一个Java文件,在该Java文件中对应有表的各个字段。

2、 生成的Jar和class文件在metastore功能使用时会用到。

基础语句:

sqoopcodegen–connectjdbc:

mysql:

//localhost:

3306/hive–usernameroot–password123456–tableTBLS2

 

参数

说明

–bindir

指定生成的java文件、编译成的class文件及将生成文件打包为JAR的JAR包文件输

–class-name

–outdir

生成的java文件存放路径

–package-name

包名,如nic,则会生成cn和cnnic两级目录,生成的文件就存放在cnnic目录里

–input-null-non-string

在生成的java文件中,可以将null字符串设为想要设定的值(比如空字符串’’)

–input-null-string

同上,设定时,最好与上面的属性一起设置,且设置同样的值(比如空字符串等等)。

–map-column-java

数据库字段在生成的java文件中会映射为各种属性,且默认的数据类型与数据库类型保持对应,比如数据库中某字段的类型为bigint,则在Java文件中的数据类型为long型,通过这个属性,可以改变数据库字段在java中映射的数据类型,格式如:

–map-column-javaDB_ID=String,id=Integer

–null-non-string

在生成的java文件中,比如TBL_ID==null?

”null”:

””,通过这个属性设置可以将null字符串设置为其它值如ddd,TBL_ID==null?

”ddd”:

””

–null-string

同上,使用的时候最好和上面的属性一起用,且设置为相同的值

–table

对应关系数据库的表名,生成的java文件中的各属性与该表的各字段一一对应。

 

3.create-hive-table

生成与关系数据库表的表结构对应的HIVE表

基础语句:

sqoopcreate-hive-table–connectjdbc:

mysql:

//localhost:

3306/hive-usernameroot-password123456–tableTBLS–hive-tableh_tbls2

参数

–hive-home

Hive的安装目录,可以通过该参数覆盖掉默认的hive目录

–hive-overwrite

覆盖掉在hive表中已经存在的数据

–create-hive-table

默认是false,如果目标表已经存在了,那么创建任务会失败

–hive-table

后面接要创建的hive表

–table

指定关系数据库表名

 

4.eval

可以快速地使用SQL语句对关系数据库进行操作,这可以使得在使用import这种工具进行数据导入的时候,可以预先了解相关的SQL语句是否正确,并能将结果显示在控制台。

查询示例:

sqoopeval–connectjdbc:

mysql:

//localhost:

3306/hive-usernameroot-password123456-query“SELECT*FROMtblsLIMIT10″

数据插入示例:

sqoopeval–connectjdbc:

mysql:

//localhost:

3306/hive-usernameroot-password123456-e“INSERTINTOTBLS2

VALUES(100,1375170308,1,0,’hadoop’,0,1,’guest’,’MANAGED_TABLE’,’abc’,’ddd’)”

-e、-query这两个参数经过测试,比如后面分别接查询和插入SQL语句,皆可运行无误,如上。

5.export

从hdfs中导数据到关系数据库中

sqoopexport–connectjdbc:

mysql:

//localhost:

3306/hive–usernameroot–password

123456 –tableTBLS2–export-dirsqoop/test

参数

说明

–direct

快速模式,利用了数据库的导入工具,如mysql的mysqlimport,可以比jdbc连接的方式更为高效的将数据导入到关系数据库中。

–export-dir

存放数据的HDFS的源目录

-m,–num-mappers

启动N个map来并行导入数据,默认是4个,最好不要将数字设置为高于集群的最大Map数

–table

要导入到的关系数据库表

–update-key

后面接条件列名,通过该参数,可以将关系数据库中已经存在的数据进行更新操作,类似于关系数据库中的update操作

–update-mode

更新模式,有两个值updateonly和默认的allowinsert,该参数只能是在关系数据表里不存在要导入的记录时才能使用,比如要导入的hdfs中有一条id=1的记录,如果在表里已经有一条记录id=2,那么更新会失败。

–input-null-string

可选参数,如果没有指定,则字符串null将被使用

–input-null-non-string

可选参数,如果没有指定,则字符串null将被使用

–staging-table

该参数是用来保证在数据导入关系数据库表的过程中事务安全性的,因为在导入的过程中可能会有多个事务,那么一个事务失败会影响到其它事务,比如导入的数据会出现错误或出现重复的记录等等情况,那么通过该参数可以避免这种情况。

创建一个与导入目标表同样的数据结构,保留该表为空在运行数据导入前,所有事务会将结果先存放在该表中,然后最后由该表通过一次事务将结果写入到目标表中。

–clear-staging-table

如果该staging-table非空,则通过该参数可以在运行导入前清除staging-table里的数据。

–batch

该模式用于执行基本语句(暂时还不太清楚含义)

 

6.import

将数据库表的数据导入到hive中,如果在hive中没有对应的表,则自动生成与数据库表名相同的表。

sqoopimport–connectjdbc:

mysql:

//localhost:

3306/hive–usernameroot–password

123456–tableuser–split-byid–hive-import

–split-by指定数据库表中的主键字段名,在这里为id。

参数

说明

–append

将数据追加到hdfs中已经存在的dataset中。

使用该参数,sqoop将把数据先导入到一个临时目录中,然后重新给文件命名到一个正式的目录中,以避免和该目录中已存在的文件重名。

–as-avrodatafile

将数据导入到一个Avro数据文件中

–as-sequencefile

将数据导入到一个sequence文件中

–as-textfile

将数据导入到一个普通文本文件中,生成该文本文件后,可以在hive中通过sql语句查询出结果。

–boundary-query

边界查询,也就是在导入前先通过SQL查询得到一个结果集,然后导入的数据就是该结果集内的数据,格式如:

–boundary-query‘selectid,creationdatefrompersonwhereid=3’,表示导入的数据为id=3的记录,或者selectmin(),max()from,注意查询的字段中不能有数据类型为字符串的字段,否则会报错:

java.sql.SQLException:

Invalidvaluefor

getLong()

目前问题原因还未知

 

–columns

指定要导入的字段值,格式如:

–columnsid,username

–direct

直接导入模式,使用的是关系数据库自带的导入导出工具。

官网上是说这样导入会更快

–direct-split-size

在使用上面direct直接导入的基础上,对导入的流按字节数分块,特别是使用直连模式从PostgreSQL导入数据的时候,可以将一个到达设定大小的文件分为几个独立的文件。

–inline-lob-limit

设定大对象数据类型的最大值

-m,–num-mappers

启动N个map来并行导入数据,默认是4个,最好不要将数字设置为高于集群的节点数

–query,-e

从查询结果中导入数据,该参数使用时必须指定–target-dir、–hive-table,在查询语句中一定要有where条件且在where条件中需要包含$CONDITIONS,示例:

–query‘select*frompersonwhere$CONDITIONS‘–target-dir

/user/hive/warehouse/person–hive-tableperson

–split-by

表的列名,用来切分工作单元,一般后面跟主键ID

–table

关系数据库表名,数据从该表中获取

–target-dir

指定hdfs路径

–warehouse-dir

与–target-dir不能同时使用,指定数据导入的存放目录,适用于hdfs导入,不适合导入hive目录

–where

从关系数据库导入数据时的查询条件,示例:

–where‘id=2′

-z,–compress

压缩参数,默认情况下数据是没被压缩的,通过该参数可以使用gzip压缩算法对数据进行压缩,适用于SequenceFile,text文本文件,和Avro文件

–compression-codec

Hadoop压缩编码,默认是gzip

–null-string

可选参数,如果没有指定,则字符串null将被使用

–null-non-string

可选参数,如果没有指定,则字符串null将被使用

增量导入

参数

说明

–check-column(col)

用来作为判断的列名,如id

–incremental(mode)

append:

追加,比如对大于last-value指定的值之后的记录进行追加导入。

lastmodified:

最后的修改时间,追加last-value指定的日期之后的记录

–last-value(value)

指定自从上次导入后列的最大值(大于该指定的值),也可以自己设定某一值

对incremental参数,如果是以日期作为追加导入的依据,则使用lastmodified,否则就使用append值。

7.import-all-tables

将数据库里的所有表导入到HDFS中,每个表在hdfs中都对应一个独立的目录。

sqoopimport-all-tables–connectjdbc:

mysql:

//localhost:

3306/test

sqoopimport-all-tables–connectjdbc:

mysql:

//localhost:

3306/test–hive-import

 

参数

说明

–as-avrodatafile

同import参数

–as-sequencefile

同import参数

–as-textfile

同import参数

–direct

同import参数

–direct-split-size

同import参数

–inline-lob-limit

同import参数

-m,–num-mappers

同import参数

–warehouse-dir

同import参数

-z,–compress

同import参数

–compression-codec

同import参数

 

8.job

用来生成一个sqoop的任务,生成后,该任务并不执行,除非使用命令执行该任务。

sqoopjob

参数

说明

–create

生成一个job,示例如:

sqoopjob–createmyjob —import–connectjdbc:

mysql:

//localhost:

3306/test–table

person

 

–delete

删除一个jobsqoopjob–deletemyjob

–exec

执行一个jobsqoopjob–execmyjob

–help

显示帮助说明

–list

显示所有的jobsqoopjob–list

–meta-connect

用来连接metastore服务,示例如:

–meta-connectjdbc:

hsqldb:

hsql:

//localhost:

16000/sqoop

–show

显示一个job的各种参数sqoopjob–showmyjob

–verbose

打印命令运行时的详细信息

 

9.list-databases

打印出关系数据库所有的数据库名

sqooplist-databases–connectjdbc:

mysql:

//localhost:

3306/-usernameroot-password123456

10.list-tables

打印出关系数据库某一数据库的所有表名

sqooplist-tables–connectjdbc:

mysql:

//localhost:

3306/zihou-usernameroot-password123456

11.merge

将HDFS中不同目录下面的数据合在一起,并存放在指定的目录中,示例如:

sqoopmerge–new-data/test/p1/person–onto/test/p2/person–target-dir/test/merged–jar-file/opt/data/sqoop/person/Person.jar–class-namePerson–merge-keyid

其中,–class-name所指定的class名是对应于Person.jar中的Person类,而Person.jar是通过Codegen生成的

参数

–new-data

Hdfs中存放数据的一个目录,该目录中的数据是希望在合并后能优先保留的,原则上一般是存放越新数据的目录就对应这个参数。

–onto

Hdfs中存放数据的一个目录,该目录中的数据是希望在合并后能被更新数据替换掉的,原则上一般是存放越旧数据的目录就对应这个参数。

–merge-key

合并键,一般是主键ID

–jar-file

合并时引入的jar包,该jar包是通过Codegen工具生成的jar包

–class-name

对应的表名或对象名,该class类是包含在jar包中的。

–target-dir

合并后的数据在HDFS里的存放目录

 

12.metastore

记录sqoopjob的元数据信息,如果不启动metastore实例,则默认的元数据存储目录为:

~/.sqoop,如果要更改存储目录,可以在配置文件sqoop-site.xml中进行更改。

metastore实例启动:

sqoopmetastore

 

–shutdown

关闭一个运行的metastore实例

13.version

显示sqoop版本信息

语句:

sqoopversion

14.help

打印sqoop帮助信息

语句:

sqoophelp

15.公共参数

Hive参数

参数

说明

–hive-delims-replacement

用自定义的字符串替换掉数据中的\n,\r,and\01等

–hive-drop-import-delims

在导入数据到hive中时,去掉数据中\n,\r和\01这样的字符

–map-column-hive

生成hive表时,可以更改生成字段的数据类型,格式如:

–map-column-hiveTBL_ID=String,LAST_ACCESS_TIME=string

–hive-partition-key

创建分区,后面直接跟分区名即可,创建完毕后,通过describe表名可以看到分区名,默认为string型

–hive-partition-value

该值是在导入数据到hive中时,与–hive-partition-key设定的key对应的value值。

–hive-home

Hive的安装目录,可以通过该参数覆盖掉默认的hive目录

–hive-import

将数据从关系数据库中导入到hive表中

–hive-overwrite

覆盖掉在hive表中已经存在的数据

–create-hive-table

默认是false,如果目标表已经存在了,那么创建任务会失败

–hive-table

后面接要创建的hive表

–table

指定关系数据库表名

数据库连接参数

参数

说明

–connect

Jdcb连接url,示例如:

–connectjdbc:

mysql:

//localhost:

3306/hive

–connection-manager

指定要使用的连接管理类

–driver

数据库驱动类

–hadoop-home

Hadoop根目录

–help

打印帮助信息

-P

从控制端读取密码

–password

Jdbcurl中的数据库连接密码

–username

Jdbcurl中的数据库连接用户名

–verbose

在控制台打印出详细信息

–connection-param-file

一个记录着数据库连接参数的文件

文件输出参数

用于import场景。

示例如:

sqoopimport–connectjdbc:

mysql:

//localhost:

3306/test–usernameroot–P–tableperson–split-byid–check-columnid–incrementalappend –last-value1–enclosed-by‘\”‘

–escaped-by\#–fields-terminated-by.

 

参数

说明

–enclosed-by

给字段值前后加上指定的字符,比如双引号,示例:

–enclosed-by‘\”‘,显示例子:

”3″,”jimsss”,”dd@”

–escaped-by

给双引号作转义处理,如字段值为”测试”,经过–escaped-by\\处理后,在hdfs中的显示值为:

\”测试\”,对单引号无效

–fields-terminated-by

设定每个字段是以什么符号作为结束的,默认是逗号,也可以改为其它符号,如句号.,示例如:

–fields-terminated-by.

–lines-terminated-by

设定每条记录行之间的分隔符,默认是换行,

–mysql-delimiters

Mysql默认的分隔符设置,字段之间以,隔开,行之间以换行\n隔开,默认转义符号是\,字段值以单引号’包含起来。

–optionally-enclosed-by

enclosed-by是强制给每个字段值前后都加上指定的符号,而–optionally-enclosed-by只是给带有双引号或单引号的字段值加上指定的符号,故叫可选的。

示例如:

–optionally-enclosed-by‘$’

 

文件输入参数

对数据格式的解析,用于export场景,与文件输出参数相对应。

示例如:

sqoopexport–connectjdbc:

mysql:

//localhost:

3306/test–usernameroot–password

123456 –tableperson2–export-dir/user/hadoop/person–staging-tableperson3

–clear-staging-table–input-fields-terminated-by‘,’

在hdfs中存在某一格式的数据,在将这样的数据导入到关系数据库中时,必须要按照该格式来解析出相应的字段值,比如在hdfs中有这样格式的数据:

3,jimsss,dd@,1,2013-08-0716:

00:

48.0,”hehe”,

上面的各字段是以逗号分隔的,那么在解析时,必须要以逗号来解析出各字段值,如:

–input-fields-terminated-by‘,’

参数

说明

–input-enclosed-by

对字段值前后有指定的字符–input-enclosed-by‘\”‘,数据例子:

”3″,”jimsss”,”dd@”

–input-escaped-by

对含有转义双引号的字段值作转义处理,如字段值为\”测试\”,经过–input-escaped-by\\处理后,解析得到的值为:

”测试”,对单引号无效。

–input-fields-terminated-by

以字段间的分隔符来解析得到各字段值,示例如:

–input-fields-terminated-by,

–input-lines-terminated-by

以每条记录行之间的分隔符来解析得到字段值,示例如:

–input-lines-terminated-by‘#’以#号分隔

–input-

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高中教育 > 数学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1