无法使用 sqoop 将表导入到不同文件中的配置单元(例如 part-0000、part-00001、part-00002)

Posted

技术标签:

【中文标题】无法使用 sqoop 将表导入到不同文件中的配置单元(例如 part-0000、part-00001、part-00002)【英文标题】:Not able to import table to hive in different files (for e.g part-0000, part-00001, part-00002) using sqoop 【发布时间】:2016-08-28 21:27:54 【问题描述】:

问题说明: 确保每个表文件被分区为 3 个文件,例如部分 00000、部分 00002、部分 00003

sqoop import-all-tables -m 3 --connect jdbc:mysql://localhost/retail_db --username retail_dba --hive-import --hive-overwrite --create-hive-table --compress --compression-codec snappy --outdir java_output

/08/29 02:42:57 INFO orm.CompilationManager: Writing jar file: /tmp/sqoop- training/compile/9cf789b552995b98bd700d07f4cb3de2/categories.jar
16/08/29 02:42:57 WARN manager.MySQLManager: It looks like you are importing from mysql.
16/08/29 02:42:57 WARN manager.MySQLManager: This transfer can be faster! Use the --direct
16/08/29 02:42:57 WARN manager.MySQLManager: option to exercise a MySQL-specific fast path.
16/08/29 02:42:57 INFO manager.MySQLManager: Setting zero DATETIME behavior to convertToNull (mysql)
16/08/29 02:42:57 ERROR tool.ImportAllTablesTool: Error during import: No primary key could be found for table categories. Please specify one with --split-by or perform a sequential import with '-m 1'.

【问题讨论】:

【参考方案1】:

根据 Sqoop docs,

要使 import-all-tables 工具有用,必须满足以下条件:

每个表都必须有一个单列主键或必须使用--autoreset-to-one-mapper 选项。

现在根据您的日志,categories 表没有主键。

所以你需要在你的 sqoop 命令中添加--autoreset-to-one-mapper,这样对于没有主键的表,它使用 1 个映射器。

【讨论】:

以上是关于无法使用 sqoop 将表导入到不同文件中的配置单元(例如 part-0000、part-00001、part-00002)的主要内容,如果未能解决你的问题,请参考以下文章

使用 sqoop 将表从 RDBMS 导入 HIVE 后约束是不是仍然存在?

Sqoop - 使用 Avro 格式将表从 Oracle 导入 Hive 的最佳选择是啥?

无法使用 Sqoop 将数据从 Vertica 导入 Cassandra

使用 Sqoop 将数据附加到配置单元表

Sqoop - 错误工具.ImportTool:导入失败:尝试从 SQL Server 导入时无法转换 SQL 类型 2005

如何使用 Java 将表从 MySQL 导入 Hive?