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

时间:2015-10-26 21:24:40

标签: hadoop jdbc sqoop vertica

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

我有非常大的数据,例如要从导出的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

任何人都知道如何解决这个问题?谢谢!

1 个答案:

答案 0 :(得分:3)

我认为限制是记忆的限制。如果你增加堆,它会让你设置更高的数字。尝试添加-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'