使用 Sqoop 将数据从 Impala 加载到 Vertica 时出现以下错误。
我正在运行以下命令:
并非每次都引发此错误。我有几次成功的测试加载了超过 200 万行数据。所以我猜可能有一些坏数据在被拒绝的行中包含特殊字符。这很烦人,因为当出现此错误时,mapreduce 作业会回滚并重试。在这种情况下,目标表中将有大量重复数据。
有没有人知道是否有任何可以设置处理特殊字符的sqoop导出参数,或者是否有任何方法可以跳过坏数据,这意味着禁用回滚?谢谢!
最佳答案
这可能不仅仅是特殊字符。例如,如果您尝试将 'abc
' 填充到数字字段中,则该行将被拒绝。即使您收到此错误,我也相信它不会在加载之后并且应该提交所有可以提交的数据(但我会验证)。如果您隔离“丢失”的行,您可能能够找出数据或字段定义的问题。
要查找的常见内容:
NULL
值到 NOT NULL
字段 VARCHAR
八位字节等价。 VARCHAR(x)
表示八位字节,但一个 UTF-8 字符可以有多个八位字节。 在驱动程序中,批量插入被替换为
COPY FROM STDIN
语句。您也许可以在 query_requests
中找到该语句,但我不确定它是否会有所帮助。Sqoop 并没有真正给你太多机会来进一步调查(据我所知,我检查了通用的 JDBC 加载器)。可以查看
executeBatch()
的返回数组并将其与您的执行批处理联系起来。也许修改通用的 JDBC 加载器?希望这可以帮助。
关于hadoop - [Vertica][VJDBC](100172) 一行或多行被服务器拒绝,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33244915/