Sqoop 导出作业是否有 sqoop.export.records.per.statement 的限制?

Is there a limit of sqoop.export.records.per.statement for Sqoop Export job?

有谁知道Sqoop批量导出作业的sqoop.export.records.per.statement值是否有限制?

我有非常大的数据,例如 200,000,000 行数据要导出,从 Impala 到 Vertica。如果每个语句的记录数设置得太低,我将得到 [Vertica][VJDBC](5065) ERROR: Too many ROS containers exist for the following projections,如果每个语句的记录数设置得太高,我将得到 java.lang.OutOfMemoryError: GC overhead limit exceeded

有人知道如何解决这个问题吗?谢谢!

我认为极限是内存。如果你增加堆,它会让你设置更高的数字。尝试添加 -D mapred.child.java.opts=-Xmx1024M 或比当前设置更大的数字?

您可以尝试增加 export.statements.per.transaction 并减少每条语句的记录数。我认为这对 ROS 容器方面没有帮助,因为我认为每批 SQL = 1 COPY 语句 = 1 ROS 容器。我认为它不会将多批 INSERT 转换为单个 COPY,但我现在没有办法对其进行测试。

您可以绕过 sqoop 并流式传输数据(您可能需要构建 COPY),例如:

impala-shell -k -i server:port -B -q 'select * from mytable' --output_delimiter="|" | vsql -h database_host -U user -w password -c 'copy mytable from stdin direct'