我们有时会发生一个问题,但反复发生。当我们为特定表运行sqoop import时,有时它会在5分钟内完成。有时需要2.5小时。在这种情况下,我们总是会看到一个失败的地图任务,耗时约2小时10分钟。你能帮忙提供解决方案吗?
1)失败的任务总是失败并出现以下错误。如果预计会发生以下错误,我们是否可以在10-15分钟内完成地图任务,而不是等待2小时。
" 2018-03-06 00:09:41,485 ERROR [main] org.apache.sqoop.mapreduce.db.DBRecordReader:顶级异常: com.microsoft.sqlserver.jdbc.SQLServerException:连接超时(读取失败) 在com.microsoft.sqlserver.jdbc.SQLServerConnection.terminate(SQLServerConnection.java:1671) 在com.microsoft.sqlserver.jdbc.SQLServerConnection.terminate(SQLServerConnection.java:1658) 在com.microsoft.sqlserver.jdbc.TDSChannel.read(IOBuffer.java:1789) 在com.microsoft.sqlserver.jdbc.TDSReader.readPacket(IOBuffer.java:5031) 在com.microsoft.sqlserver.jdbc.TDSReader.nextPacket(IOBuffer.java:4941) 在com.microsoft.sqlserver.jdbc.TDSReader.ensurePayload(IOBuffer.java:4917) 在com.microsoft.sqlserver.jdbc.TDSReader.readBytes(IOBuffer.java:5210) 在com.microsoft.sqlserver.jdbc.TDSReader.readWrappedBytes(IOBuffer.java:5232) 在com.microsoft.sqlserver.jdbc.TDSReader.readUnsignedShort(IOBuffer.java:5147)"
附加失败任务的日志文件。
请帮助解决方案。
谢谢, 和Sandeep
答案 0 :(得分:0)
显然修复此错误的来源将是一个更好的解决方案,但是超时的肮脏变通方法应该可以让你安全一段时间。
您可以在使用sqoop时通过在工具名称后面定义它们来指定通用hadoop选项。 例如sqoop import -Dmapred.map.max.attempts --connect ...
在你的情况下,有一些选项可能证明有用,但我想你想要像mapred.task.timeout这样的东西。
mapred.task.timeout: "如果任务既不读取输入,写入输出,也不更新其状态字符串,则终止任务前的毫秒数#34;
有关mapreduce相关属性的完整列表,请查看此处: https://hadoop.apache.org/docs/r1.0.4/mapred-default.html
此处更喜欢hadoop属性:Complete list of property that is used in Hadoop framework
希望这有帮助