Sqoop 导入失败:请使用 --split-by 指定一个或使用 '-m 1' 执行顺序导入 即使在设置 mapper = 1 后也会出错

Posted

技术标签:

【中文标题】Sqoop 导入失败:请使用 --split-by 指定一个或使用 \'-m 1\' 执行顺序导入 即使在设置 mapper = 1 后也会出错【英文标题】:Sqoop Import failed : Please specify one with --split-by or perform a sequential import with '-m 1' Error even after setting mapper = 1Sqoop 导入失败:请使用 --split-by 指定一个或使用 '-m 1' 执行顺序导入 即使在设置 mapper = 1 后也会出错 【发布时间】:2018-10-08 13:05:39 【问题描述】:

我正在将一个表从 SQL Server 导入到 Hive。

sqoop import \
--connect "jdbc:sqlserver://<server-name>:<port-no>;database=<database-name>" \
--username <user-name> \
-P \
--table <table-name> \
-- --schema <schema-name> \
--hive-import \
--hive-database <hive-database-name> \
--hive-table <hive-table-name> \
--target-dir /tmp \
-m 1

该表没有主键,所以我添加了 -m 1(运行一个映射器),但设置“-m 1”仍然出错。

错误 tool.ImportTool:导入失败:找不到表的主键。请使用 --split-by 指定一个或使用 '-m 1' 执行顺序导入。

我正在开发一个 3 节点集群,版本详细信息是:

发行版:Hortonrowks HDP3.0

Sqoop:1.4

蜂巢:3.1

【问题讨论】:

【参考方案1】:

您只需使用带有m 参数的一个破折号:-m 1(不是--m 1)并将-- --schema &lt;schema-name&gt; 移动到命令末尾,因为 Sqoop CLI 具有以下结构:

sqoop TOOL PROPERTY_ARGS SQOOP_ARGS [-- EXTRA_ARGS]

【讨论】:

对不起,这只是-m 1(不是--m 1)。这只是一个错字。 也许您的问题与 args 顺序有关:CLI 具有以下结构:sqoop TOOL PROPERTY_ARGS SQOOP_ARGS [-- EXTRA_ARGS]。尝试将-- --schema &lt;schema-name&gt; 移动到命令末尾或避免使用它(--table &lt;schema-name&gt;.&lt;table-name&gt;)。 如果我将 --schema 参数移动到参数的结尾,例如,sqoop 发出查询但抛出错误 ERROR hook.AtlasHook: Failed to send notification - attempt #1; error=Missing required configuration "bootstrap.servers" which has no default value. ERROR hook.AtlasHook: Failed to send notification - attempt #2; error=Missing required configuration "bootstrap.servers" which has no default value. org.apache.kafka.common.config.ConfigException: Missing required configuration "bootstrap.servers" which has no default value. 如果我像 schema.tablename 这样结合模式和表名,它会抛出表不存在的错误。 这是另一个问题。我认为您可以暂时禁用 Sqoop 挂钩以检查导入是否正常 (atlas.apache.org/Hook-Sqoop.html)。或者通过添加所需的配置参数bootstrap.servers (atlas.apache.org/Configuration.html) 来解决这个问题。如果您不能自己解决,您可以向 SO 发布新问题。无论如何,您原始问题的解决方案是将 -- --schema &lt;schema-name&gt; 移动到命令的末尾。我已经更新了我的答案:如果您觉得合适,请接受并投票。

以上是关于Sqoop 导入失败:请使用 --split-by 指定一个或使用 '-m 1' 执行顺序导入 即使在设置 mapper = 1 后也会出错的主要内容,如果未能解决你的问题,请参考以下文章

解决sqoop 导入oracle表时 --split-by参数为日期类型时的报错:ORA-01861: literal does not match format string

Sqoop - 使用 Oozie 导入 Hive 失败

Sqoop 导入映射器失败,但 sqoop 作业显示正在运行

Sqoop 导入安全 hbase 失败

oozie sqoop 操作导入失败

从 vertica 导入 sqoop 失败