Sqoop是Apache下的顶级项目,用来将Hadoop和关系型数据库中的数据相互转移,可以将一
个关系型数据库(例如:MySQL,Oracle,PostgreSQL等)中的数据导入到Hadoop的HDFS中,
也可以将HDFS的数据导入到关系型数据库中。目前在各个公司应用广泛,且发展前景比较乐观。
1)专门为Hadoop而生,随Hadoop版本更新支持程度好,且原本即是从CDH版本孵化出来的开源项
目,支持CDH的各个版本号。
2)它支持多种关系型数据库,比如mysql、oracle、postgresql等。
3)可以高效、可控的利用资源。
4)可以自动的完成数据映射和转换。
5)大部分企业还在使用sqoop1版本,sqoop1能满足公司的基本需求。
6)自带的辅助工具比较丰富,如sqoop-import、sqoop-list-databases、sqoop-list-tables等。
- Sqoop1以Client客户端的形式存在和运行。没有任务时是没有进程存在的。
- sqoop2是以B/S服务器的形式去运行的,始终会有Server服务端进程在运行。
将导入或导出命令翻译成mapreduce程序来实现
五、Sqoop抽取的两种方式- 原生Sqoop API
- HCatalog API
- 数据格式支持
- Sqoop方式支持的数据格式较少
- HCatalog支持的数据格式多,包括RCFile, ORCFile, CSV,JSON和SequenceFile等格式。
- 数据覆盖
- Sqoop方式允许数据覆盖
- HCatalog不允许数据覆盖,每次都只是追加。
- 字段匹配方式
- Sqoop方式比较随意,不要求源表和目标表字段相同(字段名称和个数都可以不相同),它抽取
的方式是将字段按顺序插入,比如目标表有3个字段,源表有一个字段,它会将数据插入到Hive表的第一个字段,其余字段为NULL。 - HCatalog不同,源表和目标表字段名需要相同,字段个数可以不相等,如果字段名不同,抽取数据的时候会报NullPointerException错误。HCatalog抽取数据时,会将字段对应到相同字段名的字段上,哪怕字段个数不相等。
- Sqoop方式比较随意,不要求源表和目标表字段相同(字段名称和个数都可以不相同),它抽取
-
Sqoop方式
sqoop import --hive-import --connect 'jdbc:mysql://localhost:3306/test' --username 'root' --password '123456789' --query " select order_no from driver_action where $CONDITIONS" --hive-database test --hive-table driver_action --hive-partition-key pt --hive-partition-value 20190901 --null-string '' --null-non-string '' --num-mappers 1 --target-dir /tmp/test --delete-target-dir
-
HCatalog方式
sqoop import
--connect jdbc:mysql://localhost:3306/test
--username 'root'
--password 'root'
--query "SELECT order_no FROM driver_action WHERe $CONDITIONS"
--hcatalog-database test
--hcatalog-table driver_action
--hcatalog-partition-keys pt
--hcatalog-partition-values 20200104
--hcatalog-storage-stanza 'stored as orcfile tblproperties ("orc.compress"="SNAPPY")'
--num-mappers 1



