Hadoop Yarn无法提交新任务的故障处理

故障记录 Hadoop Yarn 无法提交新任务

故障发现经过

当时有业务方反馈,新的flink任务无法提交,而我们的flink以on yarn 的模式跑在hadoop yarn上,根据客户端日志发现任务没有提交成功,然后去查看RM日志

RM日志

2019-08-05 16:11:02,101 WARN org.apache.zookeeper.ClientCnxn: Session 0x269ab678e96f411 for server 10.60.96.130/10.60.96.130:2181, unexpected error, closing socket connection and attempting reconnect
java.io.IOException: Broken pipe
	at sun.nio.ch.FileDispatcherImpl.write0(Native Method)
	at sun.nio.ch.SocketDispatcher.write(SocketDispatcher.java:47)
	at sun.nio.ch.IOUtil.writeFromNativeBuffer(IOUtil.java:93)
	at sun.nio.ch.IOUtil.write(IOUtil.java:65)
	at sun.nio.ch.SocketChannelImpl.write(SocketChannelImpl.java:471)
	at org.apache.zookeeper.ClientCnxnSocketNIO.doIO(ClientCnxnSocketNIO.java:117)
	at org.apache.zookeeper.ClientCnxnSocketNIO.doTransport(ClientCnxnSocketNIO.java:366)
	at org.apache.zookeeper.ClientCnxn$SendThread.run(ClientCnxn.java:1081)
2019-08-05 16:11:02,302 INFO org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore: Exception while executing a ZK operation.
org.apache.zookeeper.KeeperException$ConnectionLossException: KeeperErrorCode = ConnectionLoss for /bi-rmstore/ZKRMStateRoot/RMAppRoot/application_1551528254601_0725/appattempt_1551528254601_0725_000001
	at org.apache.zookeeper.KeeperException.create(KeeperException.java:99)
	at org.apache.zookeeper.KeeperException.create(KeeperException.java:51)
	at org.apache.zookeeper.ZooKeeper.exists(ZooKeeper.java:1045)
	at org.apache.zookeeper.ZooKeeper.exists(ZooKeeper.java:1073)
	at org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore$9.run(ZKRMStateStore.java:1058)
	at org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore$9.run(ZKRMStateStore.java:1055)
	at org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore$ZKAction.runWithCheck(ZKRMStateStore.java:1128)
	at org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore$ZKAction.runWithRetries(ZKRMStateStore.java:1161)
	at org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore.existsWithRetries(ZKRMStateStore.java:1055)
	at org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore.updateApplicationAttemptStateInternal(ZKRMStateStore.java:712)
	at org.apache.hadoop.yarn.server.resourcemanager.recovery.RMStateStore$UpdateAppAttemptTransition.transition(RMStateStore.java:243)
	at org.apache.hadoop.yarn.server.resourcemanager.recovery.RMStateStore$UpdateAppAttemptTransition.transition(RMStateStore.java:226)
	at org.apache.hadoop.yarn.state.StateMachineFactory$SingleInternalArc.doTransition(StateMachineFactory.java:362)
	at org.apache.hadoop.yarn.state.StateMachineFactory.doTransition(StateMachineFactory.java:302)
	at org.apache.hadoop.yarn.state.StateMachineFactory.access$300(StateMachineFactory.java:46)
	at org.apache.hadoop.yarn.state.StateMachineFactory$InternalStateMachine.doTransition(StateMachineFactory.java:448)
	at org.apache.hadoop.yarn.server.resourcemanager.recovery.RMStateStore.handleStoreEvent(RMStateStore.java:812)
	at org.apache.hadoop.yarn.server.resourcemanager.recovery.RMStateStore$ForwardingEventHandler.handle(RMStateStore.java:872)
	at org.apache.hadoop.yarn.server.resourcemanager.recovery.RMStateStore$ForwardingEventHandler.handle(RMStateStore.java:867)
	at org.apache.hadoop.yarn.event.AsyncDispatcher.dispatch(AsyncDispatcher.java:182)
	at org.apache.hadoop.yarn.event.AsyncDispatcher$1.run(AsyncDispatcher.java:109)
	at java.lang.Thread.run(Thread.java:745)
2019-08-05 16:11:02,302 INFO org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore: Retrying opertion on ZK. Retry on. 63

从日志可以很明显的看出来是与zk断链导致的问题,然后首先怀疑是不是zk出了什么问题
很自然的我们会通过客户端去链接zk,然后发现zk是好的,没啥大问题,WHAT? zk好的为什么RM会跟zk断链,带着这个疑问,我们去查看了zk日志
通过zk日志我们也发现了很多 Closed socket connection 的关键字,很明显链接被断开了

ZK日志

2019-08-05 16:12:02,103 - WARN  [NIOServerCxn.Factory:0.0.0.0/0.0.0.0:2181:NIOServerCnxn@380] - Exception causing close of session 0x2790d078e58be8b due to java.io.IOException: Len error 1899056
2019-08-05 16:12:02,103 - INFO  [NIOServerCxn.Factory:0.0.0.0/0.0.0.0:2181:NIOServerCnxn@1091] - Closed socket connection for client /10.216.2.25:41586 which had sessionid 0x2790d078e58be8b

日志上有一个很明显的 Len error 1899056,看来这里心里就大概有数了
zk数据通信默认有一个限制,一次请求不能超过1M,这个值一看就超过了1M,正式因为这个,导致链接被断开,通信失败
那么为什么请求会那么大呢?居然有1M多,原因是这个yarn集群的配置中将RMSTATE存在了zk中,而当任务比较多的时候,zk中的数据也会变得越来越多,解决这个问题也很简单,就是把1M改大一些,不过这个需要客户端和服务端一起改,而且必须保证一致

  • ResouceManager (ZK客户端)
    hadoop集群修改 yarn-env.sh 对参数YARN_OPTS 追加 - Djute.maxbuffer=41943040

  • flink客户端 (ZK客户端)
    修改flink客户端中的 flink-conf.yaml 新加一行
    env.java.opts: -Djute.maxbuffer=41943040

  • ZK服务端
    zk集群修改 zkEnv.sh 对参数 JVMFLAGS 追加 -Djute.maxbuffer=41943040

然后重启zk, 重启rm后,恢复正常

后续

本次故障处理过程中,并未修改yarn配置,RMSTATE仍然存放在zk中,虽然这次的问题解决了,但也给未来挖了一个坑,半年之后由于这个又产生一个新的故障,这个后面我会再写一篇来描述,有兴趣的也可以看看。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Hadoop中的YARN是一个资源管理器,可以管理集群中的资源,包括内存、CPU和磁盘等。它可以管理作业的执行和资源分配,同时提供了故障转移和高可用性等功能。YARN采用了面向应用程序的资源管理器,使得不同类型的应用程序可以共享集群资源,从而提高了资源的利用率和集群的利用率。YARNHadoop生态系统中的一个核心组件,广泛应用于大数据处理、机器学习和人工智能等领域。 ### 回答2: YARN(Yet Another Resource Negotiator)是Hadoop中的集群资源管理器,旨在解决Hadoop 1.x版本中资源管理和作业调度的局限性。YARN的出现使得Hadoop能够支持更灵活的作业运行方式,提高了集群的资源利用率和作业执行效率。 YARN的核心组件包括资源管理器(ResourceManager)和节点管理器(NodeManager)。资源管理器负责管理整个集群的资源,并为所有应用程序分配适当数量的资源。节点管理器负责在各个节点上启动、监视和停止容器,容器是运行在节点上的应用程序的运行环境。 在YARN中,用户可以通过使用不同的应用程序框架(如MapReduce、Spark等)来运行任务。应用程序被分为多个任务,每个任务由一个或多个容器运行。当一个应用程序被提交时,资源管理器将为其分配合适的资源,并在节点管理器上启动容器。节点管理器负责监控容器的运行状态,并在需要时重启失败的容器。一旦一个任务完成,节点管理器将释放相关的资源。 YARN的出现使得Hadoop能够更好地与其他计算框架进行整合,例如支持在同一个集群中同时运行MapReduce和Spark作业。通过动态分配资源、弹性调度和容错机制,YARN能够更好地适应不同的作业需求和资源利用情况。此外,YARN还具有良好的可伸缩性,能够支持集群规模的快速扩展。 总之,YARNHadoop生态系统中起到了关键的作用,它提供了一个灵活高效的资源管理和作业调度平台,使得Hadoop能够更好地满足大数据处理的需求。 ### 回答3: Hadoop中的YARN是Yet Another Resource Negotiator(另一种资源协调器)的缩写,它是Hadoop的一个核心组件。YARN的主要目标是改善Hadoop的资源管理和任务调度。 在Hadoop早期版本中,MapReduce框架负责所有任务的管理、资源分配和任务调度。然而,随着Hadoop集群的规模和复杂度不断增加,原始的MapReduce实现已经不能满足大规模并行运算的需求。 YARN的引入解决了这些问题。YARNHadoop集群的资源管理和任务调度从MapReduce框架中分离出来。它引入了一个全的资源管理器(ResourceManager)和应用程序管理器(ApplicationMaster)。 ResourceManager负责整个集群的资源管理,它通过分配和监控集群中的资源,在集群各节点之间合理分配计算、存储和网络资源。ResourceManager可以通过配置,为不同的应用程序分配不同的计算资源,确保集群的资源利用率达到最优。 ApplicationMaster则是每个应用程序(如MapReduce、Spark等)的管理者,它与ResourceManager通信,并协调任务的执行。每个应用程序实例在启动时都会与ResourceManager注册一个ApplicationMaster,并负责分配和管理任务。 通过引入YARNHadoop架构变得更加灵活和可扩展。除了MapReduce,现在可以使用其他计算框架,如Spark和Flink,利用YARN完成任务调度。这为开发人员提供了更多选择,并提高了Hadoop集群的利用率。 总的来说,YARNHadoop中起到了关键的作用,通过分离资源管理和任务调度,实现了更高效的资源利用和任务管理。它为Hadoop生态系统的发展提供了基础,并为用户提供了更多灵活和可扩展的选择。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值