据我了解,sqoop 用于将表/数据从数据库导入或导出到 HDFS 或 Hive 或 HBASE。
我们可以直接导入单个表或表列表。内部 mapreduce 程序(我认为只有 map 任务)将运行。
我的疑问是什么是 sqoop direct 以及什么时候使用 sqoop direct 选项?
只需阅读 Sqoop 文档!
一些数据库可以通过使用特定于数据库的数据移动工具以更高性能的方式执行导入(...)
一些数据库还为导出提供了直接模式(...)
有关在每个特定 RDBMS 中使用直接模式、安装要求、可用选项和限制的详细信息,请参见第 25 节
底线:“直接模式”对于不同的数据库意味着不同的东西。
对于 MySQL 或 PostgreSQL,它与批量加载/卸载实用程序有关(即完全绕过 JDBC);而对于 Oracle,它与“直接路径插入”相关,即使用 JDBC,但处于非事务模式(因此您最好使用临时表,否则您可能最终会在 PK 和损坏的表中出现重复)。
简而言之,它是快速导入的模式,不运行任何映射器或减速器。
sqoop import --connect jdbc:mysql://db.foo.com/corp --table EMPLOYEES --direct
笔记:
--direct
仅在 mysql 和 postgresql 中受支持。BLOB
、CLOB
或LONGVARBINARY
列。默认情况下,Sqoop 使用 JDBC 连接到数据库。但是,根据数据库的不同,可能会有更快的、特定于数据库的连接器可用,您可以使用--direct 选项来使用它。
因此,当您想使用与默认数据库连接器不同的数据库连接器时,您可以使用--direct选项。
您可以通过--direct
在 sqoop 中提供选项来提高性能
但不要将它用于非优先级作业,因为直接使用更多可能会降低源/目标数据库
http://archive.cloudera.com/docs-backup/sqoop/_direct_mode_imports.html
--direct
- 使用直接导入快速路径
通过提供--direct
参数,您指定 Sqoop 应该尝试直接导入通道。这个通道可能比使用 JDBC 的性能更高。
对于 MySQL:
MySQL 直接连接器允许使用工具功能更快地导入和导出 MySQL mysqldump
,mysqlimport
而不是 SQL 选择和插入。
有关在每个特定 RDBMS 中使用直接模式、安装要求、可用选项和限制的详细信息,请参见第 25 节“特定连接器的说明”。