根据我的理解,sqoop用于从数据库导入或导出表/数据到HDFS或Hive或HBASE。
我们可以直接导入单个表或表列表。内部mapreduce程序(我认为只有地图任务)将运行。
我的疑问是什么是sqoop direct,什么时候使用sqoop direct选项?
请阅读Sqoop文档!
- 进口一般原则在这里,出口一般原则在那里
一些数据库可以以更高性能的方式执行导入通过使用数据库特定的数据移动工具(…)
一些数据库为导出提供了直接模式(…)
关于在每个特定的RDBMS中使用直接模式、安装要求、可用选项和限制的详细信息可在第25节 中找到。
- MySQL 下的第25节
- Oracle data connector for Hadoop
- 等。
底线:"直接模式"意味着对于不同的数据库有不同的含义
对于MySQL或PostgreSQL,它涉及到批量加载/卸载工具(即完全绕过JDBC);而对于Oracle,它涉及到"直接路径插入",即使用JDBC,但在非事务模式下(所以你最好使用临时表,否则你可能会在PK和损坏的表中重复)。
简短而准确地说,这是快速导入的模式,它不运行任何映射器或reducer。
sqoop import --connect jdbc:mysql://db.foo.com/corp --table EMPLOYEES --direct
指出:
-
--direct
仅在mysql和postgresql中支持。 - Sqoop的直接模式不支持导入
BLOB
、CLOB
、LONGVARBINARY
列。
来自管理集群和云存储中的大数据
默认情况下,Sqoop使用JDBC连接到数据库。然而,根据数据库的不同,可能会有更快的特定于数据库的方法连接器可用,您可以通过使用——direct选择。
因此,当您想使用不同于默认的数据库连接器时,可以使用——direct选项。
--direct
-使用直接导入快速路径
通过提供--direct
参数,您指定Sqoop应该尝试直接导入通道。此通道可能比使用JDBC性能更高。
:
MySQL Direct Connector允许使用mysqldump
和mysqlimport
工具功能更快地从MySQL导入和导出,而不是使用SQL select和insert。
关于在每个特定的RDBMS中使用直接模式、安装要求、可用选项和限制的详细信息可以在第25节"特定连接器的注意事项"中找到。
您可以通过在sqoop中提供--direct
选项来提高性能
但是不要将它用于非优先级的作业,因为过多使用direct可能会降低源/目标DB
http://archive.cloudera.com/docs-backup/sqoop/_direct_mode_imports.html