我看到Sqoop在从HDFS导出大型(2亿多行)表到Postgres时,抛出PSQLException“抱歉,已经有太多客户”了。我有一些似乎工作正常的小桌子(约300万)。
即使大表失败,我似乎仍然在我的postgres表中获得了大约200万行,但我猜这只是来自没有死的工人,因为他们首先得到了一个连接。我的Postgres表配置为允许300 max_connections
,并且大约有70个连接始终从其他应用程序处于活动状态,因此SQOOP应该有~230使用。
我尝试在我的SQOOP导出命令中将--num-mappers
切换到2-8之间,但这似乎没有太大的区别。在作业跟踪器中查看失败的hadoop作业,在地图阶段显示“Num任务”为3,660,“失败/被杀任务尝试”显示为184/273,如果这有帮助的话
是否有设置最大连接数?还有什么我可以在这做的吗?如果需要,很乐意提供额外的信息。
感谢。
答案 0 :(得分:0)
根据我的具体情况计算出来。以为我会分享我的发现:
问题的核心是同时运行的同时映射任务的数量。
由于这个原因,任务的连接耗尽,因为280中的每一个都会尝试产生一个连接而280 +现有的70是>。 300.所以,我有两个选择:(1)稍微提升postgres max_connection限制,或者(2)减少一次运行的地图任务的数量。
我和(1)一起去了,因为我控制了数据库并将max_connections
加载到400并继续生活。
FWIW,看起来(2)可以使用以下内容,但我无法测试它,因为我不控制HDFS集群:
https://hadoop.apache.org/docs/r1.0.4/mapred-default.html
mapred.jobtracker.maxtasks.per.job