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

nlejzf6q  于 2021-05-29  发布在  Hadoop
关注(0)|答案(1)|浏览(560)

有人知道sqoop批导出作业的sqoop.export.records.per.statement的值是否有限制吗?
我有非常大的数据量,比如200000000行要导出的数据,从impala到vertica。我会得到的 [Vertica][VJDBC](5065) ERROR: Too many ROS containers exist for the following projections 如果每条语句的记录设置过低,或者 java.lang.OutOfMemoryError: GC overhead limit exceeded 如果每条语句的记录设置得太高。
有人知道怎么解决这个问题吗?谢谢!

y4ekin9u

y4ekin9u1#

我认为记忆是有限的。如果你增加堆,它会让你设置的数字更高。尝试添加 -D mapred.child.java.opts=-Xmx1024M 或者比你现在的设置大一些?
你可以试着增加 export.statements.per.transaction 减少你每次陈述的记录。我认为这对ros容器方面没有帮助,因为我认为每批sql=1 copy语句=1 ros容器。我不认为它能将多批插入转换成一个副本,但我现在没有办法测试它。
您可以绕过sqoop并流式传输数据(可能需要构造副本),例如:

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'

相关问题