sqoop 中文手册
1. 概述
本文档主要对SQOOP的使用进行了说明,参考内容主要来自于Cloudera SQOOP的官方文档。为了用中文更清楚明白地描述各参数的使用含义,本文档几乎所有参数使用说明都经过了我的实际验证而得到。
2. codegen
将关系数据库表映射为一个java文件、java class类、以及相关的jar包,作用主要是两方面:
1、 将数据库表映射为一个Java文件,在该Java文件中对应有表的各个字段。
2、 生成的Jar和class文件在metastore功能使用时会用到。
基础语句:
sqoop codegen -connect jdbc:mysql://localhost:3306/hive -username root -password 123456 -table TBLS2
参数 | 说明 |
-bindir | 指定生成的java文件、编译成的class文件及将生成文件打包为JAR的JAR包文件输出路径 |
-class-name | 设定生成的Java文件指定的名称 |
-outdir | 生成的java文件存放路径 |
-package-name | 包名,如cn.cnnic,则会生成cn和cnnic两级目录,生成的文件(如java文件)就存放在cnnic目录里 |
-input-null-non-string | 在生成的java文件中,可以将null字符串设为想要设定的值(比如空字符串'') |
-input-null-string | 同上,设定时,最好与上面的属性一起设置,且设置同样的值(比如空字符串等等)。 |
-map-column-java | 数据库字段在生成的java文件中会映射为各种属性,且默认的数据类型与数据库类型保持对应,比如数据库中某字段的类型为bigint,则在Java文件中的数据类型为long型,通过这个属性,可以改变数据库字段在java中映射的数据类型,格式如:-map-column-java DB_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表
基础语句:
sqoop create-hive-table -connect jdbc:mysql://localhost:3306/hive -username root -password 123456 -table TBLS -hive-table h_tbls2
参数 | 说明 |
-hive-home | Hive的安装目录,可以通过该参数覆盖掉默认的hive目录 |
-hive-overwrite | 覆盖掉在hive表中已经存在的数据 |
-create-hive-table | 默认是false,如果目标表已经存在了,那么创建任务会失败 |
-hive-table | 后面接要创建的hive表 |
-table | 指定关系数据库表名 |
4. eval
可以快速地使用SQL语句对关系数据库进行操作,这可以使得在使用import这种工具进行数据导入的时候,可以预先了解相关的SQL语句是否正确,并能将结果显示在控制台。
查询示例:
sqoop eval -connect jdbc:mysql://localhost:3306/hive -username root -password 123456 -query "SELECT * FROM tbls LIMIT 10"
数据插入示例:
sqoop eval -connect jdbc:mysql://localhost:3306/hive -username root -password 123456 -e "INSERT INTO TBLS2
VALUES(100,1375170308,1,0,'hadoop',0,1,'guest','MANAGED_TABLE','abc','ddd')"
-e、-query这两个参数经过测试,比如后面分别接查询和插入SQL语句,皆可运行无误,如上。
5. export
从hdfs中导数据到关系数据库中
sqoop export -connect jdbc:mysql://localhost:3306/hive -username root -password
123456 -table TBLS2 -export-dir sqoop/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中没有对应的表,则自动生成与数据库表名相同的表。
sqoop import -connect jdbc:mysql://localhost:3306/hive -username root -password
123456 -table user -split-by id -hive-import
-split-by指定数据库表中的主键字段名,在这里为id。
参数 | 说明 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
-append | 将数据追加到hdfs中已经存在的dataset中。使用该参数,sqoop将把数据先导入到一个临时目录中,然后重新给文件命名到一个正式的目录中,以避免和该目录中已存在的文件重名。 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
-as-avrodatafile | 将数据导入到一个Avro数据文件中 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
-as-sequencefile | 将数据导入到一个sequence文件中 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
-as-textfile | 将数据导入到一个普通文本文件中,生成该文本文件后,可以在hive中通过sql语句查询出结果。 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
-boundary-query | 边界查询,也就是在导入前先通过SQL查询得到一个结果集,然后导入的数据就是该结果集内的数据,格式如:-boundary-query 'select id,creationdate from person where id = 3',表示导入的数据为id=3的记录,或者select min(
增量导入
对incremental参数,如果是以日期作为追加导入的依据,则使用lastmodified,否则就使用append值。 7. import-all-tables将数据库里的所有表导入到HDFS中,每个表在hdfs中都对应一个独立的目录。 sqoop import-all-tables -connect jdbc:mysql://localhost:3306/test sqoop import-all-tables -connect jdbc:mysql://localhost:3306/test -hive-import
8. job用来生成一个sqoop的任务,生成后,该任务并不执行,除非使用命令执行该任务。 sqoop job
9. list-databases打印出关系数据库所有的数据库名 sqoop list-databases -connect jdbc:mysql://localhost:3306/ -username root -password 123456 10. list-tables打印出关系数据库某一数据库的所有表名 sqoop list-tables -connect jdbc:mysql://localhost:3306/zihou -username root -password 123456 11. merge将HDFS中不同目录下面的数据合在一起,并存放在指定的目录中,示例如: sqoop merge -new-data /test/p1/person -onto /test/p2/person -target-dir /test/merged -jar-file /opt/data/sqoop/person/Person.jar -class-name Person -merge-key id 其中,-class-name所指定的class名是对应于Person.jar中的Person类,而Person.jar是通过Codegen生成的
12. metastore记录sqoop job的元数据信息,如果不启动metastore实例,则默认的元数据存储目录为:~/.sqoop,如果要更改存储目录,可以在配置文件sqoop-site.xml中进行更改。 metastore实例启动:sqoop metastore
13. version显示sqoop版本信息 语句:sqoop version 14. help打印sqoop帮助信息 语句:sqoop help 15. 公共参数Hive参数
数据库连接参数
文件输出参数用于import场景。 示例如: sqoop import -connect jdbc:mysql://localhost:3306/test -username root -P -table person -split-by id -check-column id -incremental append -last-value 1 -enclosed-by '\"' -escaped-by \# -fields-terminated-by .
文件输入参数对数据格式的解析,用于export场景,与文件输出参数相对应。 示例如: sqoop export -connect jdbc:mysql://localhost:3306/test -username root -password 123456 -table person2 -export-dir /user/hadoop/person -staging-table person3 -clear-staging-table -input-fields-terminated-by ',' 在hdfs中存在某一格式的数据,在将这样的数据导入到关系数据库中时,必须要按照该格式来解析出相应的字段值,比如在hdfs中有这样格式的数据: 3,jimsss,dd@dd.com,1,2013-08-07 16:00:48.0,"hehe",测试 上面的各字段是以逗号分隔的,那么在解析时,必须要以逗号来解析出各字段值,如: -input-fields-terminated-by ','
数据
参数
数据库
文件
字段
目录
生成
示例
字符
语句
字符串
引号
查询
格式
类型
结果
测试
事务
信息
属性
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
互联网科技的公司名称
服务器安全狗好卡机
steam免费服务器游戏推荐
在网站上如何显示数据库
网络安全非法访问
我的世界官方服务器ip
主流数据库服务器
龙岩 软件开发公司电话
互联网金融与智能科技
软件开发打tag是什么意思
日本出台防卫产业网络安全
房地产网络技术哪个好
网络安全和信息化建设的矛盾
网络安全技术和信息管理专业
上海商业软件开发市场价
数据库宣传标语
小米手机数据库修改
服务器双网口哪个安全
烟台数据库培训
网络安全导致网页打不开
六安求职招聘软件开发定制公司
科学数据库中国动物志
国家网络安全宣传小结
国网湖南网络安全
基于 数据库安全技术
天津市思源光通网络技术有限公司
安阳软件开发服务有限公司
神算子分析软件开发有限公司
怎么给服务器刷系统
一线网络技术
相关文章 |