热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Sqoop一些常用命令及参数

这里给大家列出来了一部分Sqoop操作时的常用参数,以供参考,需要深入学习的可以参看对应类的源代码。序号命令类说明1importImportTool将数据导入到集群2exportE

这里给大家列出来了一部分Sqoop操作时的常用参数,以供参考,需要深入学习的可以参看对应类的源代码。

























































































序号


命令



说明


1


import


ImportTool


将数据导入到集群


2


export


ExportTool


将集群数据导出


3


codegen


CodeGenTool


获取数据库中某张表数据生成Java并打包Jar


4


create-hive-table


CreateHiveTableTool


创建Hive表


5


eval


EvalSqlTool


查看SQL执行结果


6


import-all-tables


ImportAllTablesTool


导入某个数据库下所有表到HDFS中


7


job

 


JobTool


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


8


list-databases


ListDatabasesTool


列出所有数据库名


9


list-tables


ListTablesTool


列出某个数据库下所有表


10


merge


MergeTool


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


11


metastore

 


MetastoreTool


记录sqoop job的元数据信息,如果不启动metastore实例,则默认的元数据存储目录为:~/.sqoop,如果要更改存储目录,可以在配置文件sqoop-site.xml中进行更改。


12


help


HelpTool


打印sqoop帮助信息


13


version


VersionTool


打印sqoop版本信息



2 命令&参数详解

刚才列举了一些Sqoop的常用命令,对于不同的命令,有不同的参数,让我们来一一列举说明。

首先来我们来介绍一下公用的参数,所谓公用参数,就是大多数命令都支持的参数。


2.1 公用参数:数据库连接













































序号


参数


说明


1


--connect


连接关系型数据库的URL


2


--connection-manager


指定要使用的连接管理类


3


--driver


Hadoop根目录


4


--help


打印帮助信息


5


--password


连接数据库的密码


6


--username


连接数据库的用户名


7


--verbose


在控制台打印出详细信息



2.2 公用参数:import








































序号


参数


说明


1


--enclosed-by


给字段值前加上指定的字符


2


--escaped-by


对字段中的双引号加转义符


3


--fields-terminated-by


设定每个字段是以什么符号作为结束,默认为逗号


4


--lines-terminated-by


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


5


--mysql-delimiters


Mysql默认的分隔符设置,字段之间以逗号分隔,行之间以\n分隔,默认转义符是\,字段值以单引号包裹。


6


--optionally-enclosed-by


给带有双引号或单引号的字段值前后加上指定字符。



2.3 公用参数:export













































序号


参数


说明


1


--input-enclosed-by


对字段值前后加上指定字符


2


--input-escaped-by


对含有转移符的字段做转义处理


3


--input-fields-terminated-by


字段之间的分隔符


4


--input-lines-terminated-by


行之间的分隔符


5


--input-optionally-enclosed-by


给带有双引号或单引号的字段前后加上指定字符


6


--update-key


更新时参考的列


7.


--update-mode


更新模式

updateonly

allowinsert



2.4 公用参数:hive

































































序号


参数


说明


1


--hive-delims-replacement


用自定义的字符串替换掉数据中的\r\n和\013 \010等字符


2


--hive-drop-import-delims


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


3


--map-column-hive


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


4


--hive-partition-key


创建分区,后面直接跟分区名,分区字段的默认类型为string


5


--hive-partition-value


导入数据时,指定某个分区的值


6


--hive-home


hive的安装目录,可以通过该参数覆盖之前默认配置的目录


7


--hive-import


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


8


--hive-overwrite


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


9


--create-hive-table


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


10


--hive-table


后面接要创建的hive表,默认使用MySQL的表名


11


--table


指定关系数据库的表名


 

公用参数介绍完之后,我们来按照命令介绍命令对应的特有参数。


2.5 命令&参数:import

将关系型数据库中的数据导入到HDFS(包括Hive,HBase)中,如果导入的是Hive,那么当Hive中没有对应表时,则自动创建。

1) 命令:

如:导入数据到hive中








$ bin/sqoop import \

--connect jdbc:mysql://hadoop102:3306/company \

--username root \

--password 123456 \

--table staff \

--hive-import


 

如:增量导入数据到hive中,mode=append








append导入:

$ bin/sqoop import \

--connect jdbc:mysql://hadoop102:3306/company \

--username root \

--password 123456 \

--table staff \

--num-mappers 1 \

--fields-terminated-by "\t" \

--target-dir /user/hive/warehouse/staff_hive \

--check-column id \

--incremental append \

--last-value 3


提示:append不能与--hive-等参数同时使用(Append mode for hive imports is not yet supported. Please remove the parameter --append-mode)

 

如:增量导入数据到hdfs中,mode=lastmodified








先在mysql中建表并插入几条数据:

mysql> create table company.staff_timestamp(id int(4), name varchar(255), sex varchar(255), last_modified timestamp DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP);

mysql> insert into company.staff_timestamp (id, name, sex) values(1, 'AAA', 'female');

mysql> insert into company.staff_timestamp (id, name, sex) values(2, 'BBB', 'female');

先导入一部分数据:

$ bin/sqoop import \

--connect jdbc:mysql://hadoop102:3306/company \

--username root \

--password 123456 \

--table staff_timestamp \

--delete-target-dir \

--m 1

再增量导入一部分数据:

mysql> insert into company.staff_timestamp (id, name, sex) values(3, 'CCC', 'female');

$ bin/sqoop import \

--connect jdbc:mysql://hadoop102:3306/company \

--username root \

--password 123456 \

--table staff_timestamp \

--check-column last_modified \

--incremental lastmodified \

--last-value "2017-09-28 22:20:38" \

--m 1 \

--append


提示:使用lastmodified方式导入数据要指定增量数据是要--append(追加)还是要--merge-key(合并)

提示:last-value指定的值是会包含于增量导入的数据中

2) 参数:






























































































































序号


参数


说明


1


--append


将数据追加到HDFS中已经存在的DataSet中,如果使用该参数,sqoop会把数据先导入到临时文件目录,再合并。


2


--as-avrodatafile


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


3


--as-sequencefile


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


4


--as-textfile


将数据导入到一个普通文本文件中


5


--boundary-query


边界查询,导入的数据为该参数的值(一条sql语句)所执行的结果区间内的数据。


6


--columns


指定要导入的字段


7


--direct


直接导入模式,使用的是关系数据库自带的导入导出工具,以便加快导入导出过程。


8


--direct-split-size


在使用上面direct直接导入的基础上,对导入的流按字节分块,即达到该阈值就产生一个新的文件


9


--inline-lob-limit


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


10


--m或–num-mappers


启动N个map来并行导入数据,默认4个。


11


--query或--e


将查询结果的数据导入,使用时必须伴随参--target-dir,--hive-table,如果查询中有where条件,则条件后必须加上$CONDITIONS关键字


12


--split-by


按照某一列来切分表的工作单元,不能与--autoreset-to-one-mapper连用(请参考官方文档)


13


--table


关系数据库的表名


14


--target-dir


指定HDFS路径


15


--warehouse-dir


与14参数不能同时使用,导入数据到HDFS时指定的目录


16


--where


从关系数据库导入数据时的查询条件


17


--z或--compress


允许压缩


18


--compression-codec


指定hadoop压缩编码类,默认为gzip(Use Hadoop codec default gzip)


19


--null-string


string类型的列如果null,替换为指定字符串


20


--null-non-string


非string类型的列如果null,替换为指定字符串


21


--check-column

作为增量导入判断的列名


22


--incremental


mode:append或lastmodified


23


--last-value


指定某一个值,用于标记增量导入的位置



2.6 命令&参数:export

从HDFS(包括Hive和HBase)中奖数据导出到关系型数据库中。

1) 命令:

如:








$ bin/sqoop export \

--connect jdbc:mysql://hadoop102:3306/company \

--username root \

--password 123456 \

--table staff \

--export-dir /user/company \

--input-fields-terminated-by "\t" \

--num-mappers 1


 

2) 参数:




























































序号


参数


说明


1


--direct


利用数据库自带的导入导出工具,以便于提高效率


2


--export-dir


存放数据的HDFS的源目录


3


-m或--num-mappers


启动N个map来并行导入数据,默认4个


4


--table


指定导出到哪个RDBMS中的表


5


--update-key


对某一列的字段进行更新操作


6


--update-mode


updateonly(默认)

allowinsert


7


--input-null-string


请参考import该类似参数说明


8


--input-null-non-string


请参考import该类似参数说明


9


--staging-table


创建一张临时表,用于存放所有事务的结果,然后将所有事务结果一次性导入到目标表中,防止错误。


10


--clear-staging-table


如果第9个参数非空,则可以在导出操作执行前,清空临时事务结果表


 


2.7 命令&参数:codegen

将关系型数据库中的表映射为一个Java类,在该类中有各列对应的各个字段。

如:








$ bin/sqoop codegen \

--connect jdbc:mysql://hadoop102:3306/company \

--username root \

--password 123456 \

--table staff \

--bindir /home/admin/Desktop/staff \

--class-name Staff \

--fields-terminated-by "\t"


 




























































序号


参数


说明


1


--bindir


指定生成的Java文件、编译成的class文件及将生成文件打包为jar的文件输出路径


2


--class-name


设定生成的Java文件指定的名称


3


--outdir


生成Java文件存放的路径


4


--package-name


包名,如com.z,就会生成com和z两级目录


5


--input-null-non-string


在生成的Java文件中,可以将null字符串或者不存在的字符串设置为想要设定的值(例如空字符串)


6


--input-null-string


将null字符串替换成想要替换的值(一般与5同时使用)


7


--map-column-java


数据库字段在生成的Java文件中会映射成各种属性,且默认的数据类型与数据库类型保持对应关系。该参数可以改变默认类型,例如:--map-column-java id=long, name=String


8


--null-non-string


在生成Java文件时,可以将不存在或者null的字符串设置为其他值


9


--null-string


在生成Java文件时,将null字符串设置为其他值(一般与8同时使用)


10


--table


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



2.8 命令&参数:create-hive-table

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

命令:

如:








$ bin/sqoop create-hive-table \

--connect jdbc:mysql://hadoop102:3306/company \

--username root \

--password 123456 \

--table staff \

--hive-table hive_staff


参数:



































序号


参数


说明


1


--hive-home


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


2


--hive-overwrite


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


3


--create-hive-table


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


4


--hive-table


后面接要创建的hive表


5


--table


指定关系数据库的表名



2.9 命令&参数:eval

可以快速的使用SQL语句对关系型数据库进行操作,经常用于在import数据之前,了解一下SQL语句是否正确,数据是否正常,并可以将结果显示在控制台。

命令:

如:








$ bin/sqoop eval \

--connect jdbc:mysql://hadoop102:3306/company \

--username root \

--password 123456 \

--query "SELECT * FROM staff"


参数:















序号


参数


说明


1


--query或--e


后跟查询的SQL语句


 


2.10 命令&参数:import-all-tables

可以将RDBMS中的所有表导入到HDFS中,每一个表都对应一个HDFS目录

命令:

如:








$ bin/sqoop import-all-tables \

--connect jdbc:mysql://hadoop102:3306/company \

--username root \

--password 123456 \

--warehouse-dir /all_tables


 

参数:



















































序号


参数


说明


1


--as-avrodatafile


这些参数的含义均和import对应的含义一致


2


--as-sequencefile


3


--as-textfile


4


--direct


5


--direct-split-size


6


--inline-lob-limit


7


--m或—num-mappers


8


--warehouse-dir


9


-z或--compress


10


--compression-codec


 


2.11 命令&参数:job

用来生成一个sqoop任务,生成后不会立即执行,需要手动执行。

命令:

如:








$ bin/sqoop job \

 --create myjob -- import-all-tables \

 --connect jdbc:mysql://hadoop102:3306/company \

 --username root \

 --password 123456

$ bin/sqoop job \

--list

$ bin/sqoop job \

--exec myjob


提示:注意import-all-tables和它左边的--之间有一个空格

提示:如果需要连接metastore,则--meta-connect jdbc:hsqldb:hsql://linux01:16000/sqoop

参数:


















































序号


参数


说明


1


--create


创建job参数


2


--delete


删除一个job


3


--exec


执行一个job


4


--help


显示job帮助


5


--list


显示job列表


6


--meta-connect


用来连接metastore服务


7


--show


显示一个job的信息


8


--verbose


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


提示:在执行一个job时,如果需要手动输入数据库密码,可以做如下优化








       sqoop.metastore.client.record.password

       true

       If true, allow saved passwords in the metastore.


 


2.12 命令&参数:list-databases

命令:

如:








$ bin/sqoop list-databases \

--connect jdbc:mysql://hadoop102:3306/ \

--username root \

--password 123456


 

参数:与公用参数一样


2.13 命令&参数:list-tables

命令:

如:








$ bin/sqoop list-tables \

--connect jdbc:mysql://hadoop102:3306/company \

--username root \

--password 123456


参数:与公用参数一样


2.14 命令&参数:merge

将HDFS中不同目录下面的数据合并在一起并放入指定目录中

数据环境:








new_staff

1       AAA     male

2       BBB     male

3       CCC     male

4       DDD     male

old_staff

1       AAA     female

2       CCC     female

3       BBB     female

6       DDD     female


提示:上边数据的列之间的分隔符应该为\t,行与行之间的分割符为\n,如果直接复制,请检查之。

命令:

如:








创建JavaBean:

$ bin/sqoop codegen \

--connect jdbc:mysql://hadoop102:3306/company \

--username root \

--password 123456 \

--table staff \

--bindir /home/admin/Desktop/staff \

--class-name Staff \

--fields-terminated-by "\t"

 

开始合并:

$ bin/sqoop merge \

--new-data /test/new/ \

--onto /test/old/ \

--target-dir /test/merged \

--jar-file /home/admin/Desktop/staff/Staff.jar \

--class-name Staff \

--merge-key id

结果:

1     AAA       MALE

2     BBB       MALE

3     CCC       MALE

4     DDD       MALE

6     DDD       FEMALE


 

参数:









































序号


参数


说明


1


--new-data


HDFS 待合并的数据目录,合并后在新的数据集中保留


2


--onto


HDFS合并后,重复的部分在新的数据集中被覆盖


3


--merge-key

合并键,一般是主键ID


4


--jar-file


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


5


--class-name


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


6


--target-dir


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


 


2.15 命令&参数:metastore

记录了Sqoop job的元数据信息,如果不启动该服务,那么默认job元数据的存储目录为~/.sqoop,可在sqoop-site.xml中修改。

命令:

如:启动sqoop的metastore服务








$ bin/sqoop metastore


 

参数:















序号


参数


说明


1


--shutdown


关闭metastore




推荐阅读
  • 使用 Babylon.js 实现地球模型与切片地图交互(第三部分)
    本文继续探讨在上一章节中构建的地球模型基础上,如何通过自定义的 `CameraEarthWheelControl` 类来实现更精细的地图缩放控制。我们将深入解析该类的实现细节,并展示其在实际项目中的应用。 ... [详细]
  • 本文介绍了如何在React应用中实现延迟加载以提高性能,以及如何利用自定义Hook和高阶组件(HOC)来增强组件功能。通过这些技术,开发者可以构建更加高效和可维护的应用。 ... [详细]
  • 本文探讨了异步编程的发展历程,从最初的AJAX异步回调到现代的Promise、Generator+Co以及Async/Await等技术。文章详细分析了Promise的工作原理及其源码实现,帮助开发者更好地理解和使用这一重要工具。 ... [详细]
  • HBase 数据复制与灾备同步策略
    本文探讨了HBase在企业级应用中的数据复制与灾备同步解决方案,包括存量数据迁移及增量数据实时同步的方法。 ... [详细]
  • 本文介绍了.hbs文件作为Ember.js项目中的视图层,类似于HTML文件的功能,并详细讲解了如何在Ember.js应用中集成Bootstrap框架及其相关组件的方法。 ... [详细]
  • 小编给大家分享一下Vue3中如何提高开发效率,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获, ... [详细]
  • 本文介绍了如何在Android应用中通过Intent调用其他应用的Activity,并提供了详细的代码示例和注意事项。 ... [详细]
  • 通过使用Sqoop导入工具,可以精确控制并高效地将表数据的特定子集导入到HDFS中。具体而言,可以通过在导入命令中添加WHERE子句来指定所需的数据范围,从而在数据库服务器上执行相应的SQL查询,并将查询结果高效地存储到HDFS中。这种方法不仅提高了数据导入的灵活性,还确保了数据的准确性和完整性。 ... [详细]
  • 在Linux系统中,原本已安装了多个版本的Python 2,并且还安装了Anaconda,其中包含了Python 3。本文详细介绍了如何通过配置环境变量,使系统默认使用指定版本的Python,以便在不同版本之间轻松切换。此外,文章还提供了具体的实践步骤和注意事项,帮助用户高效地管理和使用不同版本的Python环境。 ... [详细]
  • sh cca175problem03evolveavroschema.sh ... [详细]
  • egg实现登录鉴权(七):权限管理
    权限管理包含三部分:访问页面的权限,操作功能的权限和获取数据权限。页面权限:登录用户所属角色的可访问页面的权限功能权限:登录用户所属角色的可访问页面的操作权限数据权限:登录用户所属 ... [详细]
  • 利用Node.js实现PSD文件的高效切图
    本文介绍了如何通过Node.js及其psd2json模块,快速实现PSD文件的自动化切图过程,以适应项目中频繁的界面更新需求。此方法不仅提高了工作效率,还简化了从设计稿到实际应用的转换流程。 ... [详细]
  • 本文详细介绍了在 Red Hat Linux 系统上安装 GCC 4.4.2 的步骤,包括必要的依赖库的安装及常见问题的解决方法。 ... [详细]
  • 本文详细介绍了在 CentOS 系统中如何创建和管理 SWAP 分区,包括临时创建交换文件、永久性增加交换空间的方法,以及如何手动释放内存缓存。 ... [详细]
  • 从0到1搭建大数据平台
    从0到1搭建大数据平台 ... [详细]
author-avatar
落花飞雪277590089
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有