当前位置:   article > 正文

【Sqoop-命令】Sqoop相关了解及命令

sqoop

1)Sqoop介绍

sqoop是apache旗下一款Hadoop和关系数据库服务器之间传送数据的工具。 简单来说,sqoop就是一款数据导入导出工具。

导入:从RDBMShadoop生态圈的过程。

导出:从hadoop生态圈RDBMS

底层:将导入导出命令翻译成MR任务,执行在YARN平台上,底层是对MR的输入和输出做了定制化操作。

sqoop的使用方式主要有二种:原生APIhcatalog API(导入到HDFS 采用的原生API,导入到Hive做增量导入,一般使用hcatalog)

  • 原生API和hcatalog的区别:

    (1)支持数据类型不同,hcatalog支持数据类型更多,而原生仅仅支持普通文本。

    (2)原生API进行数据覆盖,而hcatalog是数据追加。

    (3)hcatalog要求字段的名称都得对应一致,而原生API不需要,但是需要保证字段个数一致。

2)Sqoop命令

2.1.列出主机所有的数据库

sqoop list-databases \
--connect jdbc:mysql://192.168.52.150:3306/ \
--username root --password 123456
  • 1
  • 2
  • 3

2.2.查看某一个数据库下面的所有数据表

sqoop list-tables \
--connect jdbc:mysql://192.168.52.150:3306/hive \
--username root --password 123456
  • 1
  • 2
  • 3

2.3.将 MySQL 中某个表数据导入到 HDFS 中(全量导入,不指定目录)

sqoop import \
--connect jdbc:mysql://192.168.52.150:3306/test \
--password 123456 --username root \
--table emp \
--m 1
  • 1
  • 2
  • 3
  • 4
  • 5

注意

如果没有指定目的地目录,此时默认情况下导入到hdfs当前用户的家目录下,数据中字段与字段的分隔符号为逗号

2.4.将 MySQL 中某个表数据导入到 HDFS 中(全量导入,指定目录)

sqoop import  \
--connect jdbc:mysql://192.168.52.150:3306/test \
--username root --password 123456 \
--table emp  \
--delete-target-dir \
--target-dir /sqoop/emp \
--m 1 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

2.5.将 MySQL 中某个表数据导入到 HDFS 中(全量导入,指定目录,指定分隔符)

sqoop import  \
--connect jdbc:mysql://192.168.52.150:3306/test \
--username root --password 123456 \
--table emp \
--delete-target-dir \
--target-dir /sqoop/emp2 \
--fields-terminated-by '\t' \
--m 1

#属性说明: 
#--target-dir 指定目标目录 
#--delete-target-dir : 如果目标目录以存在, 先进行删除
#--fields-terminated-by: 指定字段与字段之间的分隔符号
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

2.6.将 MySQL 的数据导入的 Hive 中(全量导入)

sqoop import \
--connect jdbc:mysql://192.168.52.150:3306/test \
--username root \
--password 123456 \
--table emp \
--fields-terminated-by '\t' \
--hcatalog-database sqooptohive \
--hcatalog-table emp_hive \
-m 1
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
sqoop import \
--connect jdbc:mysql://5gcsp-bigdata-svr1:3306/library \
--username root \
--password 123456 \
--table book \
--hive-table sqooptohive.book \
--hive-import \
-m1
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

注意

如果使用上述的sqoop导入到hive中,要求在hive中先创建对应库和对应表。

2.7.将 MySQL 中数据导入到 HDFS(部分导入)

  • 第一种方式:基于where 子句方式导入
sqoop import \
--connect jdbc:mysql://192.168.52.150:3306/test \
--username root --password 123456 \
--table emp_add \
--where "city = 'sec-bad'" \
--delete-target-dir \
--target-dir /sqoop/emp_add \
-m 1  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 第二种方式:通过 SQL语句的方式实现数据导入操作
sqoop import \
--connect jdbc:mysql://192.168.52.150:3306/test \
--username root --password 123456 \
--query 'select phno from emp_conn where 1=1 and  $CONDITIONS' \
--delete-target-dir -m 1 \
--target-dir /sqoop/emp_conn
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

注意事项

1、使用sql语句来进行查找时不能加参数–table

2、并且必须要添加where条件

3、并且where条件后面必须带一个$CONDITIONS这个字符串,

4、并且这个sql语句如果使用双引号,则要修改为$CONDITIONS

2.8.将 MySQL 中部分数据导入到 HIVE(增量导入)

sqoop import \
--connect jdbc:mysql://192.168.52.150:3306/test \
--username root --password 123456 \
--query "select * from emp where id>1203 and  \$CONDITIONS" \
--fields-terminated-by '\t' \
--hcatalog-database sqooptohive \
--hcatalog-table emp_hive \
-m 1 \
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

2.9.将 Hive 数据导出到 MySQL 中

sqoop export \
--connect jdbc:mysql://192.168.52.150:3306/test \
--username root --password 123456 \
--table emp_out \
--hcatalog-database sqooptohive \
--hcatalog-table emp_hive \
-m 1
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

2.10.同步 MySQL 数据到 HBase 中

sqoop import \
-D sqoop.hbase.add.row.key=true \
--connect jdbc:mysql://5gcsp-bigdata-svr1:3306/tags \
--username root \
--password 123456 \
--table data_test \
--hbase-create-table \
--hbase-table tbl_users \
--column-family info \
--hbase-row-key userId \
--num-mappers 10
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

2.11.在 Hive 中根据 MySQL 表结构创建表

sqoop  create-hive-table \
--connect jdbc:mysql://5gcsp-bigdata-svr1:3306/library \
--table book \
--username root \
--password 123456 \
--hive-table sqooptohive.book
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

3)Sqoop 参数说明

参数说明
–connect连接关系型数据库的URL
–username连接数据库的用户名
–password连接数据库的密码
–driverJDBC的driver class
–query或–e 将查询结果的数据导入,使用时必须伴随参–target-dir,–hcatalog-table,如果查询中有where条件,则条件后必须加$CONDITIONS关键字。如果使用双引号包含sql,则$CONDITIONS前要加上\以完成转义:$CONDITIONS。
–hcatalog-database指定HCatalog表的数据库名称。如果未指定,default则使用默认数据库名称。提供 --hcatalog-database不带选项–hcatalog-table是错误的。
–hcatalog-table此选项的参数值为HCatalog表名。该–hcatalog-table选项的存在表示导入或导出作业是使用HCatalog表完成的,并且是HCatalog作业的必需选项。
–create-hcatalog-table此选项指定在导入数据时是否应 自动创建HCatalog表。表名将与转换为小写的数据库表名相同。
–hcatalog-storage-stanza‘stored as orc tblproperties (“orc.compress”=“SNAPPY”)’ 建表时追加存储格式到建表语句中,tblproperties修改表的属性,这里设置orc的压缩格式为SNAPPY。
-m指定并行处理的MapReduce任务数量。-m不为1时,需要用split-by指定分片字段进行并行导入,尽量指定int型。
–split-by id如果指定–split by,必须使用$CONDITIONS关键字,双引号的查询语句还要加\。
–hcatalog-partition-keyskeys和values必须同时存在,相当于指定静态分区。允许将多个键和值提供为静态分区键。多个选项值之间用,(逗号)分隔。比如:–hcatalog-partition-keys year,month,day;–hcatalog-partition-values 1999,12,31
–hcatalog-partition-valueskeys和values必须同时存在,相当于指定静态分区。允许将多个键和值提供为静态分区键。多个选项值之间用,(逗号)分隔。比如:–hcatalog-partition-keys year,month,day;–hcatalog-partition-values 1999,12,31
–null-string ‘\N’指定mysql数据为空值时用什么符号存储,null-string针对string类型的NULL值处理,–null-non-string针对非string类型的NULL值处理。
–null-non-string ‘\N’指定mysql数据为空值时用什么符号存储,null-string针对string类型的NULL值处理,–null-non-string针对非string类型的NULL值处理。
–hive-drop-import-delims设置无视字符串中的分割符(hcatalog默认开启)
–fields-terminated-by ‘\t’设置字段分隔符
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家自动化/article/detail/693438
推荐阅读
相关标签
  

闽ICP备14008679号