解决Sqoop任务超级缓慢


HDP3.1.4.0-315集群最近一次断电恢复之后,Sqoop任务超级缓慢,原本只需要20s就能执行完成的导入数据操作,现在需要10分钟,导致整个计算任务从30分钟延长到了1小时40分钟。

检查YARN里面的任务日志发现,每一个非常慢的任务里面都有大量的org.apache.hadoop.yarn.event.AsyncDispatcher: Waiting for AsyncDispatcher to drain. Thread state is :WAITING 错误日志。

另外还会有以下两个错误:

ERROR [Job ATS Event Dispatcher] org.apache.hadoop.mapreduce.jobhistory.JobHistoryEventHandler: Exception while publishing configs on JOB_SUBMITTED Event for the job : job_1625637355161_0012
org.apache.hadoop.yarn.exceptions.YarnException: Failed while publishing entity
ERROR [Job ATS Event Dispatcher] org.apache.hadoop.mapreduce.jobhistory.JobHistoryEventHandler: Failed to process Event JOB_FINISHED for the job : job_1625637355161_0012
org.apache.hadoop.yarn.exceptions.YarnException: Interrupted while publishing entity

错误日志都指向了Timeline服务和ATS服务。首先按照 Slow or stalled YARN application execution of LOAD 尝试清理Timeline服务的leveldb数据。清理步骤如下:

  1. 停止 YARN 服务
  2. 在 YARN 的 CONFIGS 页面搜索 yarn.timeline-service.leveldb-state-store.path,得到路径,我 HDP 集群默认配置的是“/hadoop/yarn/timeline”
  3. 在 YARN 的 CONFIGS 页面搜索 yarn.timeline-service.address,得到Timeline服务所在的服务器节点
  4. 登录Timeline所在的服务器,删除 yarn.timeline-service.leveldb-state-store.path 指定路径下的文件。(注意是删除Timeline所在节点服务器的目录文件,不在HDFS上)
  5. 启动 YARN 服务

启动成功后,重新跑Sqoop,还是慢,上面的错误继续,于是根据 ATS hbase does not seem to start 的提示决定删除atsv2-hbase数据。操作步骤如下:

  1. 通过 zookeeper的 CONFIGS 查询 zookeeper-quorum-servers
  2. 停止 YARN 服务
  3. 在 zookeeper 节点上执行 zookeeper-client -server zookeeper-quorum-servers 登录 zookeeper 服务
  4. 执行 rmr /atsv2-hbase-unsecure。如果是kerberized集群执行rmr /atsv2-hbase-secure
  5. 删除 Timeline 在 HBase 里的数据。hdfs dfs -mv /atsv2/hbase /tmp/
  6. 启动 YARN 服务

执行完毕之后再跑Sqoop,速度终于正常了,看到了久违的20秒执行时间。

留下评论

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理