当将大表(200+百万行)从HDFS导出到Postgres时,我看到Sqoop抛出了PSQLException“对不起,太多客户端了”。我有几张较小的桌子(大约300万张),似乎运转得很好。
即使大型表出现故障,我似乎仍有200万行进入postgres表,但我猜这仅仅是因为工人们没有死,因为他们首先得到了其中一个连接。我的Postgres表被配置为允许300个max_connections,并且大约有70个来自其他应用程序的活动连接,因此SQOOP应该有230个可以使用的连接。
我在SQOOP导出命令中尝试在2-8之间切换--num-mappers,但这似乎没有多大区别。查看作业跟踪器中失败的hadoop作业,在地图阶段显示"Num任务“为3 660,”失败/死亡任务尝试“显示184/273,如果这有帮助的话
是否要设置最大的连接#以供使用?还有什么我能做的吗?乐意提供更多的信息,如果需要的话。
谢谢。
发布于 2014-12-12 17:26:30
我想出了具体的方案。我想分享一下我的发现:
问题的核心是一次同时运行的映射任务的数量。
由于这个原因,任务已经没有连接了,因为280中的每一个都会尝试生成一个连接,而现有的70 is > 300。因此,我有两个选择:(1)稍微增加postgres的max_connection限制,或者(2)减少一次运行的映射任务的数量。
自从我控制了数据库,把max_connections提高到400个,我就开始了(1),然后继续生活。
FWIW,看起来(2)可以执行以下操作,但我无法测试它,因为我无法控制HDFS集群:
https://hadoop.apache.org/docs/r1.0.4/mapred-default.html
mapred.jobtracker.maxtasks.per.job
https://stackoverflow.com/questions/27446692
复制相似问题