当我使用一个映射器运行Sqoop时,我有一个EMR集群,用于将700万条记录查询作为Avro文件传输到S3。30分钟(+-5分钟(后,映射任务有时会被终止,有时只是保持运行状态(永远不会结束(,但另一个映射任务会被创建并更改为运行状态,就像替换前一个一样,作业永远不会结束。如果我更改查询以返回大约100万条记录,则作业将正常结束。查看日志,我只发现了这个
2019-10-31 10:20:29,991 INFO [RMCommunicator Allocator] org.apache.hadoop.mapreduce.v2.app.rm.RMContainerAllocator: Killing taskAttempt:attempt_1572476771816_0004_m_000000_4004 because it is running on unusable node:ip-10-0-2-41.us-east-2.compute.internal:8041
有人能给出解决方案吗?
您需要将mapreduce.task.timeout
设置为0
。根据https://hadoop.apache.org/docs/r2.8.0/hadoop-mapreduce-client/hadoop-mapreduce-client-core/mapred-default.xml:
如果任务既不读取输入,也不写入输出,也不更新其状态字符串,则任务终止前的毫秒数。值为0将禁用超时。
我认为Sqoop没有让YARN知道它仍在运行,因此映射器被杀死。