有没有人知道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
。
任何人都知道如何解决这个问题?谢谢!
答案 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'