假设我尝试向kerberized集群提交spark(2.4.x)作业,但没有有效的kerberos凭据。在这种情况下,spark launcher反复尝试启动hadoop ipc调用,但失败:
20/01/22 15:49:32 INFO retry.RetryInvocationHandler: java.io.IOException: Failed on local exception: java.io.IOException: org.apache.hadoop.security.AccessControlException: Client cannot authenticate via:[TOKEN, KERBEROS]; Host Details : local host is: "node-1.cluster/172.18.0.2"; destination host is: "node-1.cluster":8032; , while invoking ApplicationClientProtocolPBClientImpl.getClusterMetrics over null after 1 failover attempts. Trying to failover after sleeping for 35160ms.
这将重复多次(在我的例子中是30次),直到最后启动器放弃,作业提交被认为失败。
其他各种类似的问题都提到了这些特性(实际上是Yarn特性,但前缀是 spark.
按照标准的机制通过他们与Spark应用)。
spark.yarn.maxAppAttempts spark.yarn.resourcemanager.am.max-attempts
但是,这两个属性都不会影响我描述的行为。如何控制spark作业提交中ipc重试的次数?
1条答案
按热度按时间aiazj4mn1#
经过大量的调试,我找到了这里涉及的属性。
yarn.client.failover-max-attempts
(控制最大尝试次数)如果不指定这一点,尝试次数似乎来自这两个属性的比率(分子第一,分母第二)。
yarn.resourcemanager.connect.max-wait.ms
yarn.client.failover-sleep-base-ms
当然,与任何Yarn特性一样,这些特性必须加前缀spark.hadoop.
在spark工作提交的背景下。相关的类(解析所有这些属性)是
RMProxy
,在hadoop yarn项目中(来源于此处)。所有这些以及相关的属性都记录在这里。